Nel corso del tempo, Android si è evoluto fino a supportare un'ampia gamma di funzionalità e tipi di dispositivi di archiviazione. Tutte le versioni di Android supportano i dispositivi con spazio di archiviazione tradizionale, che include lo spazio di archiviazione portatile ed emulato. L'archiviazione portatile può essere fornita da supporti fisici, come una scheda SD o un'unità USB, per il trasferimento temporaneo di dati/archiviazione di file. Il supporto fisico può rimanere con il dispositivo per un periodo di tempo prolungato, ma non è vincolato al dispositivo e può essere rimosso. Le schede SD sono disponibili come memoria portatile da Android 1.0; Android 6.0 ha aggiunto il supporto USB. Lo spazio di archiviazione emulato viene fornito esponendo una parte dello spazio di archiviazione interno tramite un livello di emulazione ed è disponibile da Android 3.0.
A partire da Android 6.0, Android supporta lo spazio di archiviazione adottabile, fornito da supporti fisici, come una scheda SD o un dispositivo USB, che è criptato e formattato in modo da funzionare come una memoria interna. Lo spazio di archiviazione adottabile può memorizzare tutti i tipi di dati delle applicazioni.
Autorizzazioni
L'accesso allo spazio di archiviazione esterno è protetto da varie autorizzazioni Android.
A partire da Android 1.0, l'accesso in scrittura è protetto con l'autorizzazioneWRITE_EXTERNAL_STORAGE
. A partire da Android 4.1, l'accesso in lettura
è protetto con l'autorizzazione READ_EXTERNAL_STORAGE
.
A partire da Android 4.4, il proprietario, il gruppo e le modalità dei file su dispositivi di archiviazione esterni vengono sintetizzati in base alla struttura delle directory. In questo modo, le app possono gestire le directory specifiche del pacchetto sullo spazio di archiviazione esterno senza dover disporre dell'autorizzazione WRITE_EXTERNAL_STORAGE
generica.
Ad esempio, l'app con nome di pacchetto com.example.foo
ora può
accedere liberamente a Android/data/com.example.foo/
su dispositivi di archiviazione esterni
senza autorizzazioni. Queste autorizzazioni sintetizzate vengono ottenute wrapping i dispositivi di archiviazione non elaborati in un demone FUSE.
A partire da Android 10, le app che hanno come target Android 9 e versioni precedenti utilizzano per impostazione predefinita lo spazio di archiviazione precedente e possono attivare lo spazio di archiviazione isolato.
Le app che hanno come target Android 10 e utilizzano per impostazione predefinita lo spazio di archiviazione isolato possono disattivarlo temporaneamente. Utilizza l'attributo manifest
requestLegacyExternalStorage
,
che controlla il modello di archiviazione, per modificare lo stato predefinito.
Poiché entrambe le autorizzazioni READ_EXTERNAL_STORAGE
e
WRITE_EXTERNAL_STORAGE
sono
soggette a limitazioni soft, se l'installatore non ha inserito l'app nella lista consentita,
l'autorizzazione controlla l'accesso solo alle raccolte acustiche e visive
e non alla scheda SD. Ciò vale anche se l'app richiede lo spazio di archiviazione precedente. Per ulteriori informazioni sulle limitazioni rigide e su quelle flessibili, consulta
Limitazioni rigide e flessibili in Android 10.
Se l'utente che ha eseguito l'installazione ha autorizzato l'autorizzazione, un'app eseguita in modalità legacy riceve il comportamento di autorizzazione non isolata. L'autorizzazione controlla l'accesso alla scheda SD e alle raccolte visive e audio. Questo accade quando l'app ha come target Android 9 o versioni precedenti e non attiva lo spazio di archiviazione isolato oppure ha come target Android 10 e lo disattiva.
Lo stato della lista consentita può essere specificato solo al momento dell'installazione e non può essere modificato finché l'app non è stata installata.
Per ulteriori informazioni sull'impostazione dell'autorizzazione READ_EXTERNAL_STORAGE
, consulta
setWhitelistedRestrictedPermissions()
nella classe
PackageInstaller.SessionParams.
Android 13 introduce autorizzazioni multimediali granulari per supportare le app che accedono ai file multimediali creati da altre app. Le app devono richiedere una o più delle autorizzazioni per i contenuti multimediali granulari elencate in
Autorizzazioni per i contenuti multimediali granulari anziché l'autorizzazione READ_EXTERNAL_STORAGE
.
Android 14 si basa sulle autorizzazioni multimediali granulari per consentire agli utenti di grant accesso parziale alla loro raccolta multimediale visiva quando le app richiedono autorizzazioni multimediali. Per ulteriori informazioni, vedi Concedere l'accesso parziale a foto e video.
Autorizzazioni runtime
Android 6.0 introduce un nuovo modello di
autorizzazioni di runtime in cui le app richiedono funzionalità quando necessario in fase di runtime. Poiché il nuovo modello include le autorizzazioni READ/WRITE_EXTERNAL_STORAGE
, la piattaforma deve concedere dinamicamente l'accesso allo spazio di archiviazione senza arrestare o riavviare le app già in esecuzione. A tale scopo, mantiene tre visualizzazioni distinte di tutti i dispositivi di archiviazione montati:
/mnt/runtime/default
viene mostrato alle app senza autorizzazioni di archiviazione speciali e allo spazio dei nomi principale in cui si trovanoadbd
e altri componenti di sistema./mnt/runtime/read
viene mostrato alle app conREAD_EXTERNAL_STORAGE
(impostaLEGACY_STORAGE
per Android 10)/mnt/runtime/write
viene mostrato alle app conWRITE_EXTERNAL_STORAGE
Al momento del fork di Zygote, creiamo uno spazio dei nomi mount per ogni app in esecuzione e
vincono la visualizzazione iniziale appropriata in posizione. In seguito, quando vengono concesse le autorizzazioni di runtime, vold
passa allo spazio dei nomi di montaggio delle app già in esecuzione e esegue il montaggio della visualizzazione di cui è stato eseguito l'upgrade. Tieni presente che il downgrade delle autorizzazioni comporta sempre l'interruzione dell'app.
La funzionalità setns()
utilizzata per implementare questa funzionalità richiede almeno Linux 3.8, ma le patch sono state backportate correttamente a Linux 3.4. Il test CTS PermissionsHostTest
può essere utilizzato per verificare il corretto comportamento del kernel.