关于Android运行时权限的问题。据我所知,Android在运行时授予危险权限。我重置了手机,然后adb pull /data/system/users/0/runtime-permissions.xml,我发现android.ui.system已经授予了许多危险权限。有人能告诉我它是如何做到的吗?
关于Android运行时权限的问题。据我所知,Android在运行时授予危险权限。我重置了手机,然后adb pull /data/system/users/0/runtime-permissions.xml,我发现android.ui.system已经授予了许多危险权限。有人能告诉我它是如何做到的吗?
将危险的运行时权限插入/data/system/users/0/runtime-permissions.xml
文件的机制仅适用于第三方应用程序,并不适用于内置应用程序。
对于内置/系统应用程序和框架组件,在创建新用户或设备启动并触发
systemReady
事件时,默认授予所有权限。
您可以查看AOSP中的AndroidManifest.xml,其中为系统组件编写了所有类型的所需权限。
对于第三方应用程序,当用户授予任何运行时权限时,它会被添加到文件/data/system/users/0/runtime-permissions.xml
中。当用户从任何第三方应用程序中撤销权限时,该权限将从文件中删除。在完全恢复出厂设置的情况下,所有第三方应用程序的运行时权限都将被删除,因为/data/system/users/0/runtime-permissions.xml
将被删除(数据分区擦除)。
/data/system/users/0/runtime-permissions.xml
仍然包含系统应用程序的运行时权限(甚至是危险的权限),请参见默认权限:runtime-permissions.xml。
这种情况发生的原因是:
All the default permissions are granted from
PackageManagerService
, via these two methods:newUserCreated() //this get called when new user is created systemReady() //this get called when device is booted
and the above methods internally invoke:
DefaultPermissionPolicy.grantDefaultPermissions();
Have a look at How DefaultPermissionPolicy triggers
And if you see DefaultPermissionPolicy's implementation, it contains all the relevant method to load all type of permissions for System components.
Specifically
DefaultPermissionPolicy.grantDefaultPermissions()
internally callsgrantPermissionsToSysComponentsAndPrivApps(userId); grantDefaultSystemHandlerPermissions(userId);
and it internally invokes
grantRuntimePermissionsLPw()
, which performs all the remaining work.
设备制造商对于授予特权应用程序哪些签名|特权权限几乎没有控制权。从Android 8.0开始,制造商必须在系统配置XML文件(位于/ etc / permissions目录中)中明确授予特权权限。
Android允许存在于这些目录(system/product/vendor/oem/ | _ext)中的系统应用程序通过编写XML文件来将其权限列入白名单。
XML文件内容:
<permissions> <privapp-permissions package="x.y.z"> <permission name="android.permission.PACKAGE_USAGE_STATS" /> </privapp-permissions> </permissions>
Android.bp文件:
prebuilt_etc { name: "x.y.z.xml", system_ext_specific: true, src: "x.y.z.xml", sub_dir: "permissions", }
将'x.y.z.xml'添加到PRODUCT_PACKAGES中,使其成为最终镜像的一部分(与应用程序相同)
在目标设备上:XML文件可以在'partition/etc/permissions/priv-app'下找到
PackageManager解析所有XML文件,并在启动时安装应用程序时为包名中提到的权限白名单。