署名権限の許可リスト

プラットフォーム署名済みアプリとは、プラットフォーム パッケージ(android)と同じ(または互換性のある)署名証明書を共有するアプリです。プラットフォーム署名済みアプリは、(システム イメージ パーティション上の)システムアプリの場合や、非システムアプリの場合があります。プラットフォーム署名権限はプラットフォーム パッケージで定義される権限で、signature 保護レベルも設定されています。デバッグ可能ビルドは、android.os.Build.isDebuggable()true を返すビルドで、userdebug ビルドや eng ビルドなどです。

これまでデバイス メーカーは、どのプラットフォーム signature 権限をプラットフォーム署名済みの非システムアプリに許可するのかについては、ほとんど制御できませんでした。Android 15 以降は、メーカーが /etc/permissions ディレクトリ内のシステム設定 XML ファイルでプラットフォーム署名権限を明示的に付与できます。プラットフォーム署名済みの非システムアプリがプラットフォーム署名権限の許可リストに指定されていない場合、アプリがデバッグ不可のビルドではプラットフォーム署名済みではないかのように権限が機能します。

許可リストを追加する

アプリの権限許可リストは、frameworks/base/etc/permissions ディレクトリにある単一の XML ファイルまたは複数の XML ファイル内で指定できます。

  • /etc/permissions/signature-permissions-OEM_NAME.xml
  • /etc/permissions/signature-permissions-DEVICE_NAME.xml

コンテンツを整理する方法に対する厳格なルールはありません。適切なアプリとその権限が許可リストに追加されている限り、デバイス実装者がコンテンツ構造を決定できます。

許可リストをカスタマイズする

AOSP には、特権権限の許可リストと同様に、必要に応じてカスタマイズできる許可リスト実装が用意されています。次に例を示します。

<!--
  ~ This XML file declares which platform signature permissions to grant to
  ~ platform signed nonsystem apps.
  -->

<permissions>
    <signature-permissions package="com.android.example">
        <permission name="android.permission.READ_DEVICE_CONFIG"/>
        ...
    </signature-permissions>
    ...
</permissions>

不足している権限を特定する

不足している権限を特定するには、プラットフォーム署名済みアプリをインストールして、デバイスログで次のようなフォーマットの警告メッセージを調べます。

Signature permission {PERMISSION_NAME} for package {PACKAGE_NAME} ({PACKAGE_PATH}) not in signature permission allowlist

システムはデバッグ可能なビルドでは権限を付与できますが、user ビルドなどのデバッグ不可のビルドでは付与できません。