首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

NDK开发指南-NDK使用方法

2012-08-25 
NDK开发指南---NDK使用方法Android NDK的使用方法:?NDK的用户提示和技巧集合?如何

NDK开发指南---NDK使用方法

Android NDK的使用方法:

======================

?

NDK的用户提示和技巧集合

?

如何强制显示build命令

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

?

执行"ndk-build V=1",实际生成的命令将会被显示。这可以用来验证你编译的东西,并且还会检查NDK的

build system中的错误。

?

(V=1 来自Linux内核的build system)

?

如何强制重新编译你的源码

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

使用GNU Make的“-B”选项

?

ndk-build -B

?

如何存储本地源码到除$PROJECT/jni以外的位置:

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

?

首先,你可以在你的$PROJECT/jni/Android.mk中包含另一个不同位置的Android.mk

?

另外,你需要在你的Application.mk文件中定义APP_BUILD_SCRIPT来指向那个替代的Android.mk文件

?

如果在不使用cd-ing的情况下来编译你的本地项目文件

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

有时候,你需要在不用使用cd命令切换到根目录的情况下重新编译你的本地项目文件,可以使用

GNU-Make的'-C <path>'选项,如:

?

ndk-build -C <project-path>

?

如何将你的Application.mk文件存储子$PROJECT/jni目录之外

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

从NDK r4开始,你可以简单的将源文件放到$PROJECT/jni/目录下,然后执行'ndk-build'脚本

?

如果你想使用'ndk-build'命令但是将源文件放到了其他的位置,你可以使用如下命令:

?

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

?

如果你想使用传统的$NDK/apps/<name> 来build system,你可以创建一个符号链接到你最终的Application.mk

比如:

?

$PROJECT/foo/Applicatio.mk

?

用如下的命令创建符号链接

?

ln -s $PROJECT/foo $NDK/apps/<name>

?

这将使得你的$NDK/apps/<name>/Applicaiton.mk文件直接指向$PROJECT/jni/Application.mk

?

注意,这样生成的文件将仍然在$NDK/out/apps/<name>目录下。

?

Windows用户在使用Cygwin的情况下,它可以通过"ln -s"命令来创建符号链接,例如

?

ln -s <target> <link>

?

如何正确的添加一个包含目录到你的模块中:

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

?

如果你定义了若干模块,在编译另一个模块的时候需要包含某个模块的头文件,例如

?

$PROJECT/jni/foo/

Android.mk

foo.h

foo.c

?

$PROJECT/jni/foo/

Android.mk

fo.c

?

bar.c使用了"#include <foo.h>",你需要正确的将路径添加到foo模块的jni/bar/Android.mk中

?

例如,可以使用如下这样

?

LOCAL_C_INCLUDES := ../foo

?

但是这样是不会执行的,因为所有编译都从'ndk-build'被调用所在的目录开始,这些包含文件必须是

相对的才可以。

?

正确的方法是:

?

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

?

它才哦那够了相对路径的方式,你需要将foo和bar移到源码目录的更深层次下。

?

如果你必须需要它,你可以使用NDK_APP_PROJECT_PATH指向你的项目目录

?

LOCAL_C_INCLUDES :=$(NDK_APP_PROJECT_PATH)/jni/foo

?

然而我们不建议这种方式,相对路径$(LOCAL_PATH)这种方式会更好些

热点排行