權限控制器

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.google.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 主題(顏色、邊距、字體和可繪製對象)