Систем датотека мобилног уређаја је начин организације, складиштења и именовања података на флеш меморији. Према Android Developers, 2026, мобилни оперативни системи користе хијерархијску структуру директоријума, где свака апликација ради у изолованом сендбоксу. Таква архитектура спречава неовлашћени приступ подацима и обезбеђује стабилан рад система при истовременом покретању више апликација.
Главне тачке
Систем датотека је софтверска компонента оперативног система која управља тиме како се подаци записују, читају и организују на физичком медијуму. На мобилним уређајима систем датотека обавља критично важне функције: управљање простором флеш меморије, контролу приступа датотекама на основу дозвола, евидентирање промена за опоравак након отказа и оптимизацију уписа узимајући у обзир карактеристике NAND флеш меморије.
За разлику од десктоп оперативних система, мобилни системи датотека се пројектују узимајући у обзир ограничен ресурс циклуса преписивања флеш меморије. NAND ћелије издржавају ограничен број операција брисања — од 3 000 до 10 000 циклуса за TLC и MLC меморију респективно. Да би се продужио век трајања уређаја за складиштење, системи датотека примењују механизме wear leveling (изједначавање хабања) и TRIM команде. F2FS, коју је Samsung развио специјално за флеш меморију, узима у обзир геометрију NAND низа и поставља податке тако да се минимизира фрагментација и број операција брисања блокова.
Савремени мобилни уређаји користе комбинацију више система датотека. Интерна меморија (партиција /data) се форматира у EXT4 или F2FS на Android-у и APFS на iOS-у. SD картице традиционално користе exFAT за подршку датотекама већим од 4 GB или FAT32 за максималну компатибилност. Партиција /system на Android-у се често монтира само за читање и користи EXT4 или EROFS (Enhanced Read-Only File System) — компресовани систем датотека који је развио Huawei за смањење величине системске партиције.
Хијерархија директоријума Android-а се заснива на Linux структури са кореном у /. Свака партиција има свој систем датотека, права приступа и намену. Апликација може приступити само ограниченом скупу директоријума — остали су заштићени root правима.
| Путања | Партиција | Систем датотека | Приступ за апликацију |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Само свој сендбокс |
| /system | System | EROFS / EXT4 | Само читање (root) |
| /sdcard | External | exFAT / FAT32 | Уз дозволу |
| /cache | Cache | EXT4 | Само root |
| /vendor | Vendor | EROFS / EXT4 | Само читање (root) |
Партиција /data је главна партиција за складиштење корисничких података, инсталираних апликација и њихових подешавања. Свака апликација добија сопствени директоријум на путањи /data/data/<package_name>/. Унутар овог директоријума систем аутоматски креира поддиректоријуме: files/ за датотеке апликације, cache/ за привремене датотеке, databases/ за SQLite базе података, shared_prefs/ за SharedPreferences. Права приступа овом директоријуму се постављају приликом инсталације апликације и не могу се мењати без root приступа. Партиција /data се форматира у F2FS на већини савремених уређаја, што обезбеђује до 40% већу брзину случајног уписа у поређењу са EXT4.
Партиција /system садржи оперативни систем, системске апликације и библиотеке. Ова партиција се монтира само за читање како би се спречила случајна или злонамерна измена системских датотека. На уређајима са Android 10+ и Project Treble, партиција /system је динамичка и може се ажурирати путем OTA пакета без потребе за комплетним флешовањем. За апликације, партиција /system је недоступна — покушај уписа ће изазвати изузетак SecurityException. Међутим, апликације могу читати неке датотеке из /system, на пример системске фонтове и конфигурационе датотеке, ако имају одговарајуће дозволе.
Тачка монтирања /sdcard је симболичка веза ка партицији емулованог или физичког спољашњег складишта. На уређајима без SD картице, /sdcard указује на подпартицију унутар /data која је издвојена за заједнички приступ. Ова партиција је видљива кориснику када се уређај повеже са рачунаром путем MTP протокола. Апликације добијају приступ /sdcard-у кроз дозволе READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE, а од Android 10 — кроз Scoped Storage коришћењем MediaStore API-ја. Величина /sdcard-а обично износи 60–80% укупног обима флеш меморије уређаја, а остатак је резервисан за партицију /data.
На iOS-у систем датотека је организован кроз Sandbox контејнере апликација. Свака апликација добија изоловани директоријум, чији је приступ ограничен на нивоу XNU језгра. Корисничка партиција користи систем датотека APFS (Apple File System), представљен у iOS 10.3. APFS подржава снимке (snapshots), клонирање датотека и шифровање на нивоу датотека, што га чини оптималним за мобилне уређаје.
Sandbox контејнер iOS-а укључује четири главна директоријума: Documents, Library, tmp и SystemData. Сваки директоријум има своју политику резервног копирања, период чувања података и ниво приступа. Documents се аутоматски укључује у резервно копирање iCloud и iTunes. Library садржи поддиректоријуме Caches (не прави се резервна копија), Preferences (прави се резервна копија) и Application Support (прави се резервна копија). Директоријум tmp је намењен привременим датотекама — iOS их може обрисати при недостатку простора и не укључује се у резервно копирање. SystemData користи сам систем и недоступан је апликацији путем стандардних API-ја.
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!
Сваки директоријум Sandbox контејнера има сопствену класу заштите (protection class). iOS подржава четири класе: Complete Protection (датотека недоступна када је уређај закључан), Protected Unless Open (већ отворене датотеке су доступне при закључавању), Protected Until First User Authentication (датотеке доступне након првог откључавања) и No Protection (датотеке увек доступне након покретања уређаја). Подразумевано, све датотеке у Documents и Library добијају класу Complete Protection, што гарантује максималну заштиту корисничких података. Приликом креирања датотеке може се експлицитно навести друга класа заштите ако позадинска апликација треба да има приступ подацима када је уређај закључан.
Управљање приступом датотекама на мобилним уређајима је кључна разлика између Android-а и iOS-а. Android користи класични Linux модел права приступа (читање, писање, извршавање) са проширењима за изолацију апликација. iOS примењује строжи Sandbox модел, где свака апликација ради у изолованом контејнеру и нема приступ датотекама других апликација без посебних механизама.
На Android-у свака апликација се покреће са посебним UID (User ID). Све датотеке које апликација креира у свом сендбоксу припадају овом UID-у и нису видљиве другим апликацијама. За приступ заједничким директоријумима (спољашња меморија), апликација мора да затражи дозволе READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE. Од Android 11, дозволе се морају тражити током извршавања, а апликација са targetSdkVersion 30+ за приступ датотекама других апликација мора користити SAF. Кршење модела дозвола доводи до SecurityException, који се обрађује стандардним try-catch блоком. Google Play аутоматски проверава усклађеност апликације са политиком дозвола пре објављивања.
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 је имплементиран на нивоу XNU језгра и не дозвољава апликацији да изађе из свог контејнера. Чак и ако апликација добије приступ URI-ју спољашње датотеке путем Document Picker-а, оперативни систем креира привремену копију у контејнеру апликације уместо да обезбеди директан приступ оригиналу. За размену датотека између апликација iOS користи механизме Share Sheet и UIActivityViewController, који копирају датотеку из контејнера једне апликације у контејнер друге. За безбедно складиштење акредитива (токени, лозинке, кључеви) iOS пружа Keychain — шифровано складиште доступно систему на нивоу језгра. Keychain није део Sandbox контејнера и управља га посебан демон securityd, што обезбеђује додатни ниво заштите чак и у случају компромитовања апликације.
Избор система датотека директно утиче на перформансе и поузданост складиштења података. Сваки систем датотека има своју архитектуру, оптимизације и ограничења. Програмеру је корисно да разуме ове разлике како би предвидео понашање апликације на различитим уређајима.
Приликом развоја апликација узмите у обзир да различити системи датотека имају различита ограничења дужине имена датотеке (255 бајтова за EXT4 и F2FS, 255 Unicode знакова за APFS), максималну величину датотеке и подршку за специјалне знакове. На пример, APFS дозвољава Unicode знакове у именима датотека, укључујући емоџије, док је EXT4 ограничен на ASCII. Ако апликација креира датотеке са именима на различитим језицима, тестирајте рад на свим циљаним уређајима — име датотеке правилно креирано на APFS-у може бити скраћено на EXT4.
Поуздан рад са системом датотека мобилног уређаја захтева поштовање неколико кључних правила. Она се заснивају на анализи типичних грешака програмера и препорукама званичне документације.
context.filesDir на Android-у, NSSearchPathForDirectoriesInDomains на iOS-у. Тврде путање се мењају између верзија оперативног система и уређајаFile.getUsableSpace() на Android-у и URLResourceValues.volumeAvailableCapacityKey на iOS-у. Упозорите корисника ако слободног простора нема довољноisExcludedFromBackup. На Android-у преферирајте cacheDir за привремене датотекеПосебну пажњу посветите вишеплатформским разликама. Путање до датотека на Android-у се граде косом цртом (/data/data/.../files/), на iOS-у — URL шемом (file:///var/mobile/.../Documents/). Ако ваша апликација користи мултиплатформски оквир (Flutter, React Native, Kotlin Multiplatform), унификујте операције са датотекама кроз платформске адаптере. На пример, Flutter пружа пакет path_provider, који враћа исправну путању до Documents или filesDir на обе платформе без писања платформски зависног кода. Никада не конкатенирајте путање операцијама на стринговима — користите File.join() или URL.appendingPathComponent(), који правилно обрађују сепараторе на различитим платформама.
Често постављана питања
На савременим Android уређајима (11+) за партицију /data користи се F2FS. На старијим уређајима — EXT4. Партиција /system користи EROFS или EXT4. SD картице се форматирају у exFAT или FAT32 у зависности од капацитета.
APFS подржава снимке, клонирање датотека, шифровање на нивоу датотека и контролне суме. EXT4 има журналисање и ширу компатибилност. APFS је оптимизован за SSD, EXT4 је универзални систем датотека.
Користите FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). Метод враћа низ URL адреса, први елемент је главни Documents директоријум Sandbox контејнера апликације.
Scoped Storage је модел приступа уведен у Android 10 који ограничава директан приступ систему датотека. Апликације могу без дозволе да читају само своје датотеке. За приступ заједничким медијским датотекама користи се MediaStore API.
exFAT је пожељнији за SD картице капацитета преко 32 GB, јер подржава датотеке веће од 4 GB. FAT32 обезбеђује максималну компатибилност са старијим уређајима, али ограничава величину датотеке на 4 GB.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође