Android串口开发入门

最近的开发项目有涉及到Android串口开发,所以比较好奇安卓项目中是如何读取串口数据的,官方给了一个代码示例,但是发现官方的示例比较久了,没有使用CMake,下载后运行老是报错,踩坑,最后使用CMake的方式终于运行成功,在此记录一下,源码:gitee.com/hluck/hello...

目录结构

1.创建一个HelloWord项目

2.引入jni和so库

将jni文件夹和jniLibs文件夹复制到main目录下:

3.修改gradle

由于此时Android studio编译时,不会去编译加载CMakeLists.txt,所以要告诉他在哪加载:

xml 复制代码
android {
    ...
    externalNativeBuild {
        cmake {
            path "src/main/jni/CMakeLists.txt" // 指定 CMakeLists.txt 文件路径
            // 其他 CMake 选项
        }
    }
}

4.加载动态库,编译native方法

官方示例中有两个类是关于打开和关闭串口api的:

1.SeriaPort

其中加载动态库,打开和关闭串口的native方法在SerialPort类中:

这两个native方法对应的是jni文件下的SerialPort.c文件中,如果你的SerialPort类所在包名和我的不一样,记得修改一下这个文件,值得一提的是,open方法中的第一个参数是串口地址,第二个参数是波特率,第三个参数是打开串口时的操作模式,0表示默认,当调用读写操作时,如果串口没有准备好数据,程序会阻塞等待,直到有数据可以读取或写入。

2.FileDescriptor

上面的open方法会返回一个FileDescriptor实例,通过这个实例获取写入和读取串口数据的流。

5.读取或写入串口数据

在Application类中保存一个SerialPort实例,这样就能通过获取SerialPort实例来读写串口数据了。

参考文章

安卓与串口通信-基础篇

安卓与串口通信-实践篇

Android移植谷歌官方串口库

相关推荐
Xzaveir12 小时前
不要用一个状态表示“号码已认证”:企业号码身份的四域模型
android·人工智能
(Charon)12 小时前
【C++】手写 MySQL 连接池(二):同步连接的获取、加锁与释放
android
zhangjin112013 小时前
AOSP下载
android
Mico1814 小时前
MySQL 8.0.35 GTID 主从复制搭建-基于GITD
android·mysql·adb
YXL1111YXL16 小时前
LeakCanary 源码解析检测泄露工作机制(一)
android·leakcanary
且随疾风前行.18 小时前
Android Binder 驱动 - 内核驱动层源码初探
android·网络·binder
额恩6618 小时前
AI 智能体从零搭建实战教程——扣子
android·rxjava·coze
hunterandroid18 小时前
前台服务适配与线上排查:通知权限、启动限制和任务保活
android·前端
帅次18 小时前
Android 高级工程师面试:Flutter 渲染与性能 近1年高频追问 20 题
android·flutter·面试·渲染·性能
糖果店的幽灵20 小时前
【langgraph 从入门到精通graphApi 篇】Command 与动态流程控制
android·java·数据库·人工智能·langgraph