Alcune nozioni di base sul sistema di archiviazione Android

Conoscere nel dettaglio i percorsi delle Directory di memorizzazione (nuove e vecchie versioni di Android) ci evita di cadere in errori di memorizzazione quali NO SUCH FILE OR DIRECTORY oppure ERROR 802 e ERROR 908.

Premessa

Per favore, leggi: Differenza tra Versione del Sistema Operativo e API.

Nei sistemi Android, sono presenti una → Memoria interna e una → Memoria esterna.

1. Memorizzazione Interna

È possibile accedere alla memoria interna solo con un dispositivo rooted.

1.1 Il pacchetto dell’app è salvato in

/data/data/<packageName>/

Per poter eseguire il debug della tua app, AI2 salva le risorse per → Companion sui dispositivi con

  • Android ≥ 10 (API ≥ 29):

/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/assets/

  • Android < 10 :

/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/AppInventor/assets/

1.2. La directory privata è

/data/user/0/<packageName>/files/

Questa directory privata può essere utilizzata con il componente File per salvare/leggere il testo (impostando il percorso senza barra). È possibile accedervi solo dalla tua app e viene rimosso automaticamente quando l’app viene disinstallata.

2. Memoria esterna

La directory principale della memoria esterna è:

/storage/emulated/0/ oppure
/sdcard/             oppure
file:///mnt/sdcard/  oppure
file:///storage/emulated/0/

Per accedere alla memoria esterna, è richiesta l’autorizzazione READ_/WRITE_EXTERNAL_STORAGE.

2.1. ASD – La Directory specifica per l’app

Inoltre, potrebbe esserci una directory specifica dell’app (ASD application specific directory) che può essere creata con:

Nota: l’ASD viene creato automaticamente sui dispositivi con API ≥ 29.

Il percorso dell’ASD è:

/storage/emulated/0/Android/data/<packageName>/files/

che si trova nella memoria esterna (privata), ma non richiede le autorizzazioni READ_ / WRITE_EXTERNAL_STORAGE. L’ASD è accessibile solo dalla tua app e viene automaticamente rimosso quando l’app viene disinstallata.

Vedi il developer reference: https://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE

Un esempio di ASD

Per AI2 (dalla versione nb188) questo è tutto ciò che serve per salvare un file di testo nell’ASD (o nel mio esempio in una sua sottocartella) su tutte le versioni di Android:

2.2. Scheda SD esterna (rimovibile/micro)

Potrebbe esserci anche un’altra memoria esterna: una scheda SD (micro) rimovibile, ad esempio:

/storage/82C3-E96C/

che può essere solo letto (su dispositivi con Android ≥ 4.4 / KitKat, API 19).

Nota: La directory principale della memoria esterna

/storage/emulated/0/

viene visualizzata sul dispositivo come Memoria interna (purtroppo questo è un po’ ambiguo).

Per un confronto tra ambienti di programmazione, leggi la pagina: Storage components.

Quando si targhettizza dispositivi Android ≥ 10

(Ricordo di leggere la proprietà DefaultFileScope del componente Screen)

https://developer.android.com/training/data-storage
Scoped storage

Per offrire agli utenti un maggiore controllo sui propri file e per limitare l’ingombro dei file, le app destinate ad Android 10 (livello API 29) e versioni successive, hanno accesso per impostazione predefinita con ambito all’archiviazione esterna, o archiviazione con ambito. Tali App hanno accesso solo alla directory specifica dell’app sull’archiviazione esterna, nonché a tipi specifici di supporti creati dall’app.

https://developer.android.com/training/data-storage/use-cases

 

Ulteriori informazioni

Vorrei introdurre questi tre termini fondamentali:

Percorso assoluto │ percorso relativo │ percorso completo

1. Questo percorso è un → percorso assoluto:
/storage/emulated/0/Android/data/packageName/files/

2. Questo percorso è un → percorso relativo:
/Android/data/packageName/files

Alcuni componenti necessitano di un percorso relativo e altri di un percorso assoluto.

3. Inoltre, alcuni componenti o versioni di Android richiedono un → percorso completo:
file:///storage/emulated/0/Android/data/packageName/files/

Consiglio questi termini per distinguere i percorsi, ad esempio:

percorso relativo: /Download
percorso assoluto: /storage/emulated/0/Download
percorso completo: file:///storage/emulated/0/Download

Riferimenti e Aggiornamenti


Traduzione dall’articolo Tutorial e Guide> FAQ> corretto al 12/09/2021

Link: https://community.appinventor.mit.edu/t/some-basics-on-android-storage-system/21556