系统应用的Android运行时权限

use*_*874 7 android android-source runtime-permissions

关于Android运行时权限的问题.AFAIK,android在运行时授予危险权限.我重置了手机,然后adb pull /data/system/users/0/runtime-permissions.xml,我发现android.ui.system已经授予了许多危险权限.任何人都可以告诉我它是怎么做的?

shr*_*ari 18

/data/system/users/0/runtime-permissions.xml通过危险权限级别的用户确认对话框将运行时权限插入文件的机制适用于第三方应用程序,这与内置应用程序无关.

对于内置/系统应用程序和框架组件,默认情况下,在创建新用户或触发设备引导并触发systemReady事件时,将授予所有权限.

您可以从AOSP中看到AndroidManifest.xml,其中为系统组件编写了所有类型的必需权限.

对于第三方应用程序,当User授予任何运行时权限时,它会被添加到文件/data/system/users/0/runtime-permissions.xml中,并在您撤销任何第三方应用程序的权限时被删除,而在完全出厂后重置,删除所有第三方应用程序的运行时权限,因为/data/system/users/0/runtime-permissions.xml被删除(数据分区擦除).

但即使在恢复出厂设置后,还systemReady包含系统应用程序的运行时权限(甚至是危险级别),请参阅默认权限:runtime-permissions.xml.

它发生的原因是:

/data/system/users/0/runtime-permissions.xml通过以下两种方法授予所有默认权限 :

newUserCreated() //this get called when new user is created   
systemReady() //this get called when device is booted
Run Code Online (Sandbox Code Playgroud)

以上方法在内部调用:

/data/system/users/0/runtime-permissions.xml

看看DefaultPermissionPolicy是如何触发的

如果您看到DefaultPermissionPolicy的实现,它包含加载System组件的所有类型权限的所有相关方法.

特别是/data/system/users/0/runtime-permissions.xml 内部调用

grantPermissionsToSysComponentsAndPrivApps(用户id); grantDefaultSystemHandlerPermissions(用户id);

它在内部调用PackageManagerService方法,执行所有剩余的工作.