Android 串口通讯集成

本文详细介绍在Android环境下配置串口通讯的过程,包括下载并使用谷歌的开源代码android_serial_api,以及解决Android8.0上libserial_port.so的textrelocations问题。通过NDK编译so文件,成功在高版本Android系统上实现串口通讯。

最近尝试做一做Android环境下的串口通讯,在网上找到了很多的资料。一步一步按照网上的做法进行配置。

如何配置可以参考(https://blog.youkuaiyun.com/qq_35952946/article/details/78863871)

我自己也记录下配置步骤,方便以后使用.

1. 需要下载谷歌的开源代码 android_serial_api

     下载连接:https://github.com/cepr/android-serialport-api

2. 右击java,新建package,名字为"android_serialport_api", 注意此处,名字必须是这个,写死.

3. 将已下载的源码当中的SerialPort.java、SerialportFinder.java拷贝到android_serialport_api包下

4. 建立jni目录,将源码当中jni目录下的五个文件都拷贝到新建的jni目录下

5. 建立jniLibs目录,将源码中的libs目录下的三个文件夹拷贝到jniLibs目录下。 由于我本地只设置了armeabi-v7a, 我就只拷贝了一个.

6. 在build.grandle(Moudle:app)中添加一句

配置完成,就可以使用了,网上的例子很多,可以参考下(https://blog.youkuaiyun.com/qq_35952946/article/details/78863871中的例子)。

我自己使用的测试环境是Android 8.0. 

private void initSerialPort() {
        //获取串口实例
        try {
            mSerialPort = new SerialPort(new File(sPort), iBaudRate, 0);
            mOutputStream = mSerialPort.getOutputStream();
            mInputStream = mSerialPort.getInputStream();
            mReadThread = new ReadThread();
            mReadThread.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

在测试机运行,执行new SerialPort的时候,提示  libserial_port.so  has text relocations. 

本人开发无经验,在网上查找原因,说是android_serialport_api和安卓高版本不兼容,网上也有多种解决方法,有些人是降低了build.grandle(Moudle:app)中targetSdkVersion版本,有些人采用了NDK重新编译了so文件。

网络上的说法可参考(https://blog.youkuaiyun.com/liufuliang163/article/details/78802901),说的很详细。

由于我使用的Android 8.0,我选择采用了NDK编译so文件。

于是我又在网上去找相关资料, 终于找到了一片文章,讲的很详细。

地址是: https://www.cnblogs.com/Andrew-XinFei/p/5608001.html

学习了该文章,我就尝试重新编译libserial_port.so文件.

1. 添加SDK环境变量:

2. gradle.properties添加

android.useDeprecatedNdk=true

3. 修改Android.mk文件 添加

LOCAL_LDFLAGS += -fPIC

4. 确认local.properties引用了正确的NDK路径,我的路径是

根据个人实际情况进行修改路径

5.打开jni所在目录(右击jni 选择show in explorer),然后进入jni目录(这个jni目录不是源码的目录,是当前app的jni目录,切记!)

6. 打开cmd程序 ,进入到该目录下,输入"ndk-build"进行编译,可以看到编译信息

可以看到main下新生成了一个libs目录(如果该目录存在,应该不会新生成吧),如左边红色箭头所示,目录下分别生成了三种样式的so文件。

上方红色圈圈是从源码拷贝拷贝的so文件,我自己将下方圈圈里的新生成so  拷贝到上方圈圈里,替换原来的 就可以了.

然后我删除了main下的libs目录。程序重新运行起,就不再出现text relocations问题了.

仅供参考.

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值