# 编写 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");

更新于 阅读次数