You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用执行su命令报错:Cannot run program "su": error=13, Permission denied

解决Android应用调用su时出现Permission denied的问题

这个问题我之前帮不少开发者排查过,本质是Android系统的权限限制在起作用,咱们一步步拆解解决:

先搞懂为什么会报错

出现Cannot run program "su": error=13, Permission denied,通常是这几个原因:

  • 设备未获取root权限su是切换到超级用户的命令,只有root过的设备才支持普通应用调用它,未root的设备会直接拒绝这个请求。
  • 应用未被授予root权限:就算设备root了,Magisk、SuperSU这类root管理工具会对每个请求su的应用做权限校验,如果用户没同意授权,或者应用被加入了拒绝列表,也会抛出权限错误。
  • SEinux限制拦截:部分定制ROM的SEinux处于Enforcing模式,会严格限制应用的操作,就算有root权限,也可能被拦截执行su

具体解决方案

1. 确认设备已完成root

  • 先通过Magisk、SuperSU等主流工具完成设备root,流程完成后务必重启设备。
  • 验证root有效性:打开终端模拟器,输入su,如果提示符从$变成#,说明root成功。

2. 给应用授予root权限

  • 当你的应用第一次调用su时,root管理工具会弹出权限请求弹窗,一定要选择「允许」或「永久允许」。
  • 如果之前误操作拒绝了,打开root管理工具(比如Magisk Manager),找到你的应用,将其root权限改为允许状态。

3. 处理SEinux限制(前两步无效时尝试)

  • 临时关闭SEinux:打开终端输入setenforce 0,然后重新测试应用调用su的功能。注意这个操作是临时的,设备重启后SEinux会恢复默认状态。
  • 永久关闭SEinux(不推荐):修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive,保存后重启设备。但这会降低系统安全性,只建议测试环境使用。

额外注意事项

  • 不要在面向普通用户的正式应用中依赖su命令,因为绝大多数用户的设备没有root,而且Google Play商店禁止这类应用上架。
  • 代码中调用su时,记得捕获IOException等异常,给用户友好的提示(比如「设备未root或未授予应用root权限」)。

内容的提问来源于stack exchange,提问作者swaroop bangaru

火山引擎 最新活动