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

如何配置可以参考(https://blog.csdn.net/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.csdn.net/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.csdn.net/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问题了.

仅供参考.

更多相关文章

  1. android studio - swiperefreshlayout注意点
  2. Android(安卓)"java.lang.NoClassDefFoundError:*"报错的处理方
  3. Android(安卓)Studio下Jni开发配置
  4. android 学习日记
  5. Gradle依赖的统一管理
  6. Android(安卓)文件夹介绍
  7. Android(安卓)App 性能优化之安装包大小
  8. Android(安卓)Studio的一些小技巧
  9. 关于Android(JAVA)实例化接口假象的讨论

随机推荐

  1. 修改Android中strings.xml文件
  2. Dagger2+Retrofit+RxJava
  3. Android中framework层下添加aidl编译说程
  4. Android报表控件achartengine介绍(二)
  5. Android(安卓)Studio4如何在查看低版本AP
  6. Android用户手势检测
  7. Android中IntentService和HandlerThread
  8. xml 做图
  9. Android一些基础面试题
  10. android ViewFlipper使用示例(注册引导页)