Lista de entidades permitidas de UIDs compartidos firmados por la plataforma

Las apps firmadas por la plataforma son apps que comparten el mismo certificado de firma (o uno compatible) con el paquete de la plataforma (android). Una app firmada por la plataforma puede ser una app del sistema (ubicada en una partición de imagen del sistema) o una app que no sea del sistema. Los UID compartidos firmados por la plataforma son UID compartidos (android:sharedUserId) que contienen apps firmadas por la plataforma. Las compilaciones depurables son aquellas cuyo android.os.Build.isDebuggable() devuelve true, como las compilaciones userdebug o eng.

Históricamente, los fabricantes de dispositivos tenían poco control sobre qué apps que no eran del sistema y estaban firmadas por la plataforma podían unirse a un UID compartido firmado por la plataforma. A partir de Android 15, los fabricantes pueden permitir explícitamente que las apps que no son del sistema firmadas por la plataforma se unan a los UID compartidos firmados por la plataforma en los archivos XML de configuración del sistema en el directorio /etc/sysconfig. Si una app que no es del sistema y está firmada por la plataforma no se agrega a la lista de entidades permitidas para un UID compartido firmado por la plataforma, y la app sigue intentando unirse al UID compartido firmado por la plataforma (con android:sharedUserId en su manifiesto), esa app no se podrá instalar en compilaciones que no sean depurables.

Cómo agregar una lista de entidades permitidas

Puedes incluir en la lista de entidades permitidas las apps en un solo archivo XML o en varios, de manera similar a 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>

Encuentra la lista de anunciantes permitidos faltante

Para encontrar una entrada faltante en la lista de entidades permitidas, intenta instalar tu app que no es del sistema firmada por la plataforma en una compilación no depurable y verifica si aún se puede instalar. De lo contrario, puedes inspeccionar los registros del dispositivo para ver el siguiente formato de los mensajes de advertencia:

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