使用 externalNativeBuild.ndkBuild 编译的 Android 原生调试
Posted
技术标签:
【中文标题】使用 externalNativeBuild.ndkBuild 编译的 Android 原生调试【英文标题】:Android native debug compiled with externalNativeBuild.ndkBuild 【发布时间】:2017-01-17 08:51:42 【问题描述】:我想在以下示例中调试 android Studio(2.2 版)中的原生代码:https://github.com/googlesamples/android-ndk/tree/master-ndkbuild。
我尝试编辑应用运行/调试配置并将调试器类型更改为原生或混合,但未成功。还尝试附加调试器选择混合或本机,但当调试器连接到进程时,应用程序不会在 C++ 代码中的断点处停止。
我有更大的项目,其构建类似于链接示例。目前无法重建 makefile,因此我想使用这种类型或项目设置运行调试。这种项目设置意味着;将 externalNativeBuild 与 ndk-build 一起使用。
有人知道如何调试这些示例吗?
【问题讨论】:
How to get NDK debugging to work in Android Studio?的可能重复 @LBes 他在谈论 Android Studio 2.2 中的新功能,即 externalNativeBuild... 我已经设法使用 cmake 作为 externalNativeBuild 和 NDK r12+ 来调试本机本机代码。仍然无法使用 ndk-build 进行调试...看起来我必须将所有构建脚本重写为 cmake。 @marioc64 关于使用 cmake 作为 externalNativeBuild 进行本地调试的任何提示?我仍然无法在本机代码中遇到任何断点。 【参考方案1】:在应用程序的build.gradle
:
buildTypes
debug
debuggable true
initWith debug
jniDebuggable true
externalNativeBuild
ndkBuild
cFlags "-DDEBUG=1"
cFlags
是可选的,但很有用。 official Google docs没有描述,我在Android Gradle plugin DSL docs找到了
适用于 Android Studio 2.2.2+
【讨论】:
感谢您的回复,反正我的原生构建被重写为 cmake。【参考方案2】:不幸的是,AS + gradle + ndk-build 不支持从 IDE 进行调试。解决的办法是把buildscripts重写成cmake。
【讨论】:
这不是真的。调试与库的生成方式无关。 你是对的,但问题是关于调试与 Android Studio (IDE) 的集成,而不是调试。 Studio 只需启动 LLDB 并将其连接到进程。 cmake 或 ndk-build 没有任何东西可以启用或阻止它。只要带有调试信息的原始库可用,LLDB 就可以处理它。 这是可能的,但 gradle android 插件应该默认将所有标志设置为正确的状态。可能@SBKarr 答案是解决方案,但目前我没有检查这个,因为我的构建已切换到 cmake。以上是关于使用 externalNativeBuild.ndkBuild 编译的 Android 原生调试的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)