安装一个apk引起的无法开机。

本文讲述了由于系统应用权限配置错误,导致手机无法开机的问题。详细分析了开机权限检查过程,以及如何通过权限设置导致普通App变为权限影响系统启动的案例,最后提醒用户注意软件安装和权限管理。
摘要由CSDN通过智能技术生成

故事的开始

今天老大急冲冲的跑过来说:xx,你帮我看看这手机咋回事,突然开不了机。

我心想:我最近也没提过代码,应该不是我的问题吧。(甩锅.

把电脑插上手机后,我看到下面这段报错一直在loop

12-31 16:08:49.603 21899 21899 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
12-31 16:08:49.603 21899 21899 E AndroidRuntime: java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions whitelist: {com.xxx.xxx.xxxxx (/data/app/~~BR9Kz0rmscIpqqvqBf8jwg==/com.xxx.xxx.xxxxx-fLGzzHKkZaTB5_DLxgo_Fg==): android.permission.BACKUP, com.xxx.xxx.xxxxx (/data/app/~~BR9Kz0rmscIpqqvqBf8jwg==/com.xxx.xxx.xxxxx-fLGzzHKkZaTB5_DLxgo_Fg==): android.permission.UPDATE_DEVICE_STATS}
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.pm.permission.PermissionManagerService.systemReady(PermissionManagerService.java:4688)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.pm.permission.PermissionManagerService.access$500(PermissionManagerService.java:181)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.systemReady(PermissionManagerService.java:4771)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.pm.PackageManagerService.systemReady(PackageManagerService.java:22183)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.SystemServer.startOtherServices(SystemServer.java:2305)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.SystemServer.run(SystemServer.java:624)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.server.SystemServer.main(SystemServer.java:440)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
12-31 16:08:49.603 21899 21899 E AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

看完之后我立马回答:老大,这个我知道,一定是系统应用组的同学忘记在privapp-permissions-platform.xml文件下面加权限声明了。

老大:不会呀,这个手机我一直在用,后面突然就变成这样了。

此刻的我一脸懵逼:还有如此神奇之事。故事的开始便是这样,接下来我就开始调查这个神奇的现象。

万恶之源

《众 所 周 知》

手机开机会检查priv-app的权限是否和/etc/permissions/privapp-permissions-platform.xml(有可能在别的文件夹下,例如vendor/etc/permissions,也有可能叫其他名字,因为只要xml的节点是对的就行,pm中的SystemConfig会对这类文件夹的所有xml进行扫描)所声明的权限是否一样,不一样则无法开机,就会一直loop上面的crash。

先从log中的PermissionManagerService#systemReady方法入手

private void systemReady() {
    mSystemReady = true;
    // 万恶之源
    if (mPrivappPermissionsViolations != null) {
        throw new IllegalStateException("Signature|privileged permissions not in "
                                        + "privapp-permissions whitelist: " + mPrivappPermissionsViolations);
    }
    // ...
}

只要mPrivappPermissionsViolations这个数组中有数据,我们就永远无法开机,看看这个数组是怎么填充的。

private boolean grantSignaturePermission(String perm, AndroidPackage pkg,
            PackageSetting pkgSetting, BasePermission bp, PermissionsState origPermi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值