开发流程
-
串口底层驱动,如 /dev/ttyS3
-
JNI层接口需要根据设备CPU架构类型编译,即在linux内核下使用相应的编译工具编译,注意C文件的接口命名规则需要与java程序包名保持一致,
如 cn.ingenic.glass.serialport.SerialPort.open (java接口)
Java_cn_ingenic_glass_serialport_SerialPort_open(JNI接口),
其中JNI的接口,需要固定格式Java_xxx_xxx -
JNI生成的.so文件编译进去Andorid镜像,如libserial_port.so
-
java程序使用时,需要加载xxx.so文件,如System.loadLibrary(“serial_port”);
-
使用时,要对驱动文件作权限管理,以便APK能操作,可在init.rc中设置驱动文件权限,
如chmod 0666 /dev/ttyS3
注意事项
- 在System.loadLibrary这行的时候就会报 java.lang.UnsatisfiedLinkError: Couldn’t load secret: findLibrary returned null
产生原因1:加载库名错误
产生原因2:生成的库和运行平台不匹配,
解决办法:在jni文件夹下新建Application.mk文件其中指定 APP_ABI := all 生成所有支持平台的.so库
- so库可以加载,调用JNI接口时候报错
产生原因1:加载库名错误
解决办法:注意调用的JNI接口与JNI文件的命名是否一致
- so库可以加载,调用JNI接口也有效,但是在执行时候返回错误,如 fd open return null
产生原因1:APK在调用JNI层读写或执行底层驱动文件时,权限不够
解决办法:在root权限下,设置底层驱动文件权限为 0666,所有组可读写