# 编写 java 代码 native 调用本地方法库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class HelloMyJni{ public native void helloWorld(); public native void helloWorld2(int a); public native void helloWorld3(); static{ System.loadLibrary("hello"); } public static void main(String[] args){ new HelloMyJni().helloWorld(); System.out.println("=============================================="); new HelloMyJni().helloWorld2(20); System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); new HelloMyJni().helloWorld3(); } }
|
# 通过 javac 命令编译为 class 文件
出现 gbk 编码错误可以使用 javac -encoding utf-8
# 通过 javah 包名类名 把 class 文件编译为 com_example_demoyml_HelloMyJni.h
# 编写 c 文件 引入 com_example_demoyml_HelloMyJni.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include "jni.h" #include "com_example_demoyml_HelloMyJni.h" #include <stdio.h> #include <stdlib.h>
JNIEXPORT void JNICALL Java_com_example_demoyml_HelloMyJni_helloWorld(JNIEnv * env, jobject obj) { printf("Hello World!\n"); }
JNIEXPORT void JNICALL Java_com_example_demoyml_HelloMyJni_helloWorld2(JNIEnv * env, jobject obj, jint x) { printf("参数: %d\n", x); printf("================》c结束《=======================\n"); }
JNIEXPORT void JNICALL Java_com_example_demoyml_HelloMyJni_helloWorld3(JNIEnv * a, jobject b) { printf("d\n"); }
|
# 使用命令生成 dll 文件
gcc -I java 目录 \include -I java 目录 \include\win32 -shared -Wl,-kill-at -s -o hello.dll c 文件
# java 调用
1 2 3
| System.loadLibrary("hello");
|