PermissionController

PermissionController Mainline 模組包含隱私權政策,以及與授予及管理權限相關的使用者介面 (例如授予及管理權限的政策和使用者介面)。

關於 PermissionController

PermissionController 模組會處理與權限相關的 UI、邏輯和角色,以便允許應用程式存取特定目的。可控制下列項目:

  • 執行階段權限授予 (包括授予系統應用程式)
  • 執行階段權限管理 (包括權限分組)
  • 執行階段權限使用情形追蹤
  • 角色

自 Android 12 起,Role 的架構和系統伺服器類別會移至模組,使 Role 完全模組。

在 Android 10 中,套件安裝程式應用程式會分成多個部分,以便更新權限邏輯。做為可更新的 Mainline 模組,PermissionController:

  • 僅透過穩定的 @SystemApi 與架構互動 (不使用 @hide API)。
  • 處理與權限相關的意圖,優先順序為 > 0。
  • 提供機制,讓原始設備製造商 (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 中,權限模組程式碼會從 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) 可以使用範例指令,將修補程式從原始專案目錄移至新專案目錄。

從架構/基本/apex/權限遷移修補程式

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 主題 (顏色、邊距、字型和可繪項目)。