背景
1、JNI:
Java Native Interface。是一套编程接口,用来实现Java代码与本地的C/C++代码进行交互
2、用途:
可以通过JNI调用系统提供的api,因为操作系统或者抵触硬件驱动几乎都是c/c++写的。Java和C/C++不同 ,它不会直接编译成平台机器码,而是编译成虚拟机可以运行的Java字节码的.class文件,通过JIT技术即时编译成本地机器码,所以有效率就比不上C/C++代码,JNI技术就解决了这一痛点,JNI 可以说是 C 语言和 Java 语言交流的适配器、中间件。
3、优势
· 扩展:JNI扩展了JVM能力,驱动开发,例如开发一个wifi驱动,可以将手机设置为无限路由;
· 高效:本地代码效率高,游戏渲染,音频视频处理等方面使用JNI调用本地代码,C语言可以灵活操作内存;
· 复用:在文件压缩算法 7zip开源代码库,机器视觉 OpenCV开放算法库等方面可以复用C平台上的代码,不必在开发一套完整的Java体系,避免重复发明轮子;
· 特殊:产品的核心技术一般也采用JNI开发,不易破解
PS:由此也可以得出,使用c生成的so文件也有如下优势
· so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码;
· so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快;
· so内存分配不受Dalivik/ART的单个应用限制,减少OOM;
· 相对于java代码,二进制代码的反编译难度更大,一些核心代码可以考虑放在so中。
4、JNI 与 NDK 区别
JNI:JNI是一套编程接口,用来实现Java代码与本地的C/C++代码进行交互;
NDK: NDK是Google开发的一套开发和编译工具集,可以生成动态链接库&#x