- 什么是JNI
JNI (Java Native Interface) 是 Java 调用c/c++ ,c/c++ 调用java de 一套 Api。
- 流程
1.编写native 方法
package amn;
public class JniTest {
// 1.编写native 方法
public native static String getStringFromC();
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
2.进入src 目录,用javah 命令,生成 .h头文件
Microsoft Windows [版本 10.0.17134.648]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\Users\Amn>cd F:\workplace\amn\src
C:\Users\Amn>f:
F:\workplace\amn\src>javah amn.JniTest
F:\workplace\amn\src>
刷新后 得到.h文件:
image.png
3.复制 .h头文件到cpp工程中
image.png
然后在c 工程中点击头文件 --添加—> 现有项 选中 .h文件 打开发现爆红
image.png
4.复制jni.h 和jni_md.h文件到cpp工程中解决上述问题
- 5 实现.h 文件中声明的函数
#include "amn_JniTest.h"
//函数实现
JNIEXPORT jstring JNICALL Java_amn_JniTest_getStringFromC(JNIEnv *env , jclass jsls) {
//将c d的字符串转成一个java 字符串
return (*env)->NewStringUTF(env,"c String");
}
- 6.生成一个dll 文件 给java 调用,进入配置管理器 因为是64操作系统选择64 平台
image.png
点击生成---->生成解决方案 从而生成dll文件
- 7.配置dll 文件所在目录到环境变量 不然java 加载动态库的时候找不到
image.png
image.png
- Java 加载动态库 并且调用 c 的方法
package amn;
public class JniTest {
public native static String getStringFromC();
public static void main(String[] args) {
// TODO Auto-generated method stub
String text=getStringFromC();
System.out.println(text);
}
//加载dll 动态库
static {
System.loadLibrary("Jni_study");
}
}
-
9 输出结果:
image.png
网友评论