JNI的实现步骤如下:
- 编写带有native声明的方法的Java类
- 使用javac命令编译编写的Java类
- 使用java -jni **来生成后缀名为.h的头文件
- 使用其他语言(C、C++)实现本地方法
- 将本地方法编写的文件生成动态链接库
-
1. 编写带有native声明的方法的Java类
public class HelloWorld {
public native void hello();
static {
//设置查找路径为当前项目路径
System.setProperty("java.library.path", ".");
//加载动态库的名称
System.loadLibrary("hello");
}
public static void main(String[] args){
new HelloWorld().hello();
}
}
-
2. 使用javac命令编译编写的Java类
javac HelloWorld.java
-
3. 使用java -jni **来生成后缀名为.h的头文件
java -jni HelloWorld #生成HelloWorld.h文件
HelloWorld.h文件如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
-
4. 使用其他语言(C、C++)实现本地方法
根据生成的HellWorld.h文件编写实现文件HelloWorldImpl.cpp
#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *, jobject) {
printf("Hello Wordl!\n");
return;
}
-
5. 将本地方法编写的文件生成动态链接库
生成动态链接库 libhello.jnilib
g++ -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/include/ HelloWorldImpl.cpp -o libhello.jnilib
-
6 测试
java HelloWorld
网友评论