一、关于JNI
JNI是Java Native Interface的缩写,JNI是JAVA平台专门用于和本地C代码进行相互操作的API,称为JAVA本地接口。
二、JNI开发流程
三、示例
1.使用native创建一个本地方法
- package com.test;
-
- public class TestJni {
-
- static {
- System.load("/path/to/libtest.so"); // 替换为实际的动态链接库文件路径
- }
-
- private static native int test(String inputPath, String outputPath);
-
- public static void main(String[] args) {
- int result = test("aa", "bb");
- if (result == 0) {
- System.out.println("0");
- } else {
- System.out.println("非0");
- }
- }
- }
两种方式:
1)用javac生成class和c头文件
javac -h F:\workspace2\testShell\src\main\java\com\test TestJni.java -encoding UTF-8
2)用javah生成c头文件
javah -jni -encoding UTF-8 -classpath F:\workspace2\testShell\src\main\java com.test.TestJni
生成后的c头文件如下:
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* Header for class com_test_TestJni */
-
- #ifndef _Included_com_test_TestJni
- #define _Included_com_test_TestJni
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: com_test_TestJni
- * Method: test
- * Signature: (Ljava/lang/String;Ljava/lang/String;)I
- */
- JNIEXPORT jint JNICALL Java_com_test_TestJni_test
- (JNIEnv *, jclass, jstring, jstring);
-
- #ifdef __cplusplus
- }
- #endif
- #endif
需要自行修改加上参数变量名称

写c文件

gcc -fPIC -I/opt/ctools/jdk1.8.0_301/include/ -I/opt/ctools/jdk1.8.0_301/include/linux/ -shared -o libTestJni.so TestJni.c
4.调用
修改如下编译生产的库文件路径,就可执行java代码调用了。
