有关Android运行时权限的问题。 AFAIK,android在运行时授予危险权限。我重置了手机,然后adb pull /data/system/users/0/runtime-permissions.xml,我发现android.ui.system已经授予了许多危险权限。谁能告诉我它是怎么做的?
答案 0 :(得分:13)
通过危险权限级别的用户确认对话框将运行时权限插入/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被删除(数据分区擦除)。
但即使在恢复出厂设置后,/data/system/users/0/runtime-permissions.xml
也包含系统应用的运行时权限(甚至危险等级),请参阅默认权限:runtime-permissions.xml。
之所以发生是因为:
授予所有默认权限
PackageManagerService
,通过以下两种方法:newUserCreated() //this get called when new user is created systemReady() //this get called when device is booted
及以上方法在内部调用:
DefaultPermissionPolicy.grantDefaultPermissions();
Have a look at How DefaultPermissionPolicy triggers
如果你看到DefaultPermissionPolicy's implementation,那就是 包含加载所有类型权限的所有相关方法 系统组件。
具体来说
DefaultPermissionPolicy.grantDefaultPermissions()
内部调用grantPermissionsToSysComponentsAndPrivApps(userId); grantDefaultSystemHandlerPermissions(userId);
在内部,它们会调用
grantRuntimePermissionsLPw()
方法,which performs all the remaining work.