O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Armazenar

Ícone HAL de armazenamento externo do Android

O Android evoluiu ao longo do tempo para oferecer suporte a uma ampla variedade de tipos e recursos de dispositivos de armazenamento. Todas as versões de dispositivos de suporte Android com armazenamento tradicional , que inclui armazenamento portátil e emulado. Armazenamento portátil pode ser fornecida por meios físicos, como um cartão SD ou USB, que é para armazenamento de dados / transferência de arquivo temporário. A mídia física pode permanecer com o dispositivo por um longo período de tempo, mas não está ligada ao dispositivo e pode ser removida. Os cartões SD estão disponíveis como armazenamento portátil desde o Android 1.0; Android 6.0 adicionou suporte a USB. Armazenamento emulado é fornecida por exposição de uma porção de armazenamento interno através de uma camada de emulação e está disponível desde Android 3.0.

A partir de Android 6.0, o Android suporta armazenamento adoptáveis , que é fornecido por meios físicos, como um cartão SD ou USB, que é criptografada e formatado para se comportar como armazenamento interno. O armazenamento adotável pode armazenar todos os tipos de dados de aplicativos.

Permissões

O acesso ao armazenamento externo é protegido por várias permissões do Android. A partir de Android 1.0, o acesso de escrita é protegido com o WRITE_EXTERNAL_STORAGE permissão. A partir de Android 4.1, o acesso de leitura é protegido com o READ_EXTERNAL_STORAGE permissão.

A partir do Android 4.4, o proprietário, grupo e modos de arquivos em dispositivos de armazenamento externos agora são sintetizados com base na estrutura de diretório. Isso permite que aplicativos para gerenciar seus diretórios específicos do pacote no armazenamento externo sem exigir que detêm a ampla WRITE_EXTERNAL_STORAGE permissão. Por exemplo, o aplicativo com o nome do pacote com.example.foo agora podem acessar livremente Android/data/com.example.foo/ em dispositivos de armazenamento externos sem permissões. Essas permissões sintetizadas são realizadas envolvendo dispositivos de armazenamento bruto em um daemon FUSE.

A partir de Android 10, os aplicativos que a meta Android 9 e padrão inferior para armazenamento de legado, e pode optar por armazenamento isolado. Aplicativos que alvo Android 10 e padrão para armazenamento isolado pode temporariamente optar por ele. Use o manifesto atributo requestLegacyExternalStorage , que controla o modelo de armazenamento, para alterar o estado padrão.

Uma vez que ambos READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE permissões são soft-restrito, se o instalador não fez whitelist do aplicativo, o acesso controles de permissão apenas para as coleções auditivas e visuais, sem acesso ao cartão SD. Isso se aplica mesmo se o aplicativo solicitar armazenamento legado. Para mais informações sobre ambas as restrições duras e restrições virtuais, consulte rígido e restrições macios no Android 10 .

Se o instalador colocou a permissão na lista de permissões, um aplicativo em execução no modo legado obtém o comportamento de permissão não isolado. A permissão controla o acesso do cartão SD e as coleções auditivas e visuais. Isso acontece quando o aplicativo é direcionado ao Android 9 ou inferior e não ativa o armazenamento isolado, ou é direcionado ao Android 10 e desativa.

O estado da lista de permissões pode ser especificado apenas no momento da instalação e não pode ser alterado até que o aplicativo seja instalado.

Para mais informações sobre como definir o READ_EXTERNAL_STORAGE permissão, consulte setWhitelistedRestrictedPermissions() na PackageInstaller.SessionParams classe.

Permissões de tempo de execução

Android 6.0 introduz um novo permissões de tempo de execução modelo onde aplicativos solicitar capacidades quando necessário em tempo de execução. Porque o novo modelo inclui as READ/WRITE_EXTERNAL_STORAGE permissões, as necessidades de plataforma para acesso de armazenamento concessão dinamicamente sem matar ou reiniciar os aplicativos já em execução. Ele faz isso mantendo três visualizações distintas de todos os dispositivos de armazenamento montados:

  • /mnt/runtime/default é mostrado para aplicativos sem permissões especiais de armazenamento, e ao namespace raiz onde adbd e outros componentes do sistema viver.
  • /mnt/runtime/read é mostrado para aplicações com READ_EXTERNAL_STORAGE (Conjunto LEGACY_STORAGE para Android 10)
  • /mnt/runtime/write é mostrado para aplicativos com WRITE_EXTERNAL_STORAGE

No momento da bifurcação do Zygote, criamos um namespace de montagem para cada aplicativo em execução e vinculamos a montagem da visualização inicial apropriada no lugar. Mais tarde, quando as permissões de tempo de execução são concedidos, vold salta para o montar namespace de já em execução aplicativos e montagens vincular a vista atualizado no lugar. Observe que downgrades de permissão sempre resultam no encerramento do aplicativo.

O setns() funcionalidade usado para implementar esse recurso requer pelo menos Linux 3.8, mas patches foram portadas com sucesso para o Linux 3.4. O PermissionsHostTest teste CTS pode ser usado para verificar o comportamento do kernel correto.