模块安装报错 os error 2/5/22 — 取消 shell root 授权就好
什么情况会碰到
在 APatch(或 KernelSU)管理器里安装 APM 模块时,弹出报错:
os error 2os error 5os error 22
或者模块安装成功但重启后不生效。
原因
这是 APatch/KernelSU 生态里已知的老坑。
shell 这个用户(通过 adb shell 进入系统的用户)如果被 APatch 授予了 root 权限,它的 SELinux 上下文会变成 root 的上下文。这个上下文变化会影响其他进程的文件操作——特别是模块安装时需要创建的目录、写入的文件可能因为"操作不允许"而失败。
Magisk 用户习惯了给 shell 授权 root(因为 Magisk 的 su 守护进程在 shell 场景下工作没问题),但在 APatch 里这个习惯会炸。
解决方案
在 root 授权页面取消 shell 的 root 权限:
- 打开 APatch 管理器
- 进入权限管理页面(不同版本可能叫"权限管理"、"应用权限"等)
- 找到
shell这个条目 - 把它的 root 授权改成"拒绝"或"撤销"
- 重启设备(必须重启,撤销才生效)
- 重启后重新尝试安装模块
验证修复
重启后再试着装之前报错的模块:
- 能正常安装了 → 问题就是 shell 的 root 授权导致的
- 还是报错 → 检查模块本身有没有问题,试试装一个其他简单模块
为什么 Magisk 没这个问题
Magisk 的 su 守护进程在处理 shell 场景时有专门的上下文保留逻辑——它不会修改 shell 的 SELinux 上下文。而 APatch 的 SuperCall 直接在内核层面授予 root 权限,shell 的上下文确实会被改。
这不是 bug——是两种权限授予方式的固有差异。Magisk 走用户空间守护进程,APatch 走内核空间 hook,副作用不同。
以后都不要给 shell 授权 root
记住这条 APatch 的使用铁律:
绝对不要给 shell(adb shell 用户)授权 root 权限
如果你需要 root shell,用管理器授权的方式(正常的 App 授权),或用 su 命令触发 App 内授权。
其他常见安装错误
| 错误 | 可能原因 | 解决 |
|---|---|---|
| os error 13 | 权限不足 | 检查目标目录权限,确认管理器有 root |
| os error 30 | 只读文件系统 | 系统分区被挂载为只读,尝试 remount |
| 模块无 module.prop | 模块 zip 结构不对 | 解压确认 zip 根目录有 module.prop |
| 重启后模块不生效 | SELinux 或 overlayfs 问题 | 检查 SELinux 模式(应为 permissive 或 hook 绕过) |
总结
模块安装时报 os error 2/5/22 → 去权限管理里取消 shell 的 root 授权 → 重启 → 再试。就这一条。