利用android-serialport-api进行串口读写操作
谷歌开源的项目android-serialport-api让我们更方便的对串口进行读写操作,它的下载地址是
https://github.com/cepr/android-serialport-api
下载好开源库后,我们打开AndroidStudio,将库导入到项目里

首先我们要将android_serialport_api包下面的类包括文件夹本身都原封不动的复制到项目的main/java路径下,跟我们项目本身自己创建的包名同级,切记不要更改任何名字。
然后我们找到开源库下面的libs文件夹,将下面适配了各个CPU框架的so连带文件夹一起复制到项目的libs下,如上图,这里我只用到了armeabi,因此只粘贴了一个文件夹过来。

此时如果我们启动项目是找不到libs下面的so文件的,因为项目默认读取so的目录是jniLibs文件夹,我们还要更改一下build.gradle中读取so的路径,
jniLibs.srcDirs = ['libs']


这样我们就可以调用谷歌为我们写好的API了。
重要
我在进行串口开发的时候还遇到了一个问题,使用Google串口调试开源库App,调试串口出现异常
UnsatisfiedLinkError: dlopen failed: /data/app/com.smart.vendor.serialport.library-1/lib/arm/libserial_port.so: has text relocations
网上搜到答案说是 编译.so文件时使用了较低版本sdk
因此第一种解决方案是调低 targetSdkVersion
module下的build.gradle 把targetSdkVersion 改为22以下(也就是Android 6.0以下版本);在Android 6.0之前,text reloactions的问题,会在编译的过程中,作为warning报出来;在Android 6.0以上版本,原来的warning被升级为error了。因此,同样的库文件,在Android 6.0前的环境运行,不报错;6.0及以上版本就会crash掉。
第二种解决方案就是 在Android.mk文件中加入:LOCAL_LDFLAGS += -fPIC,重新编译Google开源库的源码,生成.so库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
TARGET_PLATFORM := android-3
LOCAL_MODULE := serial_port
LOCAL_SRC_FILES := SerialPort.c
LOCAL_LDLIBS := -llog
#加入如下信息
LOCAL_LDFLAGS += -fPIC
include $(BUILD_SHARED_LIBRARY)
如何编译Google开源库的源码呢,这里我简单的做了一个例子,新建一个module,将开源库中的jni文件夹复制到项目中


打开Android.mk文件,添加上面所写的那句代码
LOCAL_LDFLAGS += -fPIC
然后打开cmd,找到项目中jni的路径,使用ndk-build命令,进行编译,最后在jni同级目录下会生成libs文件夹,它下面就是重新编译过的so文件。


如果ndk-build没有配置到系统环境变量中,请查看。
更多推荐




所有评论(0)