Os apps assinados pela plataforma são aqueles que compartilham o mesmo certificado de assinatura
(ou compatível) com o pacote da plataforma (android
). Um app assinado pela plataforma pode ser
um app do sistema (localizado em uma partição de imagem do sistema) ou um app não do sistema.
As permissões de assinatura da plataforma são definidas pelo pacote da plataforma
e também têm o nível de proteção signature
. Os builds depuráveis são aqueles
cujos android.os.Build.isDebuggable()
retornam true
, como userdebug
ou
eng
.
Historicamente, os fabricantes de dispositivos tinham pouco controle sobre quais permissões
signature
da plataforma podiam ser concedidas a apps não do sistema assinados pela plataforma.
A partir do Android 15, os fabricantes podem conceder explicitamente
permissões de assinatura da plataforma nos arquivos XML de configuração do sistema no
diretório /etc/permissions
. Se um app sem sistema assinado pela plataforma não for
adicionado à lista de permissões para uma permissão de assinatura de plataforma, essa permissão vai atuar
como se o app não estivesse assinado pela plataforma em builds não depuráveis.
Adicionar uma lista de permissões
É possível listar listas de permissões de permissões para apps em um único arquivo XML ou em vários
arquivos XML localizados no diretório frameworks/base/etc/permissions
:
/etc/permissions/signature-permissions-OEM_NAME.xml
/etc/permissions/signature-permissions-DEVICE_NAME.xml
Nenhuma regra rígida se aplica à organização do conteúdo. Os implementadores de dispositivos podem determinar a estrutura do conteúdo, desde que os apps apropriados e as permissões deles sejam adicionados à lista de permissões.
Personalizar uma lista de permissões
O AOSP inclui uma implementação de lista de permissões que você pode personalizar conforme necessário, semelhante à lista de permissões privilegiadas. Por exemplo:
<!--
~ 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>
Encontrar permissões ausentes
Para encontrar as permissões ausentes, instale o app assinado pela plataforma e inspecione os registros do dispositivo para o seguinte formato de mensagens de aviso:
Signature permission {PERMISSION_NAME} for package {PACKAGE_NAME} ({PACKAGE_PATH}) not in signature permission allowlist
O sistema ainda pode conceder a permissão em builds depuráveis, mas não em
builds não depuráveis, como builds user
.