O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Armazenamento Tradicional

Ícone HAL de armazenamento externo Android

O Android suporta dispositivos com armazenamento tradicional, definido como um sistema de arquivos que não diferencia maiúsculas de minúsculas, com classes e modos de permissão POSIX imutáveis. A noção de armazenamento tradicional abrange armazenamento emulado e portátil. Armazenamento portátil é definido como qualquer armazenamento externo que não seja adotado pelo sistema e, portanto, não seja formatado e criptografado ou vinculado a um dispositivo específico. Como o armazenamento externo tradicional oferece proteção mínima aos dados armazenados, o código do sistema não deve armazenar dados confidenciais no armazenamento externo. Especificamente, os arquivos de configuração e log devem ser armazenados apenas no armazenamento interno, onde possam ser efetivamente protegidos.

Armazenamento externo multiusuário

A partir do Android 4.2, os dispositivos podem oferecer suporte a vários usuários e o armazenamento externo deve atender às seguintes restrições:

  • Cada usuário deve ter seu próprio armazenamento externo primário isolado e não deve ter acesso ao armazenamento externo primário de outros usuários.
  • O caminho /sdcard deve resolver para o armazenamento externo primário específico do usuário correto, com base no usuário em que o processo está sendo executado.
  • O armazenamento de arquivos OBB grandes no diretório Android/obb pode ser compartilhado entre vários usuários como uma otimização.
  • O armazenamento externo secundário não deve ser gravável pelos aplicativos, exceto nos diretórios específicos do pacote, conforme permitido pelas permissões sintetizadas.

A implementação padrão da plataforma desse recurso utiliza os namespaces do kernel do Linux para criar tabelas de montagem isoladas para cada processo bifurcado pelo Zygote e, em seguida, usa montagens de ligação para oferecer o armazenamento externo primário específico do usuário correto para esse namespace privado.

Na inicialização, o sistema monta um daemon FUSE de armazenamento externo emulado em EMULATED_STORAGE_SOURCE , oculto dos aplicativos. Após os garfos do Zygote, ele liga o subdiretório específico do usuário apropriado do daemon FUSE para EMULATED_STORAGE_TARGET para que os caminhos de armazenamento externo sejam resolvidos corretamente para o aplicativo. Como um aplicativo não possui pontos de montagem acessíveis para o armazenamento de outros usuários, eles só podem acessar o armazenamento para o usuário em que foram iniciados.

Essa implementação também usa o recurso de subárvore compartilhado para propagar eventos de montagem do namespace raiz padrão para namespaces de aplicativos, o que garante que recursos como contêineres ASEC e montagem OBB continuem funcionando corretamente. Isso é feito montando os rootfs como compartilhados e remontando-os como escravos após a criação de cada namespace do Zygote.

Vários dispositivos de armazenamento externo

A partir do Android 4.4, vários dispositivos de armazenamento externo são apresentados aos desenvolvedores por meio de Context.getExternalFilesDirs() , Context.getExternalCacheDirs() e Context.getObbDirs() .

Os dispositivos de armazenamento externo que aparecem nessas APIs devem ser uma parte semi-permanente do dispositivo (como um slot para cartão SD no compartimento da bateria). Os desenvolvedores esperam que os dados armazenados nesses locais estejam disponíveis por longos períodos de tempo. Por esse motivo, os dispositivos de armazenamento temporário (como unidades de armazenamento em massa USB) não devem ser usados ​​nessas APIs.

A permissão WRITE_EXTERNAL_STORAGE deve conceder apenas acesso de gravação ao armazenamento externo primário em um dispositivo. Os aplicativos não devem ter permissão para gravar em dispositivos de armazenamento externos secundários, exceto nos diretórios específicos de pacotes, conforme permitido pelas permissões sintetizadas. A restrição de gravações dessa maneira garante que o sistema possa limpar arquivos quando os aplicativos forem desinstalados.

Suporte de mídia USB

O Android 6.0 suporta dispositivos de armazenamento portáteis que são conectados apenas ao dispositivo por um curto período de tempo, como unidades flash USB. Quando um usuário insere um novo dispositivo portátil, a plataforma mostra uma notificação para permitir que ele copie ou gerencie o conteúdo desse dispositivo.

No Android 6.0, qualquer dispositivo que não seja adotado é considerado portátil. Como o armazenamento portátil é conectado por pouco tempo, a plataforma evita operações pesadas, como a digitalização de mídia. Aplicativos de terceiros devem passar pelo Storage Access Framework para interagir com arquivos no armazenamento portátil; o acesso direto é explicitamente bloqueado por razões de privacidade e segurança.