android CMake 串口通信demo

本文介绍了一个使用CMake在Android中实现串口通信的demo,涵盖了jni配置、串口扫描、配置保存及串口通信工具类的封装。提供关键代码和项目结构,帮助开发者理解和实践Android串口通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一段时间学了一下Android的串口通信,略有所成。又想起未来也许还有好多人要学习这个。就把我这个demo贡献出来抛砖引玉。话不多说 来看代码
这个需要配置jni 如果不会的 可以看这篇文章 jni配置 CMake方式

项目整体结构
这里写图片描述

这上面的 1是底层的C语言和c头文件,这些都是谷歌写好的,我们不用管,2 也是谷歌写好的java代码,
SerialPort 里面有两个本地方法

 // JNI
    private native static FileDescriptor open(String path, int baudrate, int flags);

    public native void close();

open是打开串口,close就是关闭, 至于open里面的参数我们怎么写 在下面可以看见。还有 你导入的话,通常来说open是红色的 也就是Android studio会提醒你有错,这个不用管,这是Android studio 的错误 楼主当时在这里纠结老长时间了。。。。。强迫症 不能忍的。。。
这里写图片描述

如果 你非要看着这个红色字 不爽的话,打开setting
这里写图片描述
把NDK Support 去掉√就行了。
还有两个方法

  //获得输入流
  public InputStream getInputStream() {
        return mFileInputStream;
    }
    //获得输出流
    public OutputStream getOutputStream() {
        return mFileOutputStream;
    }

SerialPortFinder 这个类是用来扫描Android 上面串口的 ,他有一个public String[] getAllDevices() 这是用来返回所有的串口名字的,虽然 我们也可以不用他 ,直接取路径。但是有备无患哈哈。** String[] getAllDevicesPath()** 这个就是返回所有的串口路径了。和上面的方法是一一对应的。 在Android里面 就把串口 当成一个file

说完上面的 ,就还有DevicePre 这是我写的一个PreferenceFragment 用来快速保存你选择的串口配置 这是重要代码。

        entries = mSerialPortFinder.getAllDevices();
        entryValues = mSerialPortFinder.getAllDevicesPath();

3 CMakeLists.txt 这个是配置CMake的 ,以前Android 上面都是kv 现在 是CMake的天下了。
这个也是jni。
这里写图片描述

这里写图片描述

项目gradle里面要配置

 externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
 externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }

SerialPortFunction这个类是我封装的串口通信工具类,可以控制打开串口,关闭串口,向串口发送数据,接受串口的数据。

ReadSerialPort 这个类是我写的一个Runnable 用来读取串口的inputstream 从中解析数据。每个串口设备的数据解析规则不一样,所以我这里的 到你那里可以能就不适用了。解析规则得要你自己写
ReadSerialPort 有一个内部接口

 interface DataWeight {
        void weight(String weight);
    }

weight 方法传回解析的数据

好了 附上代码 https://github.com/planitian/JNIDate 大家如果感觉还可以的 可以star一下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值