使用NDK生成SerialPort.so的相关文件、配置

接触android调用硬件串口的需求时,有些情况下需要扩展或修改系统自带的串口类来完成接口指令收发。

项目开发中经历过的,于是就记录下来~~~

最好是建一个空Android Studio工程来进行修改编译,最后只需要把编译生成的.so拷贝到生产项目中即可。

AS项目创建就不说了,直接上项目目录图片:

 

使用NDK生成SerialPort.so的相关文件、配置_第1张图片

 

android_serialport_api目录名称不要修改,可直接拷贝到生产项目中使用。

jni目录在main下,jni目录中的文件在可这里下载。

Android.mk 文件为NDK编译入口makefile配置文件:

使用NDK生成SerialPort.so的相关文件、配置_第2张图片

 

Application.mk 文件可配置编译.so支持的cpu平台:

使用NDK生成SerialPort.so的相关文件、配置_第3张图片

 

SerialPort.h 串口类头文件,注意方法名的命名规则,_1编辑后为"." (命名空间错误就不能重写系统的串口类,名称对不上编译出来的so也是不会被系统调用): 

使用NDK生成SerialPort.so的相关文件、配置_第4张图片

 

SerialPort.c 串口类的相关实现,图中代码已折叠省略,可点击下载文件:

使用NDK生成SerialPort.so的相关文件、配置_第5张图片

 

termios.h 拷贝至API-19,由于API-19之后termios.h头文件有部分方法调整,为适配API-19及之前的系统,建议保留termios.h文件,不然程序调用串口时可能会出现如下异常:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "tcgetattr" referenced by "libserialport.so"

 

项目搭建好之后,在build.gradle文件中加入:

使用NDK生成SerialPort.so的相关文件、配置_第6张图片

 

点击 make项目:

使用NDK生成SerialPort.so的相关文件、配置_第7张图片

 

项目统译完成,即可在项目build目录 > ndkBuild > debug > obj > local 下找到编译好的.so文件,按适配cpu平台拷贝对应的.so文件至生产项目中。

最后在生产项目中导入.so, 将.so拷见到生产项目的libs中,需对应cpu类别文件夹,公司项目的硬件设备只需要适配两个类型:

使用NDK生成SerialPort.so的相关文件、配置_第8张图片

 

生产项目的build.gradle中加入配置:

使用NDK生成SerialPort.so的相关文件、配置_第9张图片

 

同时也注意: SerialPort.class 中静态初始化加载so库

System.loadLibrary("serial_port");

完!!!!

Demo项目请在这里下载

 

你可能感兴趣的:(Android,SerialPort,android串口)