III.5/调用NDK构建系统:
使用NDK构建机器代码的最佳方式是使用'ndk-build'脚本。你也可以使用另一个老的方式--依赖于创建'$NDK/apps'子目录的方式。
不论哪种方式,编译成功后,那些编译出的“裸体”(不带有调试信息的)二进制模块都将被复制到你应用项目所在的路径下(注意非“裸体”的二进制模块会保留以提供调试能力。没有必要把非“裸体”模块复制到设备上去)。
1:使用'ndk-build'命令:
'ndk-build'脚本可以在NDK安装所在的顶级目录下找到,可以直接你的应用项目的目录(也就是你的AndroidManifest.xml所在的目录)或任何子目录下调用。
例如:
cd$PROJECT
$NDK/ndk-build
这将启动NDK构建脚本,脚本将自动探测你的开发系统和应用项目文件来决定构建什么东西。
例如:
ndk-build
ndk-build clean --> 清空所编译出的二进制文件们。
ndk-build -B V=1 --> 强制完全重新编译,并显示命令
默认下,脚本希望看到一个可选的$PROJECT/jni/Application.mk和一个必须的$PROJECT/jni/Android.mk。
成功后,会把产生的二进制模块(即共享库)复制到你的项目树中的合适位置。你可以在之后使用’ant’命令或ADP插件来重建完整的应用包。
关于这个脚本的更完整的说明和可用的选项,见docs/NDK-BUILD.html。
2:使用$NDK/apps/<name>/Application.mk:
这种构建方式是NDKr4以及正前版本的唯一选择,当前还支持,仅仅是为了兼容的原因。我们强烈建议你麻溜地移植为使用'ndk-build'命令的方式,因为我们可能很快就把这种方式抛弃掉。
用它需要这样做:
1.在你的NDK安装目录下(不是你的应用路径)创建一个子目录,叫:$NDK/apps/<name>/ 。<name>是一个任意的名字用来向NDK构建系统描述你的应用(不能有空格)。
2.写一个 $4NDK/apps/<name>/Application.mk,需在里面定义一个APP_PROJECT_PATH指向你的应用项目目录。
3.在命令行中,进入到NDK安装路径,然后调用顶层的GNUMakefile,如下:
cd$NDK
makeAPP=<name>
结果同第一种方法一样,除了一些中间产物放在$NDK/out/apps/<name>/下之外。
IV.重建你的应用包:
使用NDK产生二进制文件后,你需是用通常的方式重建的你应用包文件(.apk),即使用'ant'命令或ADTEclipse 插件。
你的新.apk中将被嵌入共享库文件,然后在安装到设备时被系统自动分离出来。
V.对调试的支持:
NDK提供了一个辅助脚本,叫做'ndk-gdb',来十分轻松地为你的应用启动一个调试会话。
本地调试只能在运行Android2.2 或更高系统的设备上执行。并且不需要特殊用户权限。
更多信息,请对docs/NDK-GDB.html。简要来说,本地调试分以下几步:
1.确定你的应用是可调试的 (在AndroidManifest.xml中设置android:debuggable为"true")。
2.使用'ndk-build'构建你的共享库,然后构建你的应用然后安装到设备或模拟器上。
3.运行你的应用。
4.在你的应用项目目录下运行 'ndk-gdb'。
你将看到gdb提示符出现。然后扒着GDB手册笨笨的调吧。