PermissionController

PermissionController Mainline モジュールには、権限の付与と管理に関連するプライバシー ポリシーと UI(権限の付与と管理のためのポリシーや UI など)が含まれています。

PermissionController について

PermissionController モジュールは、権限関連の UI、ロジック、ロールを処理して、特定の目的でアプリにアクセスできるようにし、次の制御を行います。

  • ランタイム権限の付与(システムアプリへの付与など)
  • ランタイム権限の管理(権限のグループ化など)
  • ランタイム権限の使用状況のトラッキング
  • 役割

Android 12 以降では、Role のフレームワークとシステム サーバーのクラスを、Role を完全にモジュール化するためにモジュールに移動しています。

Android 10 では、パッケージ インストーラ アプリがセクションに分割され、権限ロジックの更新が可能になりました。更新可能な Mainline モジュールとして、PermissionController は次のことを行います。

  • @hide API を使用せず、安定版の @SystemApi のみを使用して、フレームワークとやり取りします。
  • 優先度が 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 では、Permission モジュール コードを、packages/apps/PermissionControllerplatform/packages/apps/PackageInstaller プロジェクト)と frameworks/base/apex/permissionframeworks/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 のテーマ(色、マージン、フォント、ドローアブル)をカスタマイズできます。