Android NDK( NativeDeveloperKit 


)是个工具集,它提供一套方法,使Android应用程序(Java程序)可以内嵌native(C,C++)程序。



Android应用程序(Java程序)运行于Dalvik虚拟机中。NDK允许应用程序的一部分使用native语言(C,C++)来实现。这对很多程序都是有帮助的,比如需要利用以前完成的C,C++代码,也可以提高运行速度。




NDK提供以下:


1. 一组工具和编译文件,用来将C/C++代码生成Native库。


2. 将Native库嵌入应用程序包(APK)的方法。


3. 一组Native系统头文件和库。它们支持所有未来Android版本(从Android1.5开始)。但应用程序使用NativeActivity则必须在Android2.3或更高版本使用。(因为android.app.NativeActivity从API9才有)


4. 文档,例子和指南。



最近的NDK(NDK R7C)支持的指令集如下:


1. 

ARMv5TE (including Thumb-1 instructions)

2.    

ARMv7-A(including Thumb-2 and VFPv3-D16 instructions, with optionalsupport for NEON/VFPv3-D32 instructions)

3.   

x86 instructions (see CPU-ARCH-ABIS.HTML for moreinformation) 


ARMv5TE(包括Thumb-1)与ARMv7-A的主要区别是:ARMv7-A支持硬件VFP,

Thumb-2  ,Neon指令。


可以编译为任意一种或者两者的指令集, 

缺省编译为 ARMv5TE指令。但转换为 ARMv7-A  也是很容易的( Application.mk

  中修改即可)。也可以在同一时刻编译为双指令集。( CPU-ARCH-ABIS.HTML in the NDKpackage  中下一步察看)


NDK提供libc(C库),libm(数学库),

3D graphics 库的稳定头文件等。


NDK的成分如下:


NDK包含APIs,文档,例子程序等。



Developer Tools包含如下:


1.交叉编译器,可以在Linux,Windows,MacOS下产生 native ARM二进制文件。


2.一组系统头文件


  • libc (C library) headers
  • libm (math library) headers
  • JNI interface headers
  • libz (Zlib compression) headers
  • liblog (Android logging) header
  • OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries)headers
  • libjnigraphics (Pixel buffer access) header (for Android 2.2 andabove).
  • A Minimal set of headers for C++ support
  • OpenSL ES native audio libraries
  • Android native applicationAPIS

    NDK同时还提供一套编译系统,以方便使用。可以不必了解Toolchain/CPU/Platform/ABI等细节,只是创建一个简单的build文件,指明哪个文件需要被编译,以及哪个Android应用程序将要使用它,就可以编译成功。



NDK无法产生最终的APK,只能产生被APK所使用的动态库。(Sam:其实还可以产生native C可执行程序)


NDK需要

GNU Make 3.81或者以上版本(make-v可以看到)。




另外:Android1.5之后,Android2.3之前的Android版本。使用C/C++代码,只能用JNI方式,并使用NDK编译。
但在Android2.3 之后,因为有了

android.app.NativeActivity 。所以可以不再利用JNI方式由Java调用C/C++代码编译出的库了。


注:一些Linux下单列出来的库,被合并到C库中了,例如libpthread.so.被合并入libc.so


注意:此处NDK版本为NDK R7C.