1.6 NDK开发环境配置

Google官方对NDK(Native Development Kit,原生开发工具集)的解释如下:

The Android NDK is a set of tools that allows Android application developers to embed native machine code compiled from C and/or C++source files into their application packages.

可见,NDK是为了方便应用开发者在程序中嵌入C/C++代码而提供的工具集。读者可以在http://developer.android.com/sdk/ndk/index.html下载NDK的安装包。

下载后只需解压到任意工作目录即可。有了NDK,就可根据示例程序编写JNI实现方法,然后放到NDK相应目录运行ndk-build,系统将自动编译出JNI方法对应的共享库。

在终端中运行命令tree-L1,查看NDK中都包含哪些组件。


allong@android:~/bin/android-ndk-r8$tree-L 1

├——build

├——docs

├——documentation.html

├——GNUmakefile

├——ndk-build//NDK编译脚本,大大简化了应用层JNI开发

├——ndk-build.cmd

├——ndk-gdb

├——ndk-stack

├——platforms

├——prebuilt

├——README.TXT

├——RELEASE.TXT

├——samples//NDK提供的示例代码

├——sources

├——tests

└——toolchains


在NDK出现之前,第三方应用程序基本依赖于SDK开发,如果要开发基于JNI的应用程序,其配置十分复杂。NDK的出现大大简化了这一过程,应用开发者可以方便地使用C/C++编写应用程序,并可以很方便地将生成的共享库文件封装进应用程序的安装文件(apk)。

相对于SDK开发,NDK开发的主要优势如下:

可以将一些涉及商业机密的代码用本地代码实现,这样发布的代码不容易被窃取。

可以将一些需要提高执行效率的代码放入本地中实现。

移植已有的C/C++代码资源,特别适合于游戏开发者。

但相对于SDK开发,NDK开发还有如下劣势:

NDK支持的功能远不如SDK。

程序兼容性很难保障。

调试难度加大。

本书主要讲解框架层部分,而框架层使用了大量的JNI调用。在应用层配合NDK演示JNI的使用极为方便,所以本书第2章JNI部分会通过一个实例来讲解在NDK下如何开发JNI应用。