如何指定让Android的NDK工具编译出Release版本或Debug版本的Native程序

Android提供了NDK开发工具,它在GNU Make的基础上,自己预先写好了一些通用的脚本。

这样就使得开发者不需要重头编写MakeFile,只需要为自己的模块编写相应的Application.mk(如需详细了解请参考《Application.mk语法解释》)和Android.mk(如需详细了解请参考《Android.mk语法解释》)脚本文件,并且在脚本中还可以使用很多Android NDK中预先定义好的变量和函数,从而极大的减少了开发者写编译脚本的难度,大大方便了对Native程序的开发。

而在编译的时候,只需要在命令行下进入项目所在目录,直接键入ndk-build命令就行了,它会在项目目录项搜索有没有“jni”子目录,并读取其中相应的Application.mk和Android.mk进行编译,非常简单。

这个命令太自动了,一切都替你完成了,但是有时候也会造成不便。比如,你想自己编译一个Debug版本的程序进行调试,但是Android NDK就是给你生成Release版本的。

那么,有没有什么办法,可以明确告诉Android NDK,到底是编译成Release版本的还是Debug版本的呢?

大概一共有三种办法,这里简单总结一下:

1)修改AndroidManifest.xml

ndk-build命令,默认会在当先项目路径下搜索到AndroidManifest.xml文件,并查看<application>标签中,有没有将属性android:debuggable明确的设置成"true"。

如果设置成true了,则会将模块编译成Debug版本的;反之,如果没有明确设置这个属性,或将其明确设置成“false”,则会将该模块编译成Release版本的。

2)在Application.mk文件中指定

可以在你要编译的模块的目录中的Application.mk文件中,设置APP_OPTIM变量的值,来明确指定要将你的模块编译成Release版本或Debug版本的(如果Application.mk文件不存在的话,请创建一个)。

APP_OPTIM变量可以被设置成两个值,即debug或release。

指定成debug,你的模块就会编译成debug版的:

APP_OPTIM := debug

反之,如果指定成release,你的模块就会编译成release版的:

APP_OPTIM := release

如果设置了这个变量的话,则在AndroidManifest.xml中无论怎么指定都没有影响,最终起效果的是这个变量的值。

而如果没有设置这个变量的话,才会根据AndroidManifest.xml中指定的版本来编译。

3)在ndk-build命令的参数中指定

从Android NDK r5版本开始,可以直接在ndk-build命令中,使用参数来指定编译出的是Release还是Debug版的。

如果想编译为Debug版本的,使用下面的命令:

ndk-build NDK_DEBUG=1

反之,如果想编译为Release版本的,可以使用下面的命令:

ndk-build NDK_DEBUG=0

如果不明确指定的话,则先查看Application.mk文件中有没有明确指定APP_OPTIM变量的值。

如果有的话直接按照它指定的值编译不同的版本;如果没有的话,则继续看AndroidManifest.xml中的情况来定到底编译哪个版本。

你可能感兴趣的:(android,debug,NDK,release)