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

Android主板RS485端口Modbus RTU开发遇AVC权限拒绝求助

解决方案

一、解决AVC串口权限拒绝问题

从Logcat日志看,你的应用处于untrusted_app SELinux域,无法访问serial_device类型的/dev/ttyS5设备,以下是几种解决方法:

  • 临时测试用:直接修改设备文件权限
    借助Root权限在终端执行命令,给串口文件开放全局读写权限,重启后失效,适合快速验证功能:

    su
    chmod 666 /dev/ttyS5
    
  • 永久生效:添加SELinux自定义规则
    如果你需要长期生效,可自定义SELinux规则允许应用访问串口:

    1. 创建规则文件serial_app.te,内容如下:
      allow untrusted_app serial_device:chr_file { open read write };
      
    2. 编译规则(设备需预装checkpolicy工具,或在PC端交叉编译):
      checkpolicy -M -o serial_app.pp serial_app.te
      
    3. 加载规则到系统:
      su
      semodule -i serial_app.pp
      

二、签名后保留调试能力

厂商提供的签名会让应用获得系统级权限,但默认release包关闭了调试,可通过以下方式开启:

  • 修改构建配置,让release包可调试
    在Module级的build.gradle中,给release构建类型开启调试开关:

    android {
        buildTypes {
            release {
                signingConfig signingConfigs.your_vendor_sign // 替换成你配置的厂商签名
                debuggable true
                minifyEnabled false // 先关闭混淆,方便调试
            }
        }
    }
    

    用这个配置编译的release包,安装后可直接在Android Studio中调试,Logcat、断点功能都能正常使用。

  • 双阶段测试:先调试再签名
    先用默认调试签名编译APK,配合Root临时权限验证功能没问题后,再用厂商签名打包正式版本;或者用adb root后执行adb install -t your_debug_apk.apk安装调试包,快速验证逻辑。

三、绕开权限限制:Root层封装串口操作

如果不想修改SELinux或签名配置,可通过Root权限在底层执行串口操作,Java层仅调用命令:

public String readSerialData() throws IOException, InterruptedException {
    Process process = Runtime.getRuntime().exec(new String[]{"su", "-c", "cat /dev/ttyS5"});
    BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    StringBuilder output = new StringBuilder();
    String line;
    while ((line = inputReader.readLine()) != null) {
        output.append(line);
    }
    inputReader.close();
    process.waitFor();
    return output.toString();
}

这种方式绕开了应用层的SELinux权限检查,适合快速验证功能,但要注意Root操作的安全风险。

内容的提问来源于stack exchange,提问作者Burak Ogutken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:49