PermissionController

O módulo PermissionController Mainline contém políticas de privacidade e a interface relacionada à concessão e ao gerenciamento de permissões (por exemplo, as políticas e a interface para conceder e gerenciar permissões).

Sobre o PermissionController

O módulo PermissionController processa a interface, a lógica e as funções relacionadas a permissões para permitir o acesso de apps para fins específicos. Ela controla o seguinte:

  • Concessão de permissões de tempo de execução (incluindo a concessão de apps do sistema)
  • Gerenciamento de permissões de execução (incluindo agrupamento de permissões)
  • Rastreamento de uso de permissões de execução
  • Papéis

A partir do Android 12, as classes do framework e do servidor do sistema para Role são movidas para o módulo para tornar o Role totalmente modular.

No Android 10, o app Package Installer é dividido em seções para permitir que a lógica de permissões seja atualizada. Como um módulo Mainline atualizável, o PermissionController:

  • Interage com a framework apenas usando a @SystemApi estável (sem o uso da @hide API).
  • Processa intents relacionadas a permissões com prioridade > 0.
  • Expõe um mecanismo para permitir que OEMs personalizem a aplicação de temas.
  • Fornece serviços aos quais o sistema e os aplicativos podem se vincular, incluindo gerenciamento de funções, revogação de permissões e informações básicas de permissões (para Configurações).
  • Oferece suporte à revogação automática para apps não usados (novo no Android 11).

No Android 9, o controle de permissões faz parte de com.android.packageinstaller.

Revogação automática para apps não usados

No Android 11, o módulo PermissionsController pode revogar automaticamente as permissões de execução para apps que não são usados por um período prolongado. Os apps destinados ao SDK 30 ou mais recente têm a revogação automática ativada por padrão, enquanto os apps destinados ao SDK 29 ou anterior têm a revogação automática desativada por padrão. Quando ativada, a revogação automática afeta todas as permissões de execução, mas isenta todas as permissões pré-concedidas, incluindo permissões fixas por políticas e pelo sistema e aquelas concedidas por padrão ou por papel. Para detalhes, consulte Redefinir automaticamente permissões de apps não utilizados.

Formato do pacote

O formato do módulo PermissionController é diferente entre as versões.

  • No Android 11 e versões mais recentes, o módulo PermissionController está no formato APEX e pode ser atualizado. O nome do pacote é com.google.android.permission.

  • No Android 10, o módulo PermissionController está no formato APK e não pode ser atualizado. O nome do pacote é com.google.android.permissioncontroller.

Limite do módulo

No Android 12, o código do módulo de permissão é movido de packages/apps/PermissionController (o projeto platform/packages/apps/PackageInstaller) e frameworks/base/apex/permission (um subdiretório do projeto frameworks/base).

A nova estrutura do projeto para packages/modules/Permission é a seguinte:

  • Arquivos de frameworks/base/apex/permission
  • Arquivos PermissionController de packages/apps/PermissionController

Os OEMs podem usar os comandos de exemplo para mover os patches dos diretórios de projeto originais para o novo diretório de projeto.

Mover um patch de frameworks/base/apex/permission

root/frameworks/base/$ git format-patch -1 --relative=apex/permission commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 patch-file.txt

Mover um patch de packages/apps/PermissionController

root/packages/apps/PermissionController$ git format-patch -1 commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 --directory=PermissionController patch-file.txt

Personalização

Os OEMs podem personalizar o tema da interface de permissões (cores, margens, fontes e drawables) usando sobreposições de recursos de execução (RROS, na sigla em inglês).