權限控制器

PermissionController 模塊啟用可更新的隱私策略和 UI 元素(例如,有關授予和管理權限的策略和 UI)。

從 Android 12 開始, Role的框架和系統服務器類被移到模塊中,使Role完全模塊化。

關於權限控制器

com.google.android.permissioncontroller APK 處理與權限相關的 UI、邏輯和角色,以允許應用程序出於特定目的進行訪問。它控制以下內容:

  • 運行時權限授予(包括授予系統應用程序)

  • 運行時權限管理(包括權限分組)

  • 運行時權限使用跟踪

  • 角色

在 Android 9 中,此類權限是com.google.android.packageinstaller的一部分。在 Android 10 中,Package Installer 應用程序被拆分為多個部分,以支持更新權限邏輯。作為一個可更新的 Mainline 模塊,PermissionController:

  • 僅通過穩定的@SystemApi與框架交互(不使用@hide API)。

  • 處理優先級高於 0 的權限相關意圖。

  • 公開了一種使 OEM 能夠自定義主題的機制。

  • 提供系統和應用可以綁定的服務,包括角色管理、權限撤銷和基本權限信息(用於設置)。

  • 支持自動撤銷未使用的應用程序(Android 11 中的新功能)。

自動撤銷未使用的應用程序

在 Android 11 中,PermissionsController 模塊可以自動撤銷長時間未使用的應用的運行時權限。面向 SDK 30 或更高版本的應用默認啟用自動撤銷功能,而面向 SDK 29 或更低版本的應用默認禁用自動撤銷功能。啟用後,自動撤銷會影響所有運行時權限,但會免除所有預先授予的權限,包括策略和系統固定權限以及默認或角色授予的權限。有關詳細信息,請參閱未使用應用程序的自動重置權限

包裝格式

PermissionController 模塊以 APK 文件的形式提供。

模塊邊界

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