
Android supporta i dispositivi con archiviazione tradizionale, ovvero un filesystem insensibile alle maiuscole con modalità e classi di autorizzazione POSIX immutabili. Il concetto di archiviazione tradizionale comprende l'archiviazione virtualizzata e portatile. Per archiviazione portatile si intende qualsiasi spazio di archiviazione esterno non adottato dal sistema e quindi non formattato e criptato o associato a un dispositivo specifico. Poiché l'archiviazione esterna tradizionale offre una protezione minima per i dati archiviati, il codice di sistema non dovrebbe archiviare i dati sensibili su uno spazio di archiviazione esterno. Nello specifico, i file di configurazione e di log devono essere archiviati solo nello spazio di archiviazione interno, dove possono essere protetti efficacemente.
Spazio di archiviazione esterno multiutente
A partire da Android 4.2, i dispositivi possono supportare più utenti e lo spazio di archiviazione esterno deve soddisfare i seguenti vincoli:
- Ogni utente deve avere la propria archiviazione esterna principale isolata e non deve avere accesso all'archiviazione esterna principale di altri utenti.
- Il percorso
/sdcard
deve risolvere allo spazio di archiviazione esterno primario specifico dell'utente in base all'utente con cui viene eseguito un processo. - Lo spazio di archiviazione per i file OBB di grandi dimensioni nella directory
Android/obb
può essere condiviso tra più utenti come ottimizzazione. - Lo spazio di archiviazione esterno secondario non deve essere scrivibile dalle app, tranne che nelle directory specifiche del pacchetto, come consentito dalle autorizzazioni sintetizzate.
L'implementazione predefinita della piattaforma di questa funzionalità sfrutta gli spazi dei nomi del kernel Linux per creare tabelle di montaggio isolate per ogni processo derivato da Zygote e poi utilizza i mount di unione per offrire lo spazio di archiviazione esterno principale specifico per l'utente corretto in questo spazio dei nomi privato.
All'avvio, il sistema monta un singolo daemon FUSE di archiviazione esterno simulato
in EMULATED_STORAGE_SOURCE
, che è nascosto alle app. Dopo
la forcella di Zygote, esegue il mount della sottodirectory specifica per l'utente appropriata
da sotto il demone FUSE a EMULATED_STORAGE_TARGET
in modo che
i percorsi dello spazio di archiviazione esterno vengano risolti correttamente per l'app. Poiché un'app non ha punti di montaggio accessibili per lo spazio di archiviazione di altri utenti, può accedere solo allo spazio di archiviazione per l'utente con cui è stata avviata.
Questa implementazione utilizza anche la funzionalità del kernel del sottoalbero condiviso per propagare gli eventi di montaggio dallo spazio dei nomi principale predefinito agli spazi dei nomi delle app, il che garantisce che funzionalità come i contenitori ASEC e il montaggio OBB continuino a funzionare correttamente. A tale scopo, monta il file system di root come condiviso e poi lo monta come slave dopo la creazione di 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()
eContext.getObbDirs()
.
L'autorizzazione WRITE_EXTERNAL_STORAGE
deve concedere soltanto accesso in scrittura alla memoria esterna principale di un dispositivo. Alle app non deve essere consentito scrivere su dispositivi di archiviazione esterni secondari, tranne nelle directory specifiche del pacchetto, come consentito dalle autorizzazioni sintetizzate. Limitando le scritture in questo modo, il sistema può eliminare i file quando le applicazioni vengono disinstallate.
Supporto dei contenuti multimediali USB
Android 6.0 supporta i dispositivi di archiviazione portatili connessi al dispositivo solo per brevi periodi di tempo, come le chiavette USB. Quando un utente inserisce un nuovo dispositivo portatile, la piattaforma mostra una notifica che gli consente di copiare o gestire i contenuti del dispositivo.
In Android 6.0, qualsiasi dispositivo non adottato è considerato portatile. Poiché lo spazio di archiviazione portatile è connesso solo per poco tempo, la piattaforma evita operazioni pesanti come la scansione dei contenuti multimediali. Le app di terze parti devono passare attraverso Storage Access Framework per interagire con i file sullo spazio di archiviazione portatile. L'accesso diretto è esplicitamente bloccato per motivi di privacy e sicurezza.