1. JNI概述
JNI 是 Java Native Interface 的简称
- Java是跨平台的编程语言,然而在有些时候依然是有须要调用本地代码(这些代码通常是由 C 与 C++ 编写的)。
- JNI 是 Java 平台的一个功能强大的接口。这个 JNI接口提供了Java与操作系统本地代码互相调用的性能。
2. C/C++代码的步骤
- 在 Java 类中申明一个native办法
public native void sayHello();
- 应用 javah 命令生成蕴含 native 办法申明的C/C++头文件
javah com.omg.NativeLib
- 将生成的C/C++头文件来编写C/C++源文件
#include<iostream>#include "com_omg_NativeLib.h"using namespace std;JNIEXPORT void JNICALL Java_com_olive_NativeLib_sayHello (JNIEnv *, jobject){ cout << "hello world" << endl;}
- 将C/C++源文件编译成动态链接库(windows对应DLL,Linux对应so)
- 把dll文件的门路增加到环境变量PATH中
- 在Java类中加载dll文件,而后调用申明的native办法
System.load("C:\\lib\\NativeCodeJni.dll");NativeLib nl = new NativeLib();nl.sayHello();或者System.loadLibrary("NativeCodeJni");NativeLib nl = new NativeLib();nl.sayHello();
3. 应用JNI弊病
- 应用了 JNI,那么这个Java Application 将不能跨平台了。如果须要移植到别的平台上,那么须要从新编写native代码
- Java 是强类型的语言,而 C/C++并不是。因而,在编写JNI时要更小心
- 总之,必须在构建Java程序的时候,尽量少用本地代码
Visual studio环境配置