【问题标题】:Debug vs. Release builds in the Android NDKAndroid NDK 中的调试与发布版本
【发布时间】:2011-09-29 04:23:10
【问题描述】:

我正在开发一个必须移植到 Android 的大型游戏引擎。所有代码都是 C/C++,所以我们通过 NDK 进行移植。我已经建立了所有内容,但是经过大量搜索后,我仍然不确定构建 .so 文件的 Debug 与 Release 版本的最佳方法是什么。每次都手动更换东西已经过时了。

每个目标都有不同的 Application.mk 文件吗?或者有什么方法可以在 jni/ 目录下的单个 Android.mk 文件中包含多个目标?或者第三种选择可能是编写一个标准的 makefile 来设置 Android.mk 文件用来通知构建过程的环境变量?

最后,关于必须在 AndroidManifest.xml 文件中设置的 android:debuggable 标志的最后一个问题。这实际上对复制到设备的生成的本机代码有什么影响?

最好的,谢谢,

凯文

【问题讨论】:

  • 那么,无论如何,您如何选择手动调试或发布? NDK 示例似乎没有任何调试或发布标志,也没有使用 -Ox 选项。

标签: android debugging makefile release android-ndk


【解决方案1】:

每个目标都有不同的 Application.mk 文件吗?

没有。单独的子目录,都有自己的 Android.mk(共享和静态库),但我只有一个 Application.mk。

我的 Application.mk 只是:

APP_STL := gnustl_static
APP_OPTIM := debug

我仍然不确定构建 .so 文件的 Debug 与 Release 版本的最佳方法是什么。每次都手动更换东西已经过时了。

至少对我来说,使用 jni/Android.mk + Application.mk 布局有点分散。

Application.mk 有APP_OPTIM := debug 然后在 AndroidManifest.xml 的应用程序元素中我有android:debuggable="true" 当您使用 ndk-build 构建时,它会使用此清单标志来确定优化(这对于关闭或打开、关闭以进行分析等很有用)

(有点题外话)我最近遇到过

https://code.google.com/p/android-ndk-profiler/

当与http://code.google.com/p/jrfonseca/wiki/Gprof2Dot结合使用时

生成一些漂亮的图像来帮助我的小脑袋了解手机本身的运行情况。

【讨论】:

  • 是的,我已经完成了所有这些事情——我最终做的是为每个目标(发布/调试)使用不同的 Application.mk。然后在每个文件(Release.mk/Debug.mk)中,我通过 APP_CFLAGS 指定全局 c 标志并调用 ndk-build,从标准 makefile 中指定 Release.mk 或 Debug.mk。
  • 我发现自己做的分析比调试更多,并且有更多的标志需要在每个子项目的基础上设置/过滤(例如,-fomit-frame-pointer 和 -pg 不兼容) ,所以它在我的案例中涉及更多,因为我不希望我的整个库链都是 -pg。
【解决方案2】:

您不需要使用 Android.mk 系统来构建您的 .so 文件。就个人而言,我将自己的 Makefile 与我需要的目标一起使用,这允许非常标准化的调试与发布构建规范。

【讨论】:

  • Android.mk 文件是否支持单个文件中的多个目标?我希望有办法使用他们的系统来挽救这个问题。
  • 我们也使用我们自己的构建系统(不是 ndk),但要注意这是很多工作。您肯定会想要构建一些示例 NDK 项目,并确保您了解 NDK 使用编译器标志等所做的一切。(我们不使用 NDK 的东西,因为我们也在进行许多非 android 构建;只使用 NDK对于 android 来说,比使用我们自己的构建系统做所有事情还要工作)。
【解决方案3】:

我使用一个文件为不同的目标构建一个库。在 Application.mk 中添加这个“APP_ABI := armeabi armeabi-v7a”它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 2020-08-02
    • 1970-01-01
    • 2011-04-16
    • 2012-11-13
    • 2018-09-08
    相关资源
    最近更新 更多