【问题标题】:ndk-build stays at NDEBUG=1 despite Gradle debuggable: true in Android Studio尽管 Gradle debuggable: true 在 Android Studio 中,ndk-build 仍保持在 NDEBUG=1
【发布时间】:2017-02-25 14:08:09
【问题描述】:

我在尝试让 Gradle 通过 NDK 构建编译我的 JNI 代码的调试版本时遇到了很多困难。我已将调试版本设置为可在 build.gradle 文件中调试,如下所示:

buildTypes {
    debug {
        debuggable true
        jniDebuggable true
    }
}

如果我检查构建/编辑构建类型,我可以确认这些开关正在生效。但是,一旦我检查了.externalNdkBuild 目录中的ndkBuild_build_command.txt 文件,我就会注意到以下条目:

NDEBUG=1
APP_PLATFORM=android-9

我可以确认我的 JNI 代码似乎不可调试。即使断点触发,变量在 LLVM 中都显示“变量不可用”。

关于为什么在调试版本中打开 NDEBUG 的任何想法?作为旁注,我也不知道 android-9 平台正在进入哪里......我没有将它设置在我能找到的任何地方。

【问题讨论】:

    标签: android c++ android-studio android-ndk


    【解决方案1】:

    如果您使用带有 externalNativeBuild 的 Android Studio 2.2,您可以在 Application.mk 中设置APP_OPTIM=debug 或通过参数覆盖设置NDK_DEBUG=1,例如

    externalNativeBuild {
      ndkBuild {
        arguments "NDK_DEBUG:=1"
      }
    } 
    

    【讨论】:

    • 这很有帮助——这基本上是我已经确定的。仅使用 Gradle 设置 NDK_DEBUG 值,然后在 Application.mk 中检测该值以控制 APP_OPTIM 和任何其他标志。这个构建系统绝对是一场灾难。知道为什么我的 .iml 文件中的 SELECTED_BUILD_VARIANT 会卡在“发布”而不是“调试”上吗?我越来越讨厌 Android Studio 和 Gradle。我仍然不知道为什么 NDEBUG=1 总是设置为 true,无论是否调试构建。但是,如果您定义 NDK_DEBUG,它似乎会删除优化并取消定义 NDEBUG=1。疯了。
    • 除了“是”之外,您的问题/投诉没有简短的回答。您是为 library 模块还是 application 运行 ndk-build?
    • 适用于我的应用程序模块。我使用的是基于 C++ 的 Cocos2d-x,所以几乎 一切 都是在本机代码中完成的。我已经设法使事情达到一种合理的状态。我意识到一件大事是,无论出于何种原因,我都必须不断点击“刷新链接的 C++ 项目”。我是谁认为只要求它构建就可以在不使缓存失效并重新启动 Android Studio、清理项目、同步 Gradle 文件然后刷新链接项目的情况下工作?!
    • 此问题是由错误 (b.corp.google.com/issues/225273) 引起的。我上周修复了它,我认为它应该适用于 Android Studio 2.2.3。一旦你可以升级到那个版本,你就不需要 Alex 的出色解决方法了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-09
    • 2016-09-19
    • 2013-05-16
    • 2015-02-15
    • 2022-08-22
    相关资源
    最近更新 更多