Ați putea enumera toate directoarele posibile în care aplicațiile Android pot stoca date, oferind descriere ce fel de date sunt stocate în fiecare director?
Comentarii
- Consultați și: Lista folderelor speciale pentru carduri SD Android? / Este posibilă reorganizarea cardului SD? Deoarece este o mizerie acolo / Ce directoare pot elimina în SD intern? / Verificați spațiul de stocare pe care îl folosește o aplicație?
- Plus Android Folder Hiearchy / Unde sunt stocate mesajele SMS din sistemul de fișiere? / Unde sunt instalate aplicațiile din sistemul de fișiere?
Răspuns
Toate aplicațiile (rădăcină sau nu) au un director de date implicit, care este /data/data/<package_name>
. În mod implicit, bazele de date, setările și toate celelalte date ale aplicațiilor merg aici. Dacă o aplicație se așteaptă să fie stocate cantități uriașe de date sau, din alte motive, dorește „a fi plăcută la stocarea internă”, există „un director corespunzător pe cardul SDC (Android/data/<package_name>
).
În afară de aceasta, toate aplicațiile pot stoca date oriunde pe cardul SDC, deoarece nu există restricții – și multe aplicații fac acest lucru. Ele pot utiliza numele de directoare în mod liber (și o fac din nou), ceea ce este adesea face dificil să se decidă pentru ce este destinată acea „junk” de pe card și ce poate fi șters.
Deși, așa cum a subliniat Tom , aplicațiile rădăcină își pot stoca datele aproape oriunde pe dispozitivul dvs., de obicei respectă aceleași reguli ca și alte aplicații.
Puteți găsi o explicație generală a ierarhiei directorului Android în răspunsul meu aici . Pentru întrebarea dvs. specifică, aș putea adăuga câteva detalii suplimentare pe /data/data/<package_name>
(și partea SD corespunzătoare):
-
databases/
: aici mergeți bazele de date ale aplicației -
lib/
: biblioteci și ajutoare pentru aplicație -
files/
: alte fișiere conexe -
shared_prefs/
: preferințe și setări -
cache/
: bine, cache-uri
Ar putea exista mai multe directoare în acest loc sau mai puține – totul depinde de aplicație. În propriul „director de acasă” (și asta este ceea ce este practic, vorbit despre Linux), ei pot plasa fișiere acolo unde doresc. De obicei, aceste fișiere și directoare sunt accesibile numai de către aplicația însăși (și root, desigur) – altele decât cele stocate pe cardul SDC, care sunt accesibile de către toate aplicațiile.
Comentarii
- Comentariile nu sunt pentru discuții extinse; această conversație are fost mutat în chat .
Răspuns
Au avut loc unele modificări majore în spațiul de stocare în Android 4.4 (consultați Journey Storage Android ). Deci, următoarele sunt în general valabile pentru Android 4.4+ și în special pentru 6+.
Aceasta este din răspunsul meu detaliat la Cum este utilizat spațiul pe disc pe dispozitivul Android? . Fișierele „aplicațiilor” sunt salvate (de către sistem și aplicație) în spațiul de stocare intern și extern în diferite categorii.
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
-
Toate cele de mai sus căile de stocare internă și externă (primară și secundară) sunt directoare private ale aplicației care sunt accesibile pentru aplicația respectivă fără a solicita nicio permisiune. Aplicațiile pot crea, de asemenea, alte directoare (care nu sunt disponibile în mod explicit prin API) în spațiul lor de stocare privat. Toate aceste directoare aparținând unei aplicații sunt șterse când aplicația este dezinstalată.
-
În plus, aplicațiile își pot pune datele oriunde în spațiul de stocare extern principal (inclusiv unele directoare standard și alte” aplicații „directoare private) dacă se acordă permisiunea
WRITE_EXTERNAL_STORAGE
(getExternalStorageDirectory
returnează/storage/emulated/<user_id>
). Pentru stocarea externă secundară și stocarea amovibilă este utilizat SAF. Vedeți detaliile în Cum se salvează fișierele pe cardul SD extern? .Cu toate acestea, în Android 10 scrierea directă pe stocarea externă partajată principală este depreciată (
getExternalStorageDirectory
șigetExternalStoragePublicDirectory
sunt nu mai sunt disponibile). Aplicațiile trebuie să utilizeze unul dintre furnizorii de conținut încorporat pentru Android; fie MediaStore (pentru fișiere media), fie SAF (pentru orice alt tip de fișiere). -
/data
căile pot fi înlocuite cu/mnt/expand/[UUID]
atunci când se utilizează Adoptable Storage./storage/emulated
este înlocuit cu/storage/[UUID]
atunci când se utilizează stocarea externă secundară (cum ar fi cardul SD). -
Pentru mai mulți utilizatori / profiluri
<user_id>
este diferit, proprietarul dispozitivului este întotdeauna0
./data/user/0
este un link simbolic către/data/data
din motive istorice. Stocarea externă secundară este disponibilă numai pentru proprietarul dispozitivului. -
Directorul OBB este partajat între utilizatori / profiluri (până la Android 9) pentru a economisi spațiu. FUSE /
sdcardfs
expune întotdeauna/storage/emulated/obb
ca/storage/emulated/<user_id>/Android/obb
. -
/data/user_de
este spațiul de stocare criptat pe dispozitivele FBE, care permite anumite aplicații să ruleze la pornire fără a cere acreditări de utilizator. -
/data/misc/profiles
sunt utilizate de ART pentru compilare ghidată de profil a codului aplicației. -
Descrierea fiecărui director este oarecum evidentă din nume, detaliile pot fi văzute în documentația API .
-
Memoriile cache sunt șterse de sistemul de operare atunci când nu mai sunt stocate, păstrând aplicațiile care depășesc cota alocată.
-
Aplicațiile „private
files
directoarele din spațiul de stocare extern nu sunt scanate automat de MediaScanner , darmedia
sunt directoare. -
Memoriile cache și
no_backup
nu sunt copiate în cloud. Consultați documentația oficială .
Răspuns
Răspunsul la întrebarea pe care îl puneți este prea mare. Cu toate acestea, vă pot oferi un răspuns de bază care acoperă elementele de bază.
Există două tipuri de aplicații:
Root și non-root .
Root Aplicațiile pot stoca / modifica fișierele oriunde doresc.
Aplicațiile non-root pot stoca / modifica fișiere doar aici: /sdcard/
și fiecare dosar care urmează.
În general, aplicațiile instalate se stochează la /sdcard/Android/data
sau /sdcard/Android/obb
.
Unele aplicațiile stochează fișierele de salvare a jocurilor / datelor de configurare pe /sdcard/APPNAME/
sau doar pe /sdcard/
Pentru a putea utiliza aplicații rădăcină , va trebui să vă fi rădăcinat dispozitivul Android și să fi acordat permisiunea uneia dintre aplicațiile pentru superutilizatori.