建议只在必需的时候才使用本地代码
- 应用需要访问的系统特性和设备通过 Java 无法实现
- 已有了大量的测试过和调试过的另一种语言的代码,并知道如何将其导出到所有平台
- 经过基准测试,发现 Java 比其他语言的等价代码慢得多
Java 本地接口(JNI)
1 在 Java 声明本地方法
Java 使用 native 关键字表示本地方法,本地方法可以是静态的,也可以是非静态的。
class HelloNative{
public static native void greeting();
}
2 生成包含该方法的 C 声明头文件
使用 javah 工具生成头文件
javah HelloNative
3 用 c 实现该本地方法
#include "HelloNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl)
{
printf("Hello Native World!\n");
}
4 将代码置于共享类库
export JDK=/System/Library/Frameworks/JavaVM.framework/Versions/A
gcc -dynamiclib \
-I $JDK/Headers \
-shared \
-o libHelloNative.jnilib \
HelloNative.c
5 在 Java 程序中加载该类库
class HelloNativeTest{
public static void main(String[] args){
HelloNative.greeting();
}
static{
System.loadLibrary("HelloNative");
}
}
6 运行
javac HelloNative.java
javac HelloNativeTest.java
java -Djava.library.path=. HelloNativeTest