Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Archiviazione tradizionale

Icona HAL di archiviazione esterna Android

Android supporta dispositivi con archiviazione tradizionale, definita come un filesystem senza distinzione tra maiuscole e minuscole con classi e modalità di autorizzazione POSIX immutabili. La nozione di archiviazione tradizionale comprende archiviazione emulata e portatile. L'archiviazione portatile è definita come qualsiasi archivio esterno non adottato dal sistema e quindi non formattato e crittografato o legato a un dispositivo specifico. Poiché l'archiviazione esterna tradizionale offre una protezione minima per i dati archiviati, il codice di sistema non deve archiviare dati sensibili su un'archiviazione esterna. In particolare, i file di configurazione e di registro devono essere archiviati solo nella memoria interna dove possono essere protetti in modo efficace.

Memoria esterna multiutente

A partire da Android 4.2, i dispositivi possono supportare più utenti e l'archiviazione esterna deve soddisfare i seguenti vincoli:

  • Ogni utente deve disporre della propria memoria esterna primaria isolata e non deve avere accesso alla memoria esterna primaria di altri utenti.
  • Il percorso /sdcard deve risolversi nella memoria esterna primaria specifica dell'utente corretta in base all'utente con cui viene eseguito un processo.
  • L'archiviazione per file OBB di grandi dimensioni nella directory Android/obb può essere condivisa tra più utenti come ottimizzazione.
  • L'archiviazione esterna secondaria non deve essere scrivibile dalle app, tranne che nelle directory specifiche del pacchetto, come consentito dalle autorizzazioni sintetizzate.

L'implementazione della piattaforma predefinita di questa funzionalità sfrutta gli spazi dei nomi del kernel Linux per creare tabelle di montaggio isolate per ogni processo Zygote-fork, quindi utilizza i montaggi bind per offrire la corretta memoria esterna primaria specifica dell'utente in quello spazio dei nomi privato.

All'avvio, il sistema monta un singolo demone FUSE di archiviazione esterna emulato su EMULATED_STORAGE_SOURCE , che è nascosto dalle app. Dopo i fork di Zygote, il binding monta la sottodirectory specifica dell'utente appropriata dal daemon FUSE a EMULATED_STORAGE_TARGET modo che i percorsi di archiviazione esterni vengano risolti correttamente per l'app. Poiché un'app non dispone di punti di montaggio accessibili per l'archiviazione di altri utenti, possono accedere solo all'archiviazione per l'utente con cui è stata avviata.

Questa implementazione utilizza anche la funzionalità del kernel della sottostruttura condivisa per propagare gli eventi di montaggio dallo spazio dei nomi radice predefinito negli spazi dei nomi delle app, il che garantisce che funzionalità come i contenitori ASEC e il montaggio OBB continuino a funzionare correttamente. Lo fa montando rootfs come condiviso e quindi rimontandolo come slave dopo aver creato ogni spazio dei nomi Zygote.

Più dispositivi di archiviazione esterni

A partire da Android 4.4, più dispositivi di archiviazione esterni vengono mostrati agli sviluppatori tramite Context.getExternalFilesDirs() , Context.getExternalCacheDirs() e Context.getObbDirs() .

I dispositivi di archiviazione esterni emersi attraverso queste API devono essere una parte semipermanente del dispositivo (come uno slot per schede SD in un vano batteria). Gli sviluppatori si aspettano che i dati archiviati in queste posizioni siano disponibili per lunghi periodi di tempo. Per questo motivo, i dispositivi di archiviazione transitori (come le unità di archiviazione di massa USB) non dovrebbero essere visualizzati tramite queste API.

L'autorizzazione WRITE_EXTERNAL_STORAGE deve concedere solo l'accesso in scrittura alla memoria esterna primaria su un dispositivo. Le app non devono essere autorizzate a scrivere su dispositivi di archiviazione esterni secondari, tranne nelle directory specifiche del pacchetto, come consentito dalle autorizzazioni sintetizzate. La limitazione delle scritture in questo modo garantisce che il sistema possa pulire i file quando le applicazioni vengono disinstallate.

Supporto multimediale USB

Android 6.0 supporta dispositivi di archiviazione portatili che vengono collegati al dispositivo solo per un breve periodo di tempo, come le unità flash USB. Quando un utente inserisce un nuovo dispositivo portatile, la piattaforma mostra una notifica per consentire loro di copiare o gestire i contenuti di quel dispositivo.

In Android 6.0, qualsiasi dispositivo non adottato è considerato portatile. Poiché l'archiviazione portatile è connessa solo per un breve periodo, la piattaforma evita operazioni pesanti come la scansione dei supporti. Le app di terze parti devono passare attraverso lo Storage Access Framework per interagire con i file sull'archiviazione portatile; l'accesso diretto è esplicitamente bloccato per motivi di privacy e sicurezza.