You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8.0及以上使用serial_port_flutter无法获取串口设备列表问题

问题根因

Android 8.0(API 26)及以上版本收紧了第三方应用对/proc文件系统的访问权限,/proc/tty/drivers属于系统敏感路径,普通应用无读取权限。serial_port_flutter插件原有逻辑是通过读取该路径枚举串口设备,因此在高版本系统上会触发如下报错:

java.io.FileNotFoundException: /proc/tty/drivers (Permission denied)
这也是该示例在低版本设备运行正常、高版本无法获取设备列表的核心原因。

适配方案

可根据你的应用场景选择对应方案:

  • 方案一:改造插件枚举逻辑,使用官方UsbManager API实现
    放弃读取/proc路径的原有实现,改用Android官方提供的USB设备管理接口枚举串口设备,操作步骤如下:
    1. 在android/app/src/main/AndroidManifest.xml中添加USB主机权限声明:
    <uses-feature android:name="android.hardware.usb.host" />
    <uses-permission android:name="android.permission.USB_PERMISSION" />
    
    1. 修改插件Android层的设备枚举代码,调用UsbManager.getDeviceList()获取所有已连接的USB设备,过滤符合串口设备VID/PID规则的设备后,通过UsbDeviceConnection打开设备即可获取串口实例。
  • 方案二:定制系统场景特殊适配
    如果你的应用仅运行在可获取系统签名的定制设备上,可在AndroidManifest.xml的manifest节点添加android:sharedUserId="android.uid.system"属性,使用系统签名打包应用后即可获得/proc路径的访问权限,原有逻辑无需修改即可正常运行。
  • 方案三:更换适配高版本的串口插件
    不想自行改造插件的话,可以替换使用usb_serial等基于UsbManager实现的Flutter串口插件,这类插件原生适配了Android 8.0及以上版本的权限限制,无需额外修改即可正常获取串口设备列表。

内容的提问来源于stack exchange,提问作者José Romero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:09:03