Sistemul de fișiere al dispozitivului mobil este modul de organizare, stocare și denumire a datelor în memoria flash. Potrivit Android Developers, 2026, sistemele de operare mobile utilizează o structură ierarhică de directoare, unde fiecare aplicație rulează într-un sandbox izolat. Această arhitectură previne accesul neautorizat la date și asigură funcționarea stabilă a sistemului la rularea simultană a mai multor aplicații.
Principalele puncte
Sistemul de fișiere este o componentă software a sistemului de operare care gestionează modul în care datele sunt scrise, citite și organizate pe suportul fizic. Pe dispozitivele mobile, sistemul de fișiere îndeplinește funcții critic de importante: gestionarea spațiului memoriei flash, controlul accesului la fișiere pe baza permisiunilor, înregistrarea modificărilor pentru recuperarea după defecțiuni și optimizarea scrierii ținând cont de particularitățile memoriei NAND flash.
Spre deosebire de sistemele de operare desktop, sistemele de fișiere mobile sunt proiectate ținând cont de resursa limitată a ciclurilor de suprascriere a memoriei flash. Celulele NAND suportă un număr limitat de operații de ștergere — de la 3 000 la 10 000 de cicluri pentru memoria TLC și, respectiv, MLC. Pentru a prelungi durata de viață a dispozitivului de stocare, sistemele de fișiere aplică mecanisme de wear leveling (egalizarea uzurii) și comenzi TRIM. F2FS, dezvoltată de Samsung special pentru memoria flash, ține cont de geometria matricei NAND și plasează datele astfel încât să minimizeze fragmentarea și numărul operațiilor de ștergere a blocurilor.
Dispozitivele mobile moderne utilizează o combinație de mai multe sisteme de fișiere. Memoria internă (partiția /data) este formatată în EXT4 sau F2FS pe Android și APFS pe iOS. Cardurile SD utilizează în mod tradițional exFAT pentru suportul fișierelor mai mari de 4 GB sau FAT32 pentru compatibilitate maximă. Partiția /system pe Android este adesea montată doar pentru citire și utilizează EXT4 sau EROFS (Enhanced Read-Only File System) — un sistem de fișiere comprimat dezvoltat de Huawei pentru a reduce dimensiunea partiției de sistem.
Ierarhia directoarelor Android se bazează pe structura Linux cu rădăcina în /. Fiecare partiție are propriul sistem de fișiere, drepturi de acces și destinație. O aplicație poate accesa doar un set limitat de directoare — restul sunt protejate de drepturile root.
| Cale | Partiție | Sistem de fișiere | Acces pentru aplicație |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Doar propriul sandbox |
| /system | System | EROFS / EXT4 | Doar citire (root) |
| /sdcard | External | exFAT / FAT32 | Cu permisiune |
| /cache | Cache | EXT4 | Doar root |
| /vendor | Vendor | EROFS / EXT4 | Doar citire (root) |
Partiția /data este partiția principală pentru stocarea datelor utilizatorului, aplicațiilor instalate și setărilor acestora. Fiecare aplicație primește propriul director pe calea /data/data/<package_name>/. În interiorul acestui director, sistemul creează automat subdirectoare: files/ pentru fișierele aplicației, cache/ pentru fișiere temporare, databases/ pentru bazele de date SQLite, shared_prefs/ pentru SharedPreferences. Drepturile de acces la acest director se stabilesc la instalarea aplicației și nu pot fi modificate fără acces root. Partiția /data este formatată în F2FS pe majoritatea dispozitivelor moderne, ceea ce asigură o viteză de scriere aleatorie cu până la 40% mai mare comparativ cu EXT4.
Partiția /system conține sistemul de operare, aplicațiile de sistem și bibliotecile. Această partiție este montată doar pentru citire pentru a preveni modificarea accidentală sau intenționată a fișierelor de sistem. Pe dispozitivele cu Android 10+ și Project Treble, partiția /system este dinamică și poate fi actualizată prin pachete OTA fără a fi necesară o refulare completă. Pentru aplicații, partiția /system este inaccesibilă — o încercare de scriere va genera o excepție SecurityException. Cu toate acestea, aplicațiile pot citi unele fișiere din /system, cum ar fi fonturile de sistem și fișierele de configurare, dacă au permisiunile corespunzătoare.
Punctul de montare /sdcard este o legătură simbolică către partiția de stocare externă emulată sau fizică. Pe dispozitivele fără card SD, /sdcard indică către o subpartiție din /data care este alocată pentru acces partajat. Această partiție este vizibilă utilizatorului atunci când dispozitivul este conectat la computer prin protocolul MTP. Aplicațiile obțin acces la /sdcard prin permisiunile READ_EXTERNAL_STORAGE și WRITE_EXTERNAL_STORAGE, iar începând cu Android 10 — prin Scoped Storage utilizând API-ul MediaStore. Dimensiunea /sdcard reprezintă de obicei 60–80% din volumul total al memoriei flash a dispozitivului, iar restul este rezervat pentru partiția /data.
Pe iOS, sistemul de fișiere este organizat prin containere Sandbox ale aplicațiilor. Fiecare aplicație primește un director izolat, al cărui acces este limitat la nivelul nucleului XNU. Partiția utilizator utilizează sistemul de fișiere APFS (Apple File System), introdus în iOS 10.3. APFS suportă snapshot-uri, clonarea fișierelor și criptarea la nivel de fișier, ceea ce îl face optim pentru dispozitivele mobile.
Containerul Sandbox iOS include patru directoare principale: Documents, Library, tmp și SystemData. Fiecare director are propria politică de backup, perioadă de păstrare a datelor și nivel de acces. Documents este inclus automat în backup-ul iCloud și iTunes. Library conține subdirectoarele Caches (nu se face backup), Preferences (se face backup) și Application Support (se face backup). Directorul tmp este destinat fișierelor temporare — iOS le poate șterge în caz de lipsă de spațiu și nu este inclus în backup. SystemData este utilizat de sistemul însuși și este inaccesibil aplicației prin API-urile standard.
let fm = FileManager.default
let documents = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let caches = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let appSupport = fm.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first!
Fiecare director al containerului Sandbox are propria clasă de protecție (protection class). iOS suportă patru clase: Complete Protection (fișierul este inaccesibil când dispozitivul este blocat), Protected Unless Open (fișierele deja deschise sunt accesibile la blocare), Protected Until First User Authentication (fișierele sunt accesibile după prima deblocare) și No Protection (fișierele sunt întotdeauna accesibile după pornirea dispozitivului). Implicit, toate fișierele din Documents și Library primesc clasa Complete Protection, ceea ce garantează protecția maximă a datelor utilizatorului. La crearea unui fișier, se poate specifica explicit o altă clasă de protecție dacă o aplicație de fundal trebuie să aibă acces la date atunci când dispozitivul este blocat.
Gestionarea accesului la fișiere pe dispozitivele mobile reprezintă o diferență cheie între Android și iOS. Android utilizează modelul clasic de drepturi de acces Linux (citire, scriere, execuție) cu extensii pentru izolarea aplicațiilor. iOS aplică un model mai strict Sandbox, unde fiecare aplicație rulează într-un container izolat și nu are acces la fișierele altor aplicații fără mecanisme speciale.
Pe Android, fiecare aplicație rulează cu un UID (User ID) separat. Toate fișierele create de aplicație în sandbox-ul său aparțin acestui UID și nu sunt vizibile pentru alte aplicații. Pentru accesul la directoarele partajate (stocare externă), aplicația trebuie să solicite permisiunile READ_EXTERNAL_STORAGE și WRITE_EXTERNAL_STORAGE. Începând cu Android 11, permisiunile trebuie solicitate în timpul execuției, iar aplicația cu targetSdkVersion 30+ pentru accesul la fișierele altor aplicații trebuie să utilizeze SAF. Încălcarea modelului de permisiuni duce la SecurityException, care este gestionată de blocul standard try-catch. Google Play verifică automat conformitatea aplicației cu politica de permisiuni înainte de publicare.
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
REQUEST_CODE
)
}
iOS Sandbox este implementat la nivelul nucleului XNU și nu permite aplicației să iasă în afara propriului container. Chiar dacă aplicația obține acces la URI-ul unui fișier extern prin Document Picker, sistemul de operare creează o copie temporară în containerul aplicației, în loc să ofere acces direct la original. Pentru schimbul de fișiere între aplicații, iOS utilizează mecanismele Share Sheet și UIActivityViewController, care copiază fișierul din containerul unei aplicații în containerul alteia. Pentru stocarea securizată a datelor de autentificare (token-uri, parole, chei), iOS oferă Keychain — un depozit criptat accesibil sistemului la nivel de nucleu. Keychain nu face parte din containerul Sandbox și este gestionat de un demon separat securityd, ceea ce asigură un nivel suplimentar de protecție chiar și în cazul compromiterii aplicației.
Alegerea sistemului de fișiere influențează direct performanța și fiabilitatea stocării datelor. Fiecare sistem de fișiere are propria arhitectură, optimizări și limitări. Este util pentru dezvoltator să înțeleagă aceste diferențe pentru a prezice comportamentul aplicației pe diferite dispozitive.
La dezvoltarea aplicațiilor, luați în considerare că diferite sisteme de fișiere au limitări diferite privind lungimea numelui de fișier (255 de octeți pentru EXT4 și F2FS, 255 de caractere Unicode pentru APFS), dimensiunea maximă a fișierului și suportul pentru caractere speciale. De exemplu, APFS permite caractere Unicode în numele fișierelor, inclusiv emoji-uri, în timp ce EXT4 este limitat la ASCII. Dacă aplicația creează fișiere cu nume în diferite limbi, testați funcționarea pe toate dispozitivele țintă — un nume de fișier creat corect pe APFS poate fi trunchiat pe EXT4.
Funcționarea fiabilă cu sistemul de fișiere al dispozitivului mobil necesită respectarea câtorva reguli cheie. Acestea se bazează pe analiza erorilor tipice ale dezvoltatorilor și recomandările documentației oficiale.
context.filesDir pe Android, NSSearchPathForDirectoriesInDomains pe iOS. Căile fixe se schimbă între versiunile de sistem de operare și dispozitiveFile.getUsableSpace() pe Android și URLResourceValues.volumeAvailableCapacityKey pe iOS. Atenționați utilizatorul dacă spațiul liber este insuficientisExcludedFromBackup. Pe Android, preferați cacheDir pentru fișiere temporareAcordați o atenție deosebită diferențelor cross-platform. Căile către fișiere pe Android se construiesc cu slash (/data/data/.../files/), pe iOS — prin schema URL (file:///var/mobile/.../Documents/). Dacă aplicația dvs. utilizează un framework multi-platformă (Flutter, React Native, Kotlin Multiplatform), unificați operațiile cu fișiere prin adaptoare de platformă. De exemplu, Flutter oferă pachetul path_provider, care returnează calea corectă către Documents sau filesDir pe ambele platforme fără a scrie cod dependent de platformă. Nu concatenați niciodată căile prin operații pe șiruri de caractere — utilizați File.join() sau URL.appendingPathComponent(), care gestionează corect separatoarele pe diferite platforme.
Întrebări frecvente
Pe dispozitivele Android moderne (11+) pentru partiția /data se utilizează F2FS. Pe dispozitivele vechi — EXT4. Partiția /system utilizează EROFS sau EXT4. Cardurile SD sunt formatate în exFAT sau FAT32 în funcție de capacitate.
APFS suportă snapshot-uri, clonarea fișierelor, criptarea la nivel de fișier și sume de control. EXT4 are jurnalizare și o compatibilitate mai largă. APFS este optimizat pentru SSD, EXT4 este un sistem de fișiere universal.
Utilizați FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). Metoda returnează un array de URL-uri, primul element fiind directorul principal Documents al containerului Sandbox al aplicației.
Scoped Storage este un model de acces introdus în Android 10 care limitează accesul direct la sistemul de fișiere. Aplicațiile pot citi fără permisiune doar propriile fișiere. Pentru accesul la fișierele media partajate se utilizează API-ul MediaStore.
exFAT este preferat pentru cardurile SD cu capacitate mai mare de 32 GB, deoarece suportă fișiere mai mari de 4 GB. FAT32 asigură compatibilitate maximă cu dispozitivele vechi, dar limitează dimensiunea fișierului la 4 GB.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și