Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Conservazione

Icona HAL di archiviazione esterna Android

Android si è evoluto nel tempo per supportare un'ampia varietà di tipi e funzionalità di dispositivi di archiviazione. Tutte le versioni di dispositivi di supporto Android con archiviazione tradizionale , che include archiviazione portatile ed emulata. L' archiviazione portatile può essere fornita da supporti fisici, come una scheda SD o USB, per il trasferimento temporaneo di dati / archiviazione di file. Il supporto fisico può rimanere con il dispositivo per un lungo periodo di tempo, ma non è legato 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. La memoria emulata viene fornita esponendo una parte della memoria interna attraverso un livello di emulazione ed è disponibile da Android 3.0.

A partire da Android 6.0, Android supporta l' archiviazione adottabile , fornita da supporti fisici, come una scheda SD o USB, crittografata e formattata per comportarsi come memoria interna. L'archiviazione adottabile può archiviare tutti i tipi di dati dell'applicazione.

permessi

L'accesso alla memoria esterna è protetto da varie autorizzazioni Android. A partire da Android 1.0, l'accesso in scrittura è protetto con l'autorizzazione WRITE_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 sono ora sintetizzati in base alla struttura della directory. Ciò consente alle app di gestire le directory specifiche del pacchetto su memoria esterna senza richiedere l'autorizzazione WRITE_EXTERNAL_STORAGE . Ad esempio, l'app con il nome del pacchetto com.example.foo ora può accedere liberamente ad Android/data/com.example.foo/ su dispositivi di archiviazione esterni senza autorizzazioni. Queste autorizzazioni sintetizzate sono ottenute avvolgendo i dispositivi di archiviazione grezzi in un demone FUSE.

A partire da Android 10, le app che hanno come target Android 9 e un valore predefinito inferiore allo storage legacy e possono optare per lo storage isolato. Le app destinate ad Android 10 e predefinite per l'archiviazione isolata possono temporaneamente disattivarle . Utilizzare 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 limitate, se il programma di installazione non ha inserito nella WRITE_EXTERNAL_STORAGE bianca l'app, l'autorizzazione controlla l'accesso solo alle raccolte uditive e visive, senza accesso alla scheda SD. Questo vale anche se l'app richiede l'archiviazione legacy. Per ulteriori informazioni sia sulle restrizioni rigide che sulle restrizioni software, vedi Restrizioni hardware e software in Android 10 .

Se il programma di installazione ha autorizzato l'autorizzazione, un'app in esecuzione in modalità legacy ottiene il comportamento dell'autorizzazione non isolata. L'autorizzazione controlla l'accesso alla scheda SD e le raccolte uditive e visive. Ciò accade quando l'app ha come target Android 9 o versioni precedenti e non accede allo spazio di archiviazione isolato oppure se ha come target Android 10 e si disattiva.

Lo stato della whitelist può essere specificato solo al momento dell'installazione e non può essere modificato fino a quando l'app non è stata installata.

Per ulteriori informazioni sull'impostazione dell'autorizzazione READ_EXTERNAL_STORAGE , vedere setWhitelistedRestrictedPermissions() nella classe PackageInstaller.SessionParams .

Autorizzazioni di 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 in modo dinamico l'accesso all'archiviazione senza READ/WRITE_EXTERNAL_STORAGE o riavviare le app già in esecuzione. Lo fa mantenendo tre viste 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 radice dove adbd e altri componenti di sistema.
  • /mnt/runtime/read viene mostrato alle app con READ_EXTERNAL_STORAGE ( READ_EXTERNAL_STORAGE LEGACY_STORAGE per Android 10)
  • /mnt/runtime/write viene mostrato alle app con WRITE_EXTERNAL_STORAGE

Al momento del fork di Zygote, creiamo uno spazio dei nomi di mount per ogni app in esecuzione e associamo in posizione la vista iniziale appropriata. Successivamente, quando vengono concesse le autorizzazioni di runtime, vold salta nello spazio dei nomi di mount delle app già in esecuzione e il binding monta la vista aggiornata in posizione. Tieni presente che i downgrade delle autorizzazioni comportano sempre la morte dell'app.

La funzionalità setns() utilizzata per implementare questa funzione richiede almeno Linux 3.8, ma le patch sono state portate con successo su Linux 3.4. Il test CTS PermissionsHostTest può essere utilizzato per verificare il comportamento corretto del kernel.