Aplicativos privilegiados são aplicativos do sistema que estão localizados em um diretório priv-app em uma das partições de imagem do sistema. As partições usadas para versões do Android são
-  Android 8.1 e inferior - /system
-  Android 9 e superior - /system, /product, /vendor
 Ao longo desta página, /etc/permissions/priv-app resolve partition /etc/permissions/priv-app .
 Historicamente, os fabricantes de dispositivos tinham pouco controle sobre quais permissões privilegiadas de assinatura poderiam ser concedidas a aplicativos privilegiados. A partir do Android 8.0, os fabricantes devem conceder explicitamente permissões privilegiadas nos arquivos XML de configuração do sistema no diretório /etc/permissions . A partir do Android 9, os implementadores devem conceder ou negar explicitamente todas as permissões privilegiadas ou o dispositivo não inicializará.
 O arquivo privapp-permissions.xml só pode conceder ou negar permissões para aplicativos privilegiados na mesma partição. Por exemplo, se um aplicativo na partição /product solicitar permissões privilegiadas, a solicitação só poderá ser concedida ou negada por um arquivo privapp-permissions.xml que também esteja em /product .
Adicionando listas de permissões
 As listas de permissões de aplicativos podem ser listadas em um único XML ou em vários arquivos XML localizados no diretório frameworks/base/etc/permissions da seguinte forma:
-  /etc/permissions/privapp-permissions- OEM_NAME .xml
-  /etc/permissions/privapp-permissions- DEVICE_NAME .xml
 Não existe uma regra estrita para organizar o conteúdo. Os implementadores de dispositivos podem determinar a estrutura do conteúdo, desde que todos os aplicativos de /system/priv-app estejam na lista de permissões. Por exemplo, o Google tem uma única lista de permissões para todos os aplicativos privilegiados desenvolvidos pelo Google e recomenda a seguinte organização:
-  As permissões para aplicativos que já estão incluídos na árvore do Android Open Source Project (AOSP) estão listadas em /etc/permissions/privapp-permissions-platform.xml.
-  As permissões para aplicativos do Google estão listadas em /etc/permissions/privapp-permissions-google.xml.
-  Para outros aplicativos, use arquivos no formato: /etc/permissions/privapp-permissions- DEVICE_NAME .xml.
Gerando listas de permissões
 Para gerar automaticamente uma lista de permissões para todos os aplicativos disponíveis na imagem do sistema, use a ferramenta de linha de comando AOSP em development/tools/privapp_permissions/privapp_permissions.py . Para gerar uma versão inicial de privapp-permissions.xml específico do dispositivo:
-  Construir uma imagem do sistema: . build/envsetup.shlunch PRODUCT_NAMEmake -j
-  Execute o script privapp_permissions.pypara gerar um arquivoprivapp-permissions.xmlque lista todas as permissões de assinatura|privilegiadas necessárias para serem permitidas:development/tools/privapp_permissions/privapp_permissions.py Esta ferramenta imprime conteúdo XML que pode ser usado como um único arquivo ou dividido em vários arquivos no caminho do diretório/etc/permissions. Se o dispositivo já inclui listas de permissões nos diretórios/etc/permissions, a ferramenta apenas imprime as diferenças (como a assinatura ausente|permissões privilegiadas que você precisa adicionar à lista de permissões). Isso também é útil para fins de auditoria: quando uma nova versão do aplicativo é adicionada, a ferramenta detecta as permissões adicionais necessárias.
-  Copie os arquivos gerados para o diretório /etc/permissionsapropriado, onde o sistema lê os arquivos durante a inicialização.
Personalizando listas de permissões
 O AOSP inclui uma implementação de lista de permissões que pode ser personalizada conforme necessário. As permissões para aplicativos incluídos no AOSP já estão na lista de permissões em /etc/permissions/privapp-permissions-platform.xml .
 Por padrão, o script privapp_permissions.py gera uma saída que concede automaticamente qualquer permissão solicitada por um aplicativo privilegiado. Se houver permissões que devam ser negadas, edite o XML para usar uma tag "deny-permission" em vez de uma tag "permission". Exemplo:
<!-- This XML file declares which signature|privileged permissions to grant to
privileged apps that come with the platform -->
    <permissions>
    <privapp-permissions package="com.android.backupconfirm">
    <permission name="android.permission.BACKUP"/>
    <permission name="android.permission.CRYPT_KEEPER"/>
    </privapp-permissions>
    <privapp-permissions package="com.android.cellbroadcastreceiver">
    <!-- Don't allow the application to interact across users -->
    <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
    <permission name="android.permission.MANAGE_USERS"/>
    <permission name="android.permission.MODIFY_PHONE_STATE"/>
    <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
    <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
    </privapp-permissions>
    ...
Encontrando permissões ausentes
Para encontrar permissões ausentes ao abrir um novo dispositivo, ative o modo de registro de transição:
ro.control_privapp_permissions=log
As violações são relatadas no arquivo de log, mas as permissões sem privilégios ainda são concedidas. Isso mantém o dispositivo em estado de funcionamento enquanto fornece a lista de violações. Este é o formato da mensagem de erro:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Todas as violações devem ser tratadas adicionando as permissões ausentes às listas de permissões apropriadas.
-  No Android 8.0 e inferior, os aplicativos afetados não recebem as permissões ausentes, mesmo que estejam no caminho priv-app.
- No Android 9 e superior, violações (de permissões privilegiadas ) significam que o dispositivo não inicializa . Você deve permitir ou negar explicitamente todas as permissões privilegiadas
Como aplicar listas de permissões
 Depois que as listas de permissões estiverem em vigor, habilite a imposição de tempo de execução definindo a propriedade de compilação ro.control_privapp_permissions=enforce .
