III.NDK 开发实践:
下面是一个对使用NDK开发本地代码过程的粗略的概览:
1/将你的本地代码源码放在路径 $PROJECT/jni/下。
2/写一个文件:$PROJECT/jni/Android.mk,来描述你的源文件们。
3/可选的:在文件$PROJECT/jni/Application.mk中描述你的项目的更多细节。尽管你不需要从头写,但你可以处理多CPU问题以及改写编译/链接选项。(更多细节请观docs/APPLICATION-MK.html )。
4/在你的项目路径下或其任何子路径下运行"$NDK/ndk-build"来编译你的本地代码。
最后一步将在编译成功时复制你的应用所需共享库到你项目的跟路径下。然后你可以用跟以前一样的方式产生最终的.apk文件。
下面,是一些更多的细节:
III.1/配置NDK:以前的发行版需要你运行'build/host-setup.sh'脚本来配置你的NDK。但是这一步从第4版(NDK r4)开始被移除了。
将你的本地源码放在以下路径下:
$PROJECT/jni/
$PROJECT对应你的android应用项目的路径。
你可以随意组织jni下的内容,路径名和路径结构不会影响到最终产生的应用包。所以你无需使用类似于com.<mycompany>.<myproject>这样的名字。
注意 C和C++源码都是被支持的。默认C++文件扩展名是'.cpp',但是其它的扩展名也可以被处理。(见文档docs/ANDROID-MK.html).
也可以通过调整文件Android.mk的内容,把你的源码存放在其它路径下。
一个 Android.mk文件是一个很小的构建脚本。你编写它以描述你给NDK构建器的源码文件们。它的语法在docs/ANDROID-MK.html中有详细描述。
NDK简单的将你的原文件组织到多个"模块"中,每个模块可以是以下的任意一种:
-一个静态库
-一个共享库
你可以在一个Android.mk中定义多个模块或写多个Android.mk文件,每个文件只对应一个模块。
注意,一个Android.mk文件可能被构建系统分析多遍,所以不要假设某个变量没有被定义。默认下,NDK将寻找下面的构建脚本:
$PROJECT/jni/Android.mk
如果你想在子路径下定义Android.mk文件,你应该在顶层的Android.mk中包含它们。有个函数可以做到这个功能:
include$(call all-subdir-makefiles)
这将会包含当前构建路径的所有子路径下的Android.mk文件们。
Android.mk描述你要构建的模块们,而Application.mk文件描述你的应用自身。看文档docs/APPLICATION-MK.html来了解这个文件允许你做什么。这个文件主要包含:
-你的应用所需要模块的准确列表。
-产生的机器码所对应的CPU架构。
-可选的信息,像你要构建release还是 debug,特殊的C 或 C++编译参数以及其它需要应用到所有模块的构建选项。
这个文件是可选的:默认情况下,NDK将构建在Android.mk中列出的所有模块的并且默认面向CPUABI (armeabi).
有两种方法使用一个Application.mk:
-将它放在$PROJECT/jni/Application.mk位置,那么它会被'ndk-build'脚本自动使���。
-将它放在$NDK/apps/<name>/Application.mk,$NDK代表你的NDK安装路径。之后,在NDK路径下运行"make APP=<name>"。
这是在NDKr4 之前的办法。出于兼容的原因,当前还是被支持的,但是我们强烈鼓励你使用第一种方法。因为它简单并且不用改动NDK安装路径下的路径树结构。