java native interface(java本地接口)
ABI: application binary interface (应用程序二进制接口)java
JNI是Java语言提供的Java和C/C++相互沟通的机制,Java能够经过JNI调用本地的C/C++代码,本地的C/C++的代码也能够调用java代码。JNI 是本地编程接口,Java和C/C++互相经过的接口。Java经过C/C++使用本地的代码的一个关键性缘由在于C/C++代码的高效性。android
NDK是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一块儿打包成apk。这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差别,开发人员只须要简单修改mk文件(指出“哪些文件须要编译”、“编译特性要求”等),就能够建立出so。它能够自动地将so和Java应用一块儿打包,极大地减轻了开发人员的打包工做。c++
#为何要使用JNI程序员
#怎么使用JNI算法
dev-cpp.exe 编程
Java经过JNI机制和C/C++沟通的具体步骤微信
实际执行Java代码去和本地的C/C++代码互相沟通app
在标准的Java平台下,每一个Process里能够产生不少JavaVM对象,每一个JavaVM对象都有一个与之对应的JavaVM对象,可是在Android平台上,每一个Process只能产生一个DalvikVM对象,也就是说在一个Android的进程中是经过有且只有一个虚拟器对象来服务全部Java和C++代码的。jvm
当java须要C/C++代码时,在DalvikVM虚拟机中加载动态连接库时,会先调用JNI_Onload()函数,此时就会把javaVM对象的指针存储于C层JNI组建的全局环境中,在JAVA层调用C层的本地库函数时,调用C本地函数线程必然经过Dalvik VM来调用C本地函数,测试Dalvik虚拟机会为本地的C组建实例化一个JNIEnv指针,该指针指向Dalvik虚拟机的具体函数列表,当JNI的C组件调用java层方法和属性时,须要经过JNIEnv指针来进行调用。函数
当C++组件主动调用Java层方法时,须要经过JNI的C组件把JNIEnv指针传递给C++组件,此后,c++组件便可经过JNIEnv指针来掌控Java层代码。
对于JNI和NDK不少Android开发初学者没有搞明白这个问题:
同时NDK提供的库和函数功能颇有限,仅仅处理些算法效率敏感的问题
若是你以为此文对您有所帮助,欢迎入群 QQ交流群 :232203809
微信公众号:终端研发部