JNI可以让我们在java代码中调用本地库的功能。
下面记录一下JNI简单的使用方法
- 创建java端接口
public class JNIIterface { // 导入最终生成的dll文件
static {
System.loadLibrary("JNIDemo");
} // 声明dll文件中实现的接口
public native int MyMethod(); public native int add(int x, int y);
}
2. 生成接口对应的C的头文件
上面创建的JNIIterface类,JNIIterface .class文件的路径:\JNIDemo\bin\base\JNIIterface .class
在工程目录下的bin目录下执行命令:javah -classpath . -jni base.JNIIterface
然后会在\JNIDemo\bin\目录下生成base_JNIIterface.h文件
3. 使用visual studio编写接口的实现
创建C工程,具体步骤如下:
第一步:
第二步:
第三部:
导入需要的头文件
将上面第二步生成的头文件,以及jdk根目录下include目录下的jni.h和
include的win32目录下的jni_md.h文件拷贝到工程目录下(在创建的工程上面右键,然后点击倒数第二项就可以打开)
创建功能实现文件
在工程目录下源文件上右键,然后点击【追加】-》【新项目】,创建一个cpp文件
并编写如下代码:
#include "base_JNIIterface.h"
#include "jni.h"
#include <stdio.h> JNIEXPORT jint JNICALL Java_base_JNIIterface_MyMethod
(JNIEnv *, jobject){
printf("成功实现JNI测试DEMO");
return ;
} JNIEXPORT jint JNICALL Java_base_JNIIterface_add
(JNIEnv *, jobject, jint a, jint b){
return a + b;
}
4. 生成dll文件
在工程目录中的「解决方案」上右键,选择属性,然后如下图所示构成项目
然后编译工程后,会在工程目录下的Release目录下成成dll文件
5. 将dll文件配置到java工程
首先向dll文件放在java工程根目录下的lib目录下
然后按照如下步骤将dll文件作为Native Library添加进工程
编辑上图所示的Native Library Location,然后在弹出的界面选择Native Library所在的文件夹:
6. 编写测试类,检证JNI是否成功应用
public class HelloJNI { public static void main(String[] args) {
JNIIterface hw = new JNIIterface();
int t = hw.add(3, 7);
int s = hw.MyMethod();
System.out.println(t);
System.out.println(s);
}
}
运行后的测试结果如下:
成功??JNI??DEMO
上面就是记录了使用JNI的最基本步骤。
对于如何使用已经写好的第三方dll文件的功能,比如系统的dll文件,还需要进行深入探索。
参考文章:http://www.runoob.com/w3cnote/jni-getting-started-tutorials.html