權限控制器

PermissionController Mainline 模組包含隱私權策略以及與授予和管理權限相關的 UI(例如,用於授予和管理權限的策略和 UI)。

關於權限控制器

PermissionController 模組處理與權限相關的 UI、邏輯和角色,以允許應用程式出於特定目的進行存取。它控制以下內容:

  • 運行時權限授予(包括授予系統應用程式)
  • 運行時權限管理(包括權限分組)
  • 運行時權限使用追蹤
  • 角色

從 Android 12 開始, Role的框架和系統伺服器類別移至模組中,使Role完全模組化。

在 Android 10 中,Package Installer 應用程式分為多個部分,以便更新權限邏輯。作為可更新的主線模組,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 中,Permission 模組程式碼從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 主題(顏色、邊距、字體和可繪製物件)。