权限控制器

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

PermissionController Mainline 模块包含隐私策略以及与授予和管理权限相关的 UI(例如,授予和管理权限的策略和 UI)。

关于权限控制器

PermissionController 模块处理与权限相关的 UI、逻辑和角色,以允许出于特定目的访问应用程序。它控制以下内容:

  • 运行时权限授予(包括授予系统应用程序)
  • 运行时权限管理(包括权限分组)
  • 运行时权限使用跟踪
  • 角色

从 Android 12 开始, Role的框架和系统服务器类被移到模块中,使Role完全模块化。

在 Android 10 中,Package Installer 应用程序被拆分为多个部分,以支持更新权限逻辑。作为一个可更新的 Mainline 模块,PermissionController:

  • 仅通过稳定的 @SystemApi 与框架交互(不使用 @hide API)。
  • 处理优先级 > 0 的权限相关意图。
  • 公开了一种使 OEM 能够自定义主题的机制。
  • 提供系统和应用可以绑定的服务,包括角色管理、权限撤销和基本权限信息(用于设置)。
  • 支持自动撤销未使用的应用程序(Android 11 中的新功能)。

在 Android9 中,权限控制是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 中,权限模块代码从packages/apps/PermissionControllerplatform/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) 自定义权限 UI 主题(颜色、边距、字体和可绘制对象)