问题:
今天给系统里预制一个app,编译完刷机起来后一直报如下错误:
AndroidRuntime system_server E *** FATAL EXCEPTION IN SYSTEM PROCESS: main
java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions whitelist: {com.xxxxxxx.android.xxxx.app.settings (/system/priv-app/xxxxx): android.permission.SET_TIME_ZONE}
at com.android.server.pm.permission.PermissionManagerService.systemReady(PermissionManagerService.java:4703)
at com.android.server.pm.permission.PermissionManagerService.access$500(PermissionManagerService.java:178)
at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.systemReady(PermissionManagerService.java:4786)
at com.android.server.pm.PackageManagerService.systemReady(PackageManagerService.java:21698)
at com.android.server.SystemServer.startOtherServices(SystemServer.java:2242)
at com.android.server.SystemServer.run(SystemServer.java:602)
at com.android.server.SystemServer.main(SystemServer.java:418)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
分析:
通过日志我们可以知道,Signature|privileged permissions not in privapp-permissions whitelist
。这意味着有一个名为com.xxxx.android.xxxx.app.settings
的应用程序(位于/system/priv-app/xxxxx
目录下),它使用一个它没有被白名单授权的权限,即android.permission.SET_TIME_ZONE
。
我们都知道,在Android操作系统中,有几种不同级别的应用程序,每种都拥有不同的权限级别。对于预装于/system/priv-app
目录下的特权应用(privileged app),它们通常拥有比普通应用更高的权限。然而,Android 8(Oreo)及以上版本对这些特权应用施加了更严格的安全限制。如果一个特权应用试图使用未明确列在其privapp-permissions
白名单中的特权权限,系统会抛出这种异常,并可能导致应用崩溃或系统服务停止。
解决办法:
在platform/frameworks/base/data/etc 下privapp-permissions-platform.xml里,照着里面其他app 如何加的,把新的这个app 包名以及报错的权限加上,重新编译就OK了。