• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

LKT5103A Hid接口LINUX系统下JNI开发流程

一、什么是JNI

Java以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决Java对本地操作的一种方法就是JNI。JNI是Java native interface的简写,意为Java本地调用,它允许Java代码和其他语言写的代码进行交互,从Java1.1开始,JNI标准成为Java平台的一部分。

     使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,与硬件、操作系统进行交互,或者为了提高程序的性能。

二、平台以及环境

(1)开发平台

Linux系统或者虚拟机。

注意:因为涉及到LINUX下的HID接口,所以保证开发的系统内核在2.6版本以上。

(2)开发包

1):安装gcc和g++,保证两个版本一致。

安装zhiling:

yum install gcc

yum install gcc-c++

查版本zhiling:

g++ --version

gcc --version

2):安装jdk环境。具体可以上网上找资料。

以debian系统为例,在终端运行的安装zhiling如下:

sudo apt-get update

sudo apt-get install default-jre

sudo apt-get install default-jdk

三、开发步骤

1)创建一个Java程序(如LKT5103AJni.java)定义原生的c/c++函数。

2)用javac编译(zhiling:javac LKT5103AJni.java) LKT5103AJni.java生成 LKT5103AJni.class。

3)用javah带-jni参数编译zhiling:javah -jni LKT5103AJni) LKT5103AJni.class生成 LKT5103AJni.h文件,该文件中 定义了c的函数原型。在实现c函数的时候需要。

4)创建LKT5103AJni.c,实现LKT5103AJni.h定义的函数。

5)编译LKT5103AJni.c生成libLKT5103AJni.so。

zhiling: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(zhiling:javac testJni.java)。

8)运行测试代码。

(zhiling:export LD_LIBRARY_PATH=./   

java testJni   

或者:

java -Djava.library.path=. testJni)

全部回复(19)
正序查看
倒序查看
2019-10-17 13:41

JNI主要还是举例子,举例子直观,

0
回复
zntsbkhhh
LV.2
3
2019-10-17 14:21
@miniminimini
JNI主要还是举例子,举例子直观,
LKT5103A,好像在网上看见过,具体谁家的产品记不太清了.....
0
回复
小帆儿
LV.5
4
2019-10-17 15:00
@zntsbkhhh
LKT5103A,好像在网上看见过,具体谁家的产品记不太清了.....
凌科芯安的,我们公司就在用呢,技术服务很到位
0
回复
2019-10-17 17:01
@小帆儿
凌科芯安的,我们公司就在用呢,技术服务很到位
这套开发流程挺好的 ,说的很详细,已经推荐给我们技术部门了
0
回复
hiuu
LV.1
6
2019-10-18 16:04
@人称福爷
这套开发流程挺好的,说的很详细,已经推荐给我们技术部门了
插入图片更形象生动,每一步都配上初始图片和结果图,显得更好。
0
回复
邓女士
LV.5
7
2019-10-18 16:12
@hiuu
插入图片更形象生动,每一步都配上初始图片和结果图,显得更好。
有了JNI,Java的运用更广了 
0
回复
BLoun
LV.5
8
2019-10-18 23:00
@邓女士
有了JNI,Java的运用更广了 
很不错学习了,但是为什么要求内核是2.6版本以上。低版本也支持HID协议啊?
0
回复
Hex315
LV.5
9
2019-10-19 10:49
@BLoun
很不错学习了,但是为什么要求内核是2.6版本以上。低版本也支持HID协议啊?
文中的LKT5103A 是楼主新推出的一款产品吧,能简单介绍一下功能吗? 
0
回复
114W1
LV.5
10
2019-10-19 18:33
@Hex315
文中的LKT5103A是楼主新推出的一款产品吧,能简单介绍一下功能吗? 
LKT5103A是以32位安全芯片平台为基础的具有目前行业内最高性能最高安全性的软件加密产品。
0
回复
2019-10-19 23:24
5103除了HID接口还有别的接口吗
0
回复
zntsbkhhh
LV.2
12
2019-10-19 23:41
应该还支持其他的USB接口吧 
0
回复
2019-10-20 03:17
@zntsbkhhh
应该还支持其他的USB接口吧 
LKT5103A是什么产品,有什么功能?是不是我自己的库也可以这样调用呢?如果可以那就非常有用了
0
回复
hiuu
LV.1
14
2019-10-20 11:57
为什么要用JNI呢

0
回复
小帆儿
LV.5
15
2019-10-20 22:46
@hiuu
为什么要用JNI呢
因为有些功能JAVA无法提供,比如对扫描仪驱动,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了.
0
回复
BLoun
LV.5
16
2019-10-21 21:27
@小帆儿
因为有些功能JAVA无法提供,比如对扫描仪驱动,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了.
这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种
0
回复
宇宙王
LV.3
17
2019-10-22 09:12
@BLoun
这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种
加密狗里面也都是芯片,只不过加了个外壳而已
0
回复
Hex315
LV.5
18
2019-10-22 11:51
@宇宙王
加密狗里面也都是芯片,只不过加了个外壳而已
使用JNI是因为LKT5103A是其他语言的吗,那它支持什么语言?
0
回复
邓女士
LV.5
19
2019-10-22 13:41
@Hex315
使用JNI是因为LKT5103A是其他语言的吗,那它支持什么语言?
文章很实用,有没有详细的JNI接口说明呀?这些编译zhiling都是一样的吗? 
0
回复
114W1
LV.5
20
2019-10-22 18:00
@邓女士
文章很实用,有没有详细的JNI接口说明呀?这些编译zhiling都是一样的吗? 
文章很不错,学习了,谢谢楼主的分享!
0
回复