プラットフォームで署名された共有 UID の許可リスト

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

これまでデバイス メーカーは、プラットフォーム署名済みのどの非システムアプリに、プラットフォーム署名済み共有 UID への参加を許可するのかについては、ほとんど制御できませんでした。Android 15 以降は、プラットフォーム署名済み非システムアプリがプラットフォーム署名済み共有 UID に参加することを、メーカーが /etc/permissions ディレクトリ内のシステム設定 XML ファイルで明示的に許可できます。プラットフォーム署名済み共有 UID の許可リストに指定されていない非システムアプリの場合、(そのマニフェストの android:sharedUserId で)プラットフォーム署名済み共有 UID に参加しようとしても、デバッグ不可のビルドにはインストールできません。

許可リストを追加する

アプリの許可リストは、frameworks/base/data/etc/package-shareduid-allowlist.xml のような、単一の XML ファイルで指定することも、複数の XML ファイル内で指定することもできます。

<!--
This XML defines an allowlist for packages that want to join a particular shared-uid.
If a non-system package that is signed with platform signature, is trying to join a particular
shared-uid, and not in this list, the installation will fail.

- The "package" XML attribute refers to the app's package name.
- The "shareduid" XML attribute refers to the shared uid name.
  -->

<config>
    <allow-package-shareduid package="android.test.settings" shareduid="android.uid.system" />
</config>

許可リストの欠落を探す

許可リストに欠落しているエントリを探すには、プラットフォーム署名済み非システムアプリをデバッグ不可のビルドにインストールして、正常にインストールできるかどうかを確認します。インストールできない場合は、デバイスログで次のようなフォーマットの警告メッセージを調べます。

Non-preload app {PACKAGE_NAME} signed with platform signature and joining shared uid: {SHARED_UID_NAME}