Android 设备连接与边缘计算项目全景

📅 2026/8/2 5:25:01 👁️ 阅读次数 📝 编程学习
Android 设备连接与边缘计算项目全景

Android 设备连接与边缘计算项目全景

移动端设备软件正在从“单一 App 功能”转向完整的设备连接层:摄像头负责采集,串口和 MQTT 负责通信,支付 SDK 负责业务闭环,IoT LinkSDK 负责云端设备管理,Rockchip 相关组件则把 SSH 维护和 NPU 推理带到边缘设备。本文整理一组面向 Android、IoT、支付、串口通信和 Rockchip 平台的开源项目,帮助开发者快速理解各项目的定位、组合方式和使用边界。

项目地图

项目主要方向适用场景链接
scanner-androidCamera2、Compose、二维码扫码、相机预览、二维码编解码GitHub
mqtt-service-androidEclipse Paho MQTT ServiceAndroid MQTT 长连接与后台服务GitHub
iot-link-androidAlibaba Cloud IoT Alink、MQTT、SSH/SFTP设备注册、OTA、远程维护GitHub
china-pay-android微信、支付宝、银联支付Jetpack Compose 支付流程GitHub
serial-api-android串口、JNI、协议解析、TCP Proxy工控设备、传感器、串口网关GitHub
rockchip-ssh-stcp-androidSSH、SFTP、SCP 服务Rockchip 开发板远程维护GitHub
rockchip-rknn-androidRKNN Runtime、YOLO、目标跟踪RK3588 NPU 边缘推理GitHub

1. Scanner Compose Library

项目地址:scanner-android

这是一个面向现代 Android 的 Kotlin 扫码库,包名为android.scanner.api,最低支持 Android API 26。它将 Camera2 的 Bitmap 流、Compose 扫描框、二维码 Bitmap 编解码和生命周期管理组合在一起,适合收款码、资产标签、设备二维码和现场巡检等场景。

主要能力包括:

  • 根据设备能力自动选择接近目标值的相机分辨率
  • Compose 扫描框,支持区域、边框和背景颜色配置
  • QR Code 编码与解码
  • 可选调试日志
  • ScannerPreview.close()生命周期释放

最小相机预览示例:

valcamera=remember{ScannerPreview(context=context,config=ScannerPreviewConfig(cameraId="0",width=1280,height=720,torchEnabled=false,autoFocus=true,),)}valbitmapbycamera.bitmap.collectAsState()DisposableEffect(camera){camera.start()onDispose{camera.close()}}ScannerOverlay(bitmap=bitmap)

二维码编解码可以直接使用:

valencoded=BarcodeCodec.encodeQr("scanner-value",BitmapSize(512,512))if(encodedisScanOutcome.Success){valdecoded=BarcodeCodec.decode(encoded.value)}

宿主应用必须自行声明并申请相机权限;在权限授予前不要启动预览。

2. Android MQTT Service

项目地址:mqtt-service-android

该项目是 Eclipse Paho Android Service 的社区维护版本,面向仍然依赖org.eclipse.paho.android.service的应用。重点不在重新发明 MQTT 协议,而在于延续 Android MQTT Service 的使用方式,补充现代 Android 和部分 Rockchip 开发板环境下的兼容性维护。

项目通过 GitHub Packages 发布,典型依赖配置如下:

repositories{maven{url=uri("https://maven.pkg.github.com/RelinRan/MqttService")credentials{username=providers.gradleProperty("gpr.user").orNull?:System.getenv("GITHUB_ACTOR")password=providers.gradleProperty("gpr.key").orNull?:System.getenv("GITHUB_TOKEN")}}}dependencies{implementation"io.github.relinran:mqtt-service:1.1.0"}

GitHub Packages 即使面对公开包也可能要求认证,令牌应放在用户级 Gradle 配置中,不能提交到仓库。若只需要轻量 MQTT 发布/订阅,也可以下载 Release 中的 AAR;独立 JAR 不包含 Android Manifest 和资源。

3. IoT Link SDK

项目地址:iot-link-android

这是一个 Android 端 Alibaba Cloud IoT Alink 协议实现,同时提供通用 MQTT 客户端层。功能覆盖设备认证、属性、事件、服务、OTA、设备日志、远程配置、设备任务、设备分发、网关拓扑、子设备、标签、设备影子、网络诊断和 MQTT 文件上传。可选的安全远程扩展提供 SSH、SFTP 和 Rockchip 设备控制能力。

最低支持 Android API 24,Java/Kotlin JVM 目标为 11。核心入口是android.mqtt.iot.link.LinkSDK

动态注册并连接设备:

LinkSDK.initialize(context=applicationContext,productKey=PRODUCT_KEY,productSecret=PRODUCT_SECRET,deviceName=DEVICE_NAME,secureMode=2,authType="register",remote=false,)

其中secureMode = 2表示在本地没有设备密钥时执行动态注册,注册凭据会被持久化;生产环境建议默认关闭remote,只有确实需要远程维护时才启用安全隧道。

设备日志和远程配置可以通过状态流读取:

LinkSDK.publishLog(DeviceLogEntry(module="wash-flow",logLevel=DeviceLogLevel.ERROR,code="4103",logContent="step recognition failed",))valconfig=LinkSDK.remoteConfigState.value LinkSDK.publishRemoteConfig()

远程配置下载、签名校验和应用由业务层负责;任务文档、远程文件和云端下发内容都应按不可信输入处理。

4. China Pay Android

项目地址:china-pay-android

这是一个 Kotlin-first 的 Jetpack Compose 支付 SDK,支持微信 APP 支付、支付宝 APP 支付和银联支付。所有支付客户端使用挂起函数start(),通过StateFlow<PayState<...>>暴露状态,适合在 Compose 页面中统一渲染LaunchingPendingCancelledFailureSuccess

微信支付示例:

valpayment=remember(order){WechatPay(context,order)}valstatebypayment.state.collectAsStateWithLifecycle()Button(onClick={scope.launch{payment.start()}}){Text("Pay with WeChat")}DisposableEffect(Unit){onDispose{payment.close()}}

支付宝使用服务端签名后的完整orderInfo

valpayment=AlipayPay(activity,AlipayPayRequest(orderInfo=signedOrderInfo))scope.launch{payment.start()}

支付项目最重要的边界是:客户端回调不是最终支付凭证。订单必须由服务端创建和签名,服务端通过支付平台通知或主动查询确认成功后,再调用confirmSuccess;不要仅依据客户端回调发货、充值或记账。

5. Serial API Android

项目地址:serial-api-android

这是一个面向 Linux 串口设备的 Kotlin-first Android 串口 SDK,最低支持 Android API 26,提供 JNI 串口传输、协程会话、状态流、顺序写队列、重连、请求/响应匹配、增量帧解析和串口转 TCP 代理。

创建会话并发送命令:

valsession=SerialPortApi.create(applicationContext)valconnected=session.connect(SerialConfig(path="/dev/ttyS4",baudRate=115_200,mode=SerialMode.ReadWrite,readBufferSize=512,))if(connected.isSuccess){valhandle=session.send(SerialCommand(byteArrayOf(0x01,0x03,0x00,0x00)))valresult=handle.completion.await()}

对于有固定帧格式的设备,可以配置帧头、长度字段、字节序、帧尾和校验:

valparser=SerialFrameParser(FrameConfig(header=byteArrayOf(0x55,0xAA.toByte()),lengthOffset=2,lengthSize=2,lengthByteOrder=ByteOrder.LITTLE_ENDIAN,footer=byteArrayOf(0x0D,0x0A),checksum=Checksums.Crc16Modbus,maximumFrameSize=2048,))

库内置 XOR-8、SUM-8 和 CRC16-Modbus,也支持自定义校验器。串口会话结束时调用disconnect();生命周期彻底结束时调用close()

6. Rockchip SSH/SFTP 服务

项目地址:rockchip-ssh-stcp-android

这是一个适用于 Rockchip Android 开发板的 SSH/SFTP/SCP 服务和 Android Library,基于 Apache MINA SSHD,支持前台服务、开机自启动、交互式 Shell、远程执行、文件上传下载以及 Android 存储路径别名。

典型使用流程是:在设备端安装 APK,配置用户名、密码和端口,保存并启动服务;电脑与设备处于同一局域网后连接:

ssh-p2222android@<device-ip>sftp-P2222android@<device-ip>scp-P2222./local.txt android@<device-ip>:/sdcard/Download/local.txt

Root 设备可以从/浏览更完整的 Android 文件系统;非 Root 设备通常从/storage/emulated/0开始,并受 Android 沙箱、SELinux 和厂商权限限制。Android 11 及以上设备还需要根据系统提示授予“所有文件访问”权限。

该项目适合受控局域网维护,不应将弱密码 SSH 服务直接暴露到公网。批量部署前应完成密码策略、权限审计和目标硬件验证。

7. Rockchip RKNN Android Runtime

项目地址:rockchip-rknn-android

这是面向 Rockchip NPU 的 Android 推理库,当前重点支持 RK3588。它负责 RKNN Runtime 发现、模型会话、图像预处理、JNI 推理、输出张量解码、多模型分发和目标跟踪,支持 YOLO 检测、姿态模型及分类等工作负载。

要求包括 Android API 24、兼容 RKNPU2 Runtime 的设备、arm64-v8aarmeabi-v7a,以及通过 RKNN-Toolkit2 转换得到的.rknn模型。.tflite.onnx.pt文件不能直接交给 Android RKNN Runtime。

显式注册模型并执行检测:

valruntime=RknnRuntime()valstate=runtime.initialize(context,RknnOptions(modelRoot=modelRoot,debug=BuildConfig.DEBUG),)check(state==RknnState.READY)runtime.registerModel(RknnModelConfig(id="detector",type=RknnModelType.OBJECT_DETECTOR,fileName="yolo.rknn",inputWidth=640,inputHeight=640,labels=listOf("person","helmet"),decoderType=RknnDecoderType.YOLO_END_TO_END,scoreThreshold=0.25f,nmsThreshold=0.5f,))valresult=runtime.detectObjects("detector",bitmap)runtime.unregisterModel("detector")runtime.close()

实时相机输入可以使用ModelApi.detectAsync()。同一个模型只允许一个进行中的请求,避免摄像头帧无限排队;不同模型在RunMode.PARALLEL下可以并发执行。模型目录建议使用context.filesDirgetExternalFilesDir(null),减少存储权限问题。

如何组合这些项目

智能终端或巡检设备

scanner-android负责扫描设备二维码,serial-api-android负责连接传感器或控制器,iot-link-android负责把设备身份、状态、日志和 OTA 接入云端,rockchip-rknn-android则承担本地视觉推理。

Rockchip 远程维护平台

在设备端组合rockchip-ssh-stcp-androidiot-link-android的安全隧道能力,可以把文件传输、Shell、诊断和云端设备管理纳入同一套运维流程。建议默认关闭公网暴露,使用强密码、网络隔离和服务端审计。

支付型 Android 应用

china-pay-android适合 Compose 页面状态管理,但支付订单和最终支付判断必须放在服务端。扫码能力可以和scanner-android配合,用于扫描付款码、订单码或设备绑定码。

工业串口网关

serial-api-android负责串口帧和设备协议,TCP Proxy 用于将串口能力转发到局域网;如果网关还需要云端状态同步,再由iot-link-android负责 MQTT/Alink 上报。

选型建议

  • 需要 Camera2 + Compose 扫码:选择scanner-android
  • 需要传统 Android MQTT Service:选择mqtt-service-android
  • 需要阿里云 IoT 设备生命周期和 Alink:选择iot-link-android
  • 需要微信、支付宝或银联 APP 支付:选择china-pay-android
  • 需要串口协议、JNI、重连和 TCP 转发:选择serial-api-android
  • 需要 Rockchip 板卡 SSH/SFTP 维护:选择rockchip-ssh-stcp-android
  • 需要 RK3588 NPU 推理、YOLO 或跟踪:选择rockchip-rknn-android

结语

这组项目覆盖了 Android 设备从输入采集、近场通信、云端连接、支付交互到边缘 AI 和远程维护的多个关键层次。实际落地时应优先明确硬件平台、Android API、权限边界、网络模型和服务端职责,再选择单个库或组合方案。支付验签、远程 SSH、设备密钥、模型文件和云端任务都属于高风险边界,应在生产环境中配合服务端校验、最小权限和审计机制使用。

完整项目链接

  1. scanner-android
  2. mqtt-service-android
  3. iot-link-android
  4. china-pay-android
  5. serial-api-android
  6. rockchip-ssh-stcp-android
  7. rockchip-rknn-android