安卓实现串口通讯及经历问题

这篇博客介绍了如何在Android中使用JNI调用Unix动态连接库进行串口通信,重点关注了如何处理旧版API(android-serialport-api)仅兼容Android 6.0及以下版本的问题。作者提供了新的.so依赖库链接,并指导了如何配置app/build.gradle以适配新库。在使用过程中,需要注意.so文件中函数签名与Java包名和类名的匹配,否则会导致JNI调用错误。

在Android中,我们可以调用Unix的动态连接库(.so扩展名文件)来集成串口通信,这种调用的方式称为JNI(Java Native Interface,即Java本地接口)。
Google安卓官方已经提供了android-serialport-api 官方API(源码链接),项目的具体结构如下:
在这里插入图片描述
jni中存放了JNI调用的C/C++文件。
libs存放了.so文件,是由C/C++编译而来的。
src中的SerialPort.java和SerialPortFinder.java是提供Java开发的类。

但是这个API(实际上是so依赖库)是十年前的,只兼容安卓6.0及以下版本的系统,所以需要更换更新的so依赖库(云盘链接:https://pan.baidu.com/s/1acjlvSxto0tOvubYjWqOFQ
提取码:ltl6 )。

引入完API后需要做的就是配置app/build.gradle,设置.so文件的路径,配置完路径后就可以实现提供的开发类进行串口通讯了。

android {
	...
    }
    sourceSets.main {
        jniLibs.srcDir 'libs'
    }
}

在这里需要注意的是,.so中函数声明涉及到的package name和class name可能与调用它的package name和class name不符,需要改变工程中的package name和class name,使其与.so文件中函数签名提示的一致,否则Android会调用JNI出错 :java.lang.UnsatisfiedLinkError: No implementation found for。
参考:https://juejin.cn/post/6844903606982967303

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值