Permissões do Android

As permissões do Android oferecem controles que aumentam a conscientização do usuário e limitam o acesso de um app a dados sensíveis. A configuração de permissões no Android 8.0 e versões anteriores inclui a lista de permissões, sem a qual os apps privilegiados são desativados, mesmo se estiverem no caminho priv-app. No Android 9 e versões mais recentes, um dispositivo que tenta usar apps que não estão na lista de permissões não será inicializado.

O Android 10 introduziu o conceito de função, um nome exclusivo no sistema associado a determinados requisitos e privilégios. Atribua papéis a apps para conceder permissões para um propósito específico e configure papéis padrão usando recursos de configuração da plataforma.

O aumento das proteções contra apps potencialmente nocivos (PHAs) melhora:

  • Transparência sobre o comportamento potencialmente nocivo de apps.
  • Controle do usuário sobre o comportamento do app.
  • Discrição dos desenvolvedores de apps ao usar dados particulares, protegidos por permissões.

Instalação e permissão de pacotes

No Android 9 e versões anteriores, as funcionalidades de instalação de pacotes e controle de permissões estavam contidas no pacote PackageInstaller (//packages/apps/PackageInstaller). No Android 10 e versões mais recentes, a funcionalidade de controle de permissões reside em um pacote separado, PermissionController (//packages/apps/PermissionController). A Figura 1 ilustra onde os dois pacotes residem no Android 10.

Separação das funcionalidades de instalação de pacotes
e controle de permissões para apps do sistema e usados por apps instalados
pelo usuário

Figura 1. Funcionalidades de instalação de pacotes e controle de permissões no Android 10

Listas de permissões e acesso

No Android 6.0 e versões mais recentes, os apps solicitam acesso a permissões perigosas no tempo de execução. O Android 10 adiciona permissões de ambiente de execução de reconhecimento de atividade (RA), que solicitam que o usuário modifique ou permita permissões perigosas.

O Android 8.0 exigia a inclusão explícita de apps privilegiados na lista de permissões nos arquivos XML de configuração do sistema no diretório /etc/permissions. No Android 9 e versões mais recentes, as permissões privilegiadas precisam estar na lista de permissões, senão o dispositivo não vai conseguir inicializar.

Para limitar a visibilidade da API interna e impedir que os apps acessem acidentalmente bibliotecas da plataforma, o Android 7.0 introduziu Namespaces para bibliotecas nativas. Isso separa as bibliotecas do sistema das bibliotecas do app, e os fabricantes de dispositivos podem adicionar as próprias bibliotecas nativas.

A partir do Android 10, os apps precisam ter permissões de assinatura e do usuário para acessar o conteúdo da tela de um dispositivo. Apps privilegiados que dependem da funcionalidade de captura silenciosa, como fazer uma captura de tela, precisam usar a classe MediaProjection.

O Android 15 exige que você inclua na lista de permissões as permissões de assinatura da plataforma que são solicitadas por apps não do sistema ou recém-solicitadas por atualizações aos apps do sistema nos arquivos XML de configuração do sistema no diretório /etc/permissions.

Transparência e privacidade

No Android 6.0 e versões mais recentes, o endereço MAC de fábrica de um dispositivo é protegido contra acesso por provedores de serviços Wi-Fi e analisadores de pacotes. Outras restrições do Android 10 limitam o acesso de apps aos identificadores de dispositivo (IDs) imutáveis, a menos que eles estejam na lista de permissões privilegiadas. A seção Conectividade tem uma discussão relacionada sobre identificadores de dispositivos, já que isso afeta as operadoras.

No Android 9 e versões anteriores, os usuários fazem escolhas persistentes ao conceder acesso à localização aos apps. A partir do Android 10, um recurso de permissões de localização tri-state oferece aos usuários três opções para permitir que o app acesse a localização de um dispositivo. Esses requisitos de permissão são aplicados a apps no Android 10, independente do SDK de destino.

Configurar permissões para outros recursos de transparência e privacidade a partir do Android 10

Configurações simplificadas

As configurações de permissões foram simplificadas para o Android 6.0 e versões mais recentes.

  • Os recursos de ambiente para serviços iniciados por init mantêm todos os aspectos da configuração do serviço em um único arquivo .rc. Ao definir recursos para serviços não iniciados por init, configure os recursos do sistema de arquivos usando fs_config.c.
  • O Android 7.x e versões anteriores estendem o mecanismo de IDs do Android (AIDs), usando um arquivo android_filesystem_config.h específico do dispositivo para especificar recursos do sistema de arquivos e/ou AIDs personalizados do fabricante do dispositivo. O Android 8.0 e versões mais recentes oferecem suporte a um novo método para ampliar os recursos do sistema de arquivos.
  • No Android 8.0, o processamento de comandos USB foi movido de scripts init específicos do dispositivo (uma substituição para camadas HAL) para um daemon USB nativo. A interface USB HAL precisa ser implementada em todos os dispositivos lançados no Android 8.0 e versões mais recentes.