谷歌开源的项目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没有配置到系统环境变量中,请查看

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐