JNI 是 Java Native Interface 的缩写,中文为 JAVA本地调用。从Java1.1开始,Java Native Interface(JNI) 标准成为 java 平台的一部分,它允许Java代码和其它语言写的代码进行交互。JNI 一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
使用 java 与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。注意:java 是跨平台的(一次编译到处运行),但是 jvm(java 虚拟机)和 JNI 不是跨平台的。
编写首个 JNI 程序(步骤):
1.编写带有native声明的方法的 java 类
2.使用 javac 命令编译所编写的 java 类,使用 javah 命令生成头文件
3.使用 C/C++ 实现本地方法
4.将 C/C++ 编写的文件生成动态链接库
步骤1:
package com.android.test;
public class Test {
static
{
//不要加库后缀,jvm 会根据平台自动加后缀
System.loadLibrary("hello");
}
public native void Output();
public static void main(String argv[])
{
Test test = new Test();
test.Output();
}
}
步骤2:
javac -d . Test.java
javah com.android.test.Test
步骤3:
#include
#include
#include "com_android_test_Test.h"
JNIEXPORT void JNICALL Java_com_android_test_Test_Output(JNIEnv *env, jobject obj)
{
printf("Hello JNI\n");
}
步骤4:
#gcc -c -fPIC hello.c
#gcc -shared -fPIC -o libhello.so hello.o
#java com.android.test.Test
——忠于梦想 勇于实践 linux_xpj@opencores.org
阅读(1201) | 评论(0) | 转发(0) |