系统应用的Android运行时权限

时间:2016-05-10 06:31:24

标签: android android-source runtime-permissions

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

1 个答案:

答案 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.