Android下使用su实现应用自重装时后续命令不执行问题求助
Android Root权限自更新链式命令不执行问题成因
- 定制ROM的su实现逻辑变更
AOSP原生逻辑中Runtime.getRuntime().exec()创建的子进程确实不会随父进程销毁被终止,但绝大多数国内定制ROM、第三方修改ROM都修改了su二进制文件的实现,会将su子进程归入父进程的进程组,当应用进程被pm install命令杀死后,整个进程组会被系统发送SIGKILL信号连带销毁,su进程直接终止,pm install -rf /storage/emulated/0/latest.apk && am start -n xxx.xxx.xxx/xxx.xxx.xxx中&&后的命令根本没有执行机会。 - 包管理服务的进程清理策略
部分ROM的PackageManagerService在执行覆盖安装逻辑时,会扫描与目标包名关联的所有进程树,哪怕是root权限的子进程只要是从原应用进程fork派生而来,也会被强制终止,避免安装过程中出现文件锁、资源占用冲突,直接打断链式命令的执行流程。 - 命令执行返回值不符合预期
使用&&连接两个命令的规则是只有前序命令返回退出码0的情况下才会执行后续命令。但部分ROM的pm install实现存在返回逻辑异常:要么安装成功但返回非0值,要么安装逻辑还没完全走完就提前返回结果,都会导致后续am start命令不触发。 - SELinux权限拦截
高版本Android多数ROM默认强制开启SELinux,root权限的su进程默认运行在u:r:su:s0上下文,没有权限启动第三方普通应用的Activity组件,SELinux会直接拦截am start命令的执行,未捕获命令错误输出时会误以为命令没有运行。
内容的提问来源于stack exchange,提问作者simonzhang
相关产品推荐
相关产品推荐

