PermissionController Mainline 模块包含与授予和管理权限相关的隐私权政策和界面(例如,用于授予和管理权限的政策和界面)。
关于 PermissionController
PermissionController 模块可以处理与权限相关的界面、逻辑和角色,以允许出于特定目的向应用授予访问权限。它可以控制以下方面:
- 授予运行时权限(包括向系统应用授予权限)
- 管理运行时权限(包括权限分组)
- 跟踪运行时权限使用情况
- 角色
从 Android 12 开始,Role
的框架和系统服务器类移入了该模块中,使得 Role
完全模块化。
在 Android 10 中,软件包安装程序应用会被拆分成多个部分,以实现权限逻辑更新。作为可更新的 Mainline 模块,PermissionController:
- 仅通过稳定的 @SystemApi(不使用 @hide API)与框架进行交互。
- 处理优先级大于 0 的权限相关 intent。
- 提供了一种机制,使原始设备制造商 (OEM) 能够自定义主题。
- 提供了系统和应用可以绑定的服务,包括角色管理、权限撤消和基本权限信息(适用于“设置”)。
- 支持自动撤销未使用的应用的权限(Android 11 中的新功能)。
在 Android 9 中,权限控制是 com.android.packageinstaller
的一部分。
自动撤销未使用的应用的权限
在 Android 11 中,PermissionsController 模块可以自动撤消长期未使用的应用的运行时权限。以 SDK 30 或更高版本为目标平台的应用默认启用自动撤消功能,而以 SDK 29 或更低版本为目标平台的应用则默认停用自动撤消功能。启用后,自动撤消功能会影响所有运行时权限,但所有预授予的权限(包括政策和系统固定的权限以及默认或按角色授予的权限)除外。如需了解详情,请参阅自动重置未使用的应用的权限。
软件包格式
PermissionController 模块的格式因版本而异。
在 Android 11 或更高版本中,PermissionController 模块采用 APEX 格式,并且可更新。软件包名称为
com.google.android.permission
。在 Android 10 中,PermissionController 模块采用 APK 格式,并且不可更新。软件包名称为
com.google.android.permissioncontroller
。
模块边界
在 Android 12 中,Permission 模块代码已从 packages/apps/PermissionController
(platform/packages/apps/PackageInstaller
项目)和 frameworks/base/apex/permission
(这是 frameworks/base
项目的子目录)中移出。
packages/modules/Permission
的新项目结构如下所示:
frameworks/base/apex/permission
中的文件packages/apps/PermissionController
中的 PermissionController 文件
OEM 可以借助示例命令将其补丁程序从原项目目录移至新的项目目录。
从 frameworks/base/apex/permission 中转移补丁程序
root/frameworks/base/$ git format-patch -1 --relative=apex/permission commit --stdout > patch-file.txt
root/packages/modules/Permission$ git am -p2 patch-file.txt
从 packages/apps/PermissionController 中转移补丁程序
root/packages/apps/PermissionController$ git format-patch -1 commit --stdout > patch-file.txt
root/packages/modules/Permission$ git am -p2 --directory=PermissionController patch-file.txt
自定义
OEM 可以使用运行时资源叠加层 (RROS) 自定义权限界面主题(颜色、外边距、字体和可绘制对象)。