1、什么是JNI
Java以其跨平台的特性深受人们喜好,而又正因为它的跨平台的目的,使得它和本地机器的各类内部联系变得不多,约束了它的功能。解决Java对本地操做的一种方法就是JNI。JNI是Java native interface的简写,意为Java本地调用,它容许Java代码和其余语言写的代码进行交互,从Java1.1开始,JNI标准成为Java平台的一部分。
使用Java与本地已编译的代码交互,一般会丧失平台可移植性。可是,有些状况下这样作是能够接受的,甚至是必须的。例如,与硬件、操做系统进行交互,或者为了提升程序的性能。
2、平台以及环境
(1)开发平台
Linux系统或者虚拟机。
注意:由于涉及到LINUX下的HID接口,因此保证开发的系统内核在2.6版本以上。
(2)开发包
1):安装gcc和g++,保证两个版本一致。
安装指令:
yum install gcc
yum install gcc-c++
查版本指令:
g++ --version
gcc --version
2):安装jdk环境。具体能够上网上找资料。
以debian系统为例,在终端运行的安装指令以下:
sudo apt-get update
sudo apt-get install default-jre
sudo apt-get install default-jdk
3、开发步骤
1)、建立一个Java程序(如LKT5103AJni.java)定义原生的c/c++函数。
2)、用javac编译(指令:javac LKT5103AJni.java) LKT5103AJni.java生成 LKT5103AJni.class。
3)、用javah带-jni参数编译(指令:javah -jni LKT5103AJni) LKT5103AJni.class生成 LKT5103AJni.h文件,该文件中 定义了c的函数原型。在实现c函数的时候须要。
4)、建立LKT5103AJni.c,实现LKT5103AJni.h定义的函数。
5)、编译LKT5103AJni.c生成libLKT5103AJni.so。
指令:gcc -I/usr/lib/jvm/java-8-openjdk-amd64/include/ -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux -fPIC -shared -o libLKT5103AJni.so LKT5103AJni.c
6)、建立testJni.Java,实现测试jni接口。
7)、编译testJni.java(指令:javac testJni.java)。
8)、运行测试代码。
(指令:export LD_LIBRARY_PATH=./
java testJni
或者:
java -Djava.library.path=. testJni)java