Apps assinados pela plataforma são apps 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.
Os UIDs compartilhados assinados pela plataforma são UIDs compartilhados (android:sharedUserId
) que
contêm apps assinados pela plataforma. Builds depuráveis são builds em que
android.os.Build.isDebuggable()
retorna true
, como builds userdebug
ou
eng
.
Historicamente, os fabricantes de dispositivos tinham pouco controle sobre quais apps não do sistema
assinados pela plataforma podiam participar de um UID compartilhado assinado pela plataforma. No Android
15 e versões mais recentes, os fabricantes podem permitir explicitamente que apps
que não são do sistema assinados pela plataforma participem de UIDs compartilhados assinados pela plataforma nos arquivos XML
de configuração do sistema no diretório /etc/permissions
. Se um app não do sistema
assinado pela plataforma não for adicionado à lista de permissões para um UID compartilhado assinado pela plataforma e
ainda tentar entrar no UID compartilhado assinado pela plataforma (com android:sharedUserId
no manifesto), ele não poderá ser instalado em builds não depuráveis.
Adicionar uma lista de permissões
Você pode listar listas de permissões para apps em um único arquivo XML ou em vários arquivos XML,
semelhante 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>
Encontrar uma lista de permissões ausente
Para encontrar uma entrada de lista de permissões ausente, tente instalar o app não do sistema assinado pela plataforma em um build não depurável e verifique se ele ainda pode ser instalado. Caso contrário, é possível inspecionar os registros do dispositivo para o seguinte formato de mensagens de aviso:
Non-preload app {PACKAGE_NAME} signed with platform signature and joining shared uid: {SHARED_UID_NAME}