我正在开发一款必须移植到Android的大型游戏引擎。所有代码都是C / C ++,所以我们通过NDK移植。我已经掌握了一切,但经过大量的淘汰后,我仍然不确定构建我们的.so文件的Debug vs. Release版本的最佳方法是什么。每次手工换东西都会变老。
每个目标都有不同的Application.mk文件吗?或者有没有办法在jni /目录下的单个Android.mk文件中包含多个目标?或许第三种选择可能是编写一个标准的makefile来设置Android.mk文件用来通知构建过程的环境变量?
最后,关于必须在AndroidManifest.xml文件中设置的android:debuggable标志的最后一个问题。这实际上对生成的复制到设备的本机代码有什么影响?
最好的,谢谢,
凯文
答案 0 :(得分:10)
每个目标都有不同的Application.mk文件吗?
没有。单独的子目录,都有自己的Android.mk(共享和静态库),但对我来说只有一个Application.mk。
我的Application.mk只是:
APP_STL := gnustl_static
APP_OPTIM := debug
我仍然不确定构建我们的.so文件的Debug vs. Release版本的最佳方法是什么。每次手工换东西都会变老。
至少对我来说,使用jni / Android.mk + Application.mk布局有点散布。
Application.mk有APP_OPTIM := debug
然后在AndroidManifest.xml的application元素中我android:debuggable="true"
当您使用ndk-build构建时,它使用此清单标志来确定优化(这对于关闭或打开,关闭以进行性能分析等非常有用)。
(一点关闭话题)我最近遇到了
https://code.google.com/p/android-ndk-profiler/
当与http://code.google.com/p/jrfonseca/wiki/Gprof2Dot
结合使用时生成一些漂亮的图像,以帮助我的小脑袋掌握手机本身的运行情况。
答案 1 :(得分:1)
您不需要使用Android.mk系统来构建.so。就个人而言,我使用自己的Makefile和我需要的目标,这允许非常标准化的调试与发布版本规范。
答案 2 :(得分:1)
我使用单个文件为不同的目标构建库。在Application.mk中添加这个“APP_ABI:= armeabi armeabi-v7a”它对我有用。