安卓串口库android_serialport_api的简单移植方法,以及一些使用细节(有.so动态库的前提下)
程序员文章站
2022-06-21 20:07:45
网上试了很多方法(CMake、ndk-build),但由于android studio的版本问题,出现各种同步问题。后来发现前面的一大堆步骤的目的都是为了获取libserial_port.so这个文件,但是明显在github上下载的android_serialport_api已经有.so文件了,移植起来应该不会复杂,一直在想有没有无脑一点的操作方法,不用改build.gradle的那种。步骤如下,捡重点步骤和bug讲解,每一步详细步骤请参考其它博客:(1)在g......
网上试了很多方法(CMake、ndk-build),但由于android studio的版本问题,出现各种同步问题。
后来发现前面的一大堆步骤的目的都是为了获取libserial_port.so这个文件,但是明显在github上下载的android_serialport_api已经有.so文件了,移植起来应该不会复杂,一直在想有没有无脑一点的操作方法,不用改build.gradle的那种。
步骤如下,捡重点步骤和bug讲解,每一步详细步骤请参考其它博客:
(1)在github上下载的zip文件有两个文件夹,发现下面那个文件夹里面是有编译好的动态库的
(2)拷贝到android studio的工程中如下所示(拷贝过程不多说)
注意这里的libserial_port.so最好直接新建一个jniLibs放进去(必须这个名字),不要放到libs目录下,不然就要修改build.gradle文件。最恶心的是,如果把.so文件放入了libs中且忘了修改build.gradle,在调用串口函数的时候就会出现闪退,而且这个程序编译时还不会报错(???)。
============锟斤拷==================锟斤拷=====================锟斤拷====================锟斤拷========锟斤拷========
(其他细节)
貌似是比较简单的移植方法了,但是还是需要补充一些小细节
1.SerialPort.java中的open、close标红问题和库加载问题
open和close标红没有影响,不用管它(因为我们直接so库用上了,没有新建jni文件夹这种操作所以才标红)。 System.loadLibrary加载的libname是.so文件去掉开头的lib三个字母后的名字(libserial_port.so => serial_port)
2.AndroidManifest.xml中的权限
抄来的,以防万一,如有需要请自行增删
3.串口调用
//一些变量
public boolean UARTOpenFlag = false;
private int size;
private SerialPort UART4_SerialPort; //串口4
public OutputStream UART4_OutputStream;
public InputStream UART4_InputStream;
private byte[] UART4_buffer = new byte[64];
private UART4_ReadThread UART4_Thread;
//打开串口4并开启读取线程
UART4_SerialPort = new SerialPort(new File("/dev/ttyS4"), 115200, 0);
UART4_OutputStream = UART4_SerialPort.getOutputStream();
UART4_InputStream = UART4_SerialPort.getInputStream();
UART4_Thread = new UART4_ReadThread();
UART4_Thread.start();
//串口读取线程
private class UART4_ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int data;
try {
if (UART4_InputStream == null) {
mDebugHandler.sendEmptyMessage(MESSAGE_STOP);
return;
}
//从输入流中读取字节,并将其存储在缓冲区数组中,返回的是实际读取的字节数
size = UART4_InputStream.read(UART4_buffer); // 只读了64位
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
本文地址:https://blog.csdn.net/qq_41862220/article/details/112890105