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




