Android的NDK操作方法:
===================
一个提示和技巧的集合献给NDK用户群
如何生成命令显示:
-------------------------------------------
执行“ndk-build V=1”,真正执行的编译命令会显示出来。这可以用来验证的你所期望的东西是否被编译,
同时编译系统还做了检查错误的工作。
(V=1 技巧来自Linux内核编译系统)
如何强制重新编译所有的源码:
-------------------------------------------
使用GNU make的 "-B" 选项,如:
ndk-build -B
如何在$PROJECT/jni 以外的地方存储 native 源码:
-------------------------------------------------- ---------------------
首先,你可以在 $PROJECT/jni/Android.mk 中简单地引入不其它的Android.mk
另外,你可以在Application.mk中定义 APP_BUILD_SCRIPT
去指向其它Android.mk文件。
如何不在工程目录下编译工程的native源文件:
-------------------------------------------------- ---------
使用GNU Make "-C <path>"选项,例如:
ndk-build -C <project-path>
如何在$PROJECT/jni以外的地方存储你的 Application.mk:
-------------------------------------------------- ---------------------
从NDK r4开始,你可以简单地替换$PROJECT/jni/下的文件,
从工程目录下启动ndk-build执行脚本。
如果你想使用 ndk-build 但是mk文件又在一个不同的地方。
可以使用 GNU Make 的变量覆盖当前的mk文件。
ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk
如果您使用的是传统的 $NDK/apps/<name> 编译方法,您可以创建
一个符号链接到您的最终Application.mk那里。例如:
$PROJECT/foo/Application.mk
您可以创建一个符号链接用下面的命令,如:
ln -s $PROJECT/foo/Application.mk $NDK/apps/<name>
这将使 $NDK/apps/<name>/Application.mk 直接指到了
$PROJECT/jni/Application.mk
请注意,生成的文件还是会在$NDK/apps/<name> 目录下
Windows用户:NDK被支持要基于Cygwin,
符号链接通过的“ln - s”命令,如下:
ln -s <target> <link>
如何正确地添加 包含目录 到你的模块声明中:
-------------------------------------------------- -----------------
如果你定义了一些模块,且是在编译其它文件时需要被包含一个模块的头部。例如,考虑
下面的例子:
$PROJECT/jni/foo/
Android.mk
foo.h
foo.c
$PROJECT/jni/bar/
Android.mk
bar.c
在bar.c中使用 #include <foo.h>
你将需要添加指到"foo"模块的路径 在jni/bar/Android.mk中
一种尝试是使用下列内容:
LOCAL_C_INCLUDES:= ../foo
然而,这将无法工作,因为所有的编译工作是在ndk-build被请求的目录,
包括的文件必须相对于它。
而正确的做法是:
LOCAL_C_INCLUDES:= $(LOCAL_PATH )/../foo
如果你确实需要它,你也可以使用NDK_APP_PROJECT_PATH来
指向你的项目目录:
LOCAL_C_INCLUDES:= $(NDK_APP_PROJECT_PATH)/jni/foo
但是,我们不建议使用这种方法,相对路径(LOCAL_PATH)是更好的选择。