一、简介
Android NDK(Native Development Kit)是一套开发工具,允许Android应用嵌入由C/C++源代码编译来的本地代码(绕过Dalvik虚拟机),通过JNI(Java Native Interface)调用。JNI和Android没有关系,只是一种Java调用Native的机制,第三方应用可以使用JNI完成自己的C动态链接库(.so文件),但只是把.so文件放到文件系统的特定位置,而如果想把.so文件和.apk打包,则需要NDK。
使用NDK有如下优点:1)保护代码,因为apk的java层代码容易被反编译,而C/C++库反编译较难;2)可以方便使用现存的开源库,因为其大部分都是用C/C++编写的;3)算法使用C/C++开发,可以提高程序执行效率;4)便于移植。但使用NDK会增加程序的复杂性,除非必须提高性能或使用第三方库,否则Google不建议使用NDK。
JNI提供了一个在Java平台上调用C/C++的一种途径,与其他类似接口(如Netscape Java运行接口)相比,JNI在设计之初就确保了二进制的兼容性(允许一个程序在不改变其可执行文件的条件下在不同的编译环境中工作),因而JNI编写的应用程序兼容所有Java虚拟机。JNI有自己的原始数据类型和数据引用类型,如下表和下图。