NDK官方开发指南翻译之 How-To

Android NDK How-To:

-----------------------------


NDK用户收集的一些使用技巧



如何强制显示编译命令:

-------------------------------


执行“ndk-build V=1”会显示实际编译的命令。这个可以用来验证是否按你的期望进行编译,同时可以在NDK编译系统中检查bug


V= 1来自于Linux内核编译系统)



如何强制重新编译你所有的源代码:

----------------------------------------------


使用 GNU Make “-B” 选项,如下:


ndk-build �CB



如何将你的本地代码放在$PROJECT/jni 之外的地方:

-----------------------------------------------------------------------------


当然,你可以在$PROJECT/jni/Android.mk 文件中包含放在其他地方的Android.mk文件。


另外一种办法是,你可以在Application.mk中定义 APP_BUILD_SCRIPT,让它指向一个Android.mk文件。



如何编译一个工程的本地文件,而不用cd到工程的目录中:

------------------------------------------------------------------------------


有时候,你需要重新编译本地文件,而又不想从命令行cd到工程的顶级目录中去。你可以使用GNU-Make -C <path>’选项,如:


ndk-build  �CC <project-path>


如何将Application.mk文件放在$PROJECT/jni之外的地方:

----------------------------------------------------------------------------------------


NDK r4开始,你只要简单的将Application.mk文件放在$PROJECT/jni下,然后从你的目录树执行“ndk-build”脚本即可。


如果你想使用“ndk-build”,但是Application.mk放在其他地方,可以使用 GNU Make变量:


ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk


如果你使用之前版本遗留下来的$NDK/apps/<name> 编译方法,你可以创建一个符号链接,指向Application.mk最终所在位置,例如,假如你这样写:


$PROJECT/foo/Application.mk


你可以像这样创建一个符号链接:


ln �Cs$PROJECT/foo $NDK/apps/<name>


这会使得$NDK/apps/<name>/Application.mk直接指向$PROJECT/jni/Application.mk


注意生成的文件依然在$NDK/out/apps<name>中。


windows用户:只能在Cygwin上面使用符号链接“ln-s”命令:


   ln�Cs <target> <link>



如何正确的将你要包含的目录添加到你的module声明中:

----------------------------------------------------------------------------


如果你定义了很多modules,通常你在编译一个module的时候需要包含另一module的头文件。例如,考虑下面的例子:


$PROJECT/jni/foo/

 Android.mk

 foo.h

 foo.c


$PROJECT/jni/bar/

 Android.mk

 bar.c

在‘bar.c’中使用了‘#include <foo.h>’。你编译的时候,必须在jni/bar/Android.mk中把‘foomodule的路径添加进来。


可以使用下面的设置:


  LOCAL_C_INCLUDES  := ../foo


但是这样是不能工作的,因为所有的编译都是在调用‘ndk-build’的那个目录下进行的,并且所有的include文件也必须相对于这个目录。


正确的应该是:


  LOCAL_C_INCCLUDES  :=$(LOCAL_PATH)/../foo


使用了一个相对路径$(LOCAL_PATH),这样你就可以根据自己的需要将‘foo’和‘bar’移动到‘source’目录结构中更深层次的目录下了。



如果你要用绝对路径,你可以使用NDK_APP_PROJECT_PATH指向你的工程目录。


  LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/foo


但是,我们不推荐使用这个,使用相当路径$(LOCAL_PATH)会更好一些。


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