Lista de entidades permitidas de permisos de firma

Las apps firmadas en la plataforma son apps que comparten el mismo certificado de firma (o uno compatible) con el paquete de la plataforma (android). Una app firmada en la plataforma puede ser una app del sistema (ubicada en una partición de la imagen del sistema) o una app que no sea del sistema. Los permisos de firma de la plataforma son permisos definidos por el paquete de la plataforma que también tienen el nivel de protección signature. 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é permisos de signature de la plataforma se podían otorgar a las apps que no eran del sistema y que estaban firmadas por la plataforma. A partir de Android 15, los fabricantes pueden otorgar explícitamente permisos de firma de la plataforma en los archivos XML de configuración del sistema en el directorio /etc/permissions. Si no se agrega a la lista de entidades permitidas una app firmada por la plataforma que no es del sistema para un permiso de firma de la plataforma, ese permiso actúa como si la app no estuviera firmada por la plataforma en compilaciones no depurables.

Cómo agregar una lista de entidades permitidas

Puedes incluir en la lista los permisos de las apps en un solo archivo XML o en varios archivos XML ubicados en el directorio /etc/permissions:

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

No se aplica ninguna regla estricta sobre cómo se organiza el contenido. Los implementadores de dispositivos pueden determinar la estructura del contenido, siempre y cuando las apps adecuadas y sus permisos se agreguen a la lista de entidades permitidas.

Cómo personalizar una lista de entidades permitidas

El AOSP incluye una implementación de lista de entidades permitidas que puedes personalizar según sea necesario, de manera similar a la lista de entidades permitidas de permisos privilegiados. Por ejemplo:

<!--
  ~ 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>

Cómo encontrar permisos faltantes

Para encontrar los permisos faltantes, instala la app firmada de tu plataforma y analiza los registros del dispositivo en busca del siguiente formato de mensajes de advertencia:

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

El sistema aún puede otorgar el permiso en compilaciones depurables, pero no en compilaciones no depurables, como las compilaciones de user.