使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)