Las apps firmadas por la plataforma son apps que comparten el mismo certificado de firma (o 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 es 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()
muestra true
, como las compilaciones userdebug
o eng
.
Históricamente, los fabricantes de dispositivos tenían poco control sobre qué apps no del sistema 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 UIDs compartidos firmados por la plataforma en los archivos XML de configuración del sistema en el directorio /etc/permissions
. Si una app no del sistema firmada por la plataforma no se agrega a la lista de entidades permitidas para un UID compartido firmado por la plataforma y la app aún intenta unirse al UID compartido firmado por la plataforma (con android:sharedUserId
en su manifiesto), esa app no se puede instalar en compilaciones no depurables.
Agrega una lista de entidades permitidas
Puedes enumerar las listas de entidades permitidas para las apps en un solo archivo en formato XML o en varios archivos en formato XML, 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>
Cómo encontrar la lista de entidades permitidas faltante
Para encontrar una entrada faltante de la lista de entidades permitidas, intenta instalar tu app que no sea del sistema y firmada por la plataforma, en una compilación no depurable y verifica si se puede instalar de todos modos. De lo contrario, puedes inspeccionar los registros del dispositivo en busca del siguiente formato de mensajes de advertencia:
Non-preload app {PACKAGE_NAME} signed with platform signature and joining shared uid: {SHARED_UID_NAME}