Белый список общих UID, подписанных платформой

Приложения, подписанные платформой, – это приложения, которые используют тот же (или совместимый) сертификат подписи, что и пакет платформы (android). Приложение, подписанное платформой, может быть системным (расположенным в разделе системного образа) или несистемным. Общие UID, подписанные платформой, – это общие UID (android:sharedUserId), которые содержат приложения, подписанные платформой. Отладочные сборки – это сборки, для которых функция android.os.Build.isDebuggable() возвращает значение true, например сборки userdebug или eng.

Раньше производители устройств не могли контролировать, какие несистемные приложения, подписанные платформой, могут присоединяться к общему UID, подписанному платформой. Начиная с Android 15 производители могут явно разрешить приложениям, не относящимся к системным и подписанным платформой, присоединяться к общим UID, подписанным платформой, в XML-файлах конфигурации системы в каталоге /etc/sysconfig. Если приложение, подписанное платформой и не являющееся системным, не добавлено в белый список для общего UID, подписанного платформой, и при этом оно пытается присоединиться к этому UID (с помощью android:sharedUserId в манифесте), его нельзя будет установить на сборки, не предназначенные для отладки.

Как добавить белый список

Вы можете указать белые списки приложений в одном или нескольких XML-файлах, как в frameworks/base/data/etc/package-shareduid-allowlist.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}