Potresti elencare tutte le possibili directory in cui le app Android possono memorizzare dati, fornendo una descrizione del tipo di dati archiviati in ciascuna directory?
Commenti
- Vedi anche: Elenco di cartelle speciali per schede SD Android? / È possibile riorganizzare la scheda SD? Perché è un casino lì dentro / Quali directory posso rimuovere nella SD interna? / Controllare lo spazio di archiviazione utilizzato da unapp?
- Inoltre Android Folder Hiearchy / Dove vengono memorizzati i messaggi SMS nel file system? / Dove sono installate le applicazioni nel file system?
Risposta
Tutte le app (root o meno) hanno una directory dati predefinita, che è /data/data/<package_name>
. Per impostazione predefinita, i database delle app, le impostazioni e tutti gli altri dati vanno qui. Se unapp si aspetta che vengano archiviate enormi quantità di dati o per altri motivi vuole “essere piacevole per larchiviazione interna”, cè “una directory corrispondente sulla SDCard (Android/data/<package_name>
).
A parte questo, tutte le app possono memorizzare dati ovunque sulla SDCard, poiché non ci sono restrizioni e molte app lo fanno. Possono usare liberamente i nomi delle directory (e lo fanno di nuovo), che è ciò che spesso rende difficile decidere a cosa sia destinata tutta quella “spazzatura” sulla scheda e cosa può essere eliminata.
Tuttavia, come Tom ha indicato out , le app di root potrebbero memorizzare i propri dati quasi ovunque sul tuo dispositivo, di solito seguono le stesse regole delle altre app.
Puoi trovare una spiegazione generale della gerarchia delle directory di Android in la mia risposta qui . Per la tua domanda specifica potrei aggiungere qualche dettaglio in più su /data/data/<package_name>
(e la parte SD corrispondente):
-
databases/
: ecco i database dellapplicazione -
lib/
: librerie e helper per lapp -
files/
: altri file correlati -
shared_prefs/
: preferenze e impostazioni -
cache/
: beh, cache
Potrebbero esserci molte più directory in questa posizione o meno: tutto dipende dallapp. Nella propria “home directory” (e questo è ciò che è fondamentalmente, parlato in termini di Linux) possono posizionare i file dove vogliono. Di solito, questi file e directory sono accessibili solo dallapp stessa (e root, ovviamente) – diversi da quelli memorizzati sulla SDCard, che sono accessibili da tutte le app.
Commenti
- I commenti non sono per discussioni estese; questa conversazione ha stato spostato nella chat .
Risposta
Sono state apportate alcune modifiche importanti allo spazio di archiviazione in Android 4.4 (vedere Percorso di archiviazione di Android ). Quindi quanto segue è generalmente vero per Android 4.4+ e in particolare 6+.
Questo è tratto dalla mia risposta dettagliata a Come viene utilizzato lo spazio su disco sul dispositivo Android? . I file delle app vengono salvati (dal sistema e dallapp stessa) nella memoria interna ed esterna in diverse categorie.
DIRECTORY DESCRIPTION / API ===================================================================================== APP CODE ======== /data/app/<pkg>* (user apps installation directory) /data/app/<pkg>*/base.apk (original `.apk` file) /data/app/<pkg>*/lib/<arch>/*.so (shared libraries) /data/app/<pkg>*/oat/<arch>/base.[art|odex|vdex] (compiled executable code) /data/dalvik-cache/<arch>/*.[art|dex|oat|vdex] (compiled executable code, only for system apps) /data/misc/profiles/cur/<user_id>/<pkg>/primary.prof (ART profile) /data/misc/profiles/ref/<pkg>/primary.prof (ART profile) INTERNAL STORAGE ================ /data/user[_de]/<user_id>/<pkg> getDataDir /data/user[_de]/<user_id>/<pkg>/files getFilesDir /data/user[_de]/<user_id>/<pkg>/[code_]cache getCacheDir or getCodeCacheDir /data/user[_de]/<user_id>/<pkg>/databases getDatabasePath /data/user[_de]/<user_id>/<pkg>/no_backup getNoBackupFilesDir /data/user[_de]/<user_id>/<pkg>/shared_prefs getSharedPreferences EXTERNAL STORAGE ================ /storage/emulated/obb/<pkg>/*.obb (shared by multi-users, exposed in following view) /storage/emulated/<user_id>/Android/obb/<pkg>/*.<pkg>.obb getObbDirs /storage/emulated/<user_id>/Android/media/<pkg> getExternalMediaDirs /storage/emulated/<user_id>/Android/data/<pkg>/ /storage/emulated/<user_id>/Android/data/<pkg>/files getExternalFilesDirs /storage/emulated/<user_id>/Android/data/<pkg>/[code_]cache getExternalCacheDirs
-
Tutte le risposte precedenti i percorsi sulla memoria interna ed esterna (primaria e secondaria) sono directory private delle app accessibili alle rispettive app senza richiedere alcuna autorizzazione. Le app possono anche creare altre directory (non esplicitamente disponibili tramite API) nella loro memoria privata. Tutte queste directory appartenenti a unapp vengono eliminate quando lapp viene disinstallata.
-
Inoltre le app possono mettere i propri dati ovunque nella memoria esterna principale (inclusi alcuni directory standard e altre app” directory private) se
WRITE_EXTERNAL_STORAGE
viene concessa lautorizzazione (getExternalStorageDirectory
restituisce/storage/emulated/<user_id>
). Per larchiviazione esterna secondaria e larchiviazione rimovibile viene utilizzato SAF. Vedi i dettagli in Come salvare i file su una scheda SD esterna? .Tuttavia, in Android 10 la scrittura direttamente nellarchivio condiviso esterno principale è obsoleta (
getExternalStorageDirectory
egetExternalStoragePublicDirectory
sono non più disponibile) Le app devono utilizzare uno dei provider di contenuti integrati di Android; MediaStore (per file multimediali) o SAF (per qualsiasi altro tipo di file). -
/data
i percorsi possono essere sostituiti con/mnt/expand/[UUID]
quando si utilizza Adoptable Storage./storage/emulated
viene sostituito con/storage/[UUID]
quando si utilizza una memoria esterna secondaria (come la scheda SD). -
Per più utenti / profili
<user_id>
è diverso, il proprietario del dispositivo è sempre0
./data/user/0
è un collegamento simbolico a/data/data
per motivi storici. La memoria esterna secondaria è disponibile solo per il proprietario del dispositivo. -
La directory OBB è condivisa tra utenti / profili (fino ad Android 9) per risparmiare spazio. FUSE /
sdcardfs
mostra sempre/storage/emulated/obb
come/storage/emulated/<user_id>/Android/obb
. -
/data/user_de
è larchiviazione Device Encrypted sui dispositivi FBE che consente lesecuzione di determinate app allavvio senza richiedere le credenziali dellutente. -
/data/misc/profiles
sono utilizzati da ART per la compilazione guidata dal profilo del codice dellapp. -
La descrizione di ciascuna directory è in qualche modo evidente dai nomi, i dettagli possono essere visti nella documentazione API .
-
Le cache vengono cancellate dal sistema operativo quando lo spazio di archiviazione è insufficiente, mantenendo le app che superano la quota assegnata in cima.
-
App “private
files
le directory nella memoria esterna non vengono scansionate automaticamente da MediaScanner , ma le directorymedia
lo sono. -
Le cache e le directory
no_backup
non vengono sottoposte a backup nel cloud. Consulta la documentazione ufficiale .
Risposta
La risposta alla tua domanda che stai facendo è troppo grande. Posso, tuttavia, darti una risposta di base che copre le basi.
Esistono due tipi di app:
Root e non root .
Root le app possono sostanzialmente archiviare / modificare i file dove vogliono.
Le app non root possono archiviare / modificare i file solo qui: /sdcard/
e in ogni cartella cosa viene dopo.
Per lo più, le app installate si memorizzano da sole in /sdcard/Android/data
o /sdcard/Android/obb
.
Alcune le app memorizzano i propri salvataggi / file di dati di configurazione su /sdcard/APPNAME/
o solo su /sdcard/
Per poter utilizzare App root , dovrai aver effettuato il root del tuo dispositivo Android e aver dato il permesso da una delle app per superutente.