JNI是什么
JNI(Java Native Language)提供了一种Java语言与C/C++通信的规范,使得Java程序能够调用C/C++语言实现的方法,从而使得方法得到复用,多用于图像、视频处理处理,在 C/C++ 中写的程序可以避开 JVM 的内存开销过大的限制、处理高性能的计算、调用系统服务等功能。提高了Java处理丰富业务的能力。当然,本地的 C/C++ 的代码也可以调用 Java 代码。
JNI用在哪里
JNI使用的场景多见于Android,NDK是谷歌专门为JNI开发者提供的SDK,通过NDK,开发者能够快速地完成动态链链接库多版本的发行。
数据类型对应表
JNI与C/C++有专门数据类型对应表。
下图所示是基本类型对应表。
引用类型对应表如下图所示。
JNI开发流程
- 编写声明了 native 方法的 Java 类
- 将 Java 源代码编译成 class 字节码文件
- 用 javah -jni 命令生成.h头文件(javah 是 jdk 自带的一个命令,-jni 参数表示将 class 中用native 声明的函数生成 JNI
- 规则的函数)
- 用本地代码实现.h头文件中的函数
- 将本地代码编译成动态库(Windows:*.dll,linux/unix:*.so,mac os x:*.jnilib)
- 拷贝动态库至 java.library.path 本地库搜索目录下,并运行 Java 程序
整个开发流程如下图所示。