Pochopenie úložiska v rozsahu Android: Čo sa zmenilo a prečo na tom záleží

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

Ak ste sa niekedy pokúšali spravovať súbory na zariadení so systémom Android, pravdepodobne ste si všimli, že veci fungujú odlišne v závislosti od verzie systému Android, ktorú používate. Počnúc systémom Android 10 spoločnosť Google zaviedla zásadný posun v tom, ako aplikácie interagujú so systémom súborov. Táto zmena, známa ako Scoped Storage, predefinovala pravidlá čítania a zápisu súborov na zdieľanom úložisku. Pre používateľov, ktorí sťahujú aplikácie, spravujú súbory OBB alebo pracujú so správcami súborov, je nevyhnutné porozumieť úložisku s rozsahom.

V tomto článku preskúmame, čo je to rozsah úložiska, prečo ho spoločnosť Google implementovala, ako to ovplyvňuje každodenných používateľov a vývojárov a čo to znamená pre každého, kto si nainštaluje súbory APK alebo XAPK mimo Obchod Play.

Problém so starým modelom úložiska

Pred Androidom 10 mohla každá aplikácia, ktorá si vyžiadala povolenie READ_EXTERNAL_STORAGE alebo WRITE_EXTERNAL_STORAGE, pristupovať prakticky k akémukoľvek súboru v zdieľanom úložisku zariadenia. To zahŕňalo fotografie, dokumenty, stiahnuté súbory a dokonca aj súbory vytvorené inými aplikáciami. Aj keď to zjednodušilo správu súborov, vyvolalo to vážne obavy o súkromie a bezpečnosť.

Zvážte jednoduchú aplikáciu na baterky. Podľa starého modelu, ak ste mu udelili povolenie na ukladanie, mohol potichu čítať vaše fotografie, skenovať stiahnuté dokumenty alebo dokonca upravovať súbory patriace iným aplikáciám. Neexistovala žiadna zrnitá kontrola. Buď ste aplikácii poskytli úplný prístup k celému úložisku, alebo ste ho úplne zamietli.

Tento široký prístup viedol k problémom v reálnom svete. Niektoré aplikácie zbierali používateľské údaje skenovaním úložiska na citlivé súbory. Iní po sebe zanechali osirelé súbory, ktoré zahlcovali zariadenie ešte dlho po odinštalovaní aplikácie. Spoločnosť Google potrebovala riešenie, ktoré by vyvážilo použiteľnosť a súkromie, a jeho odpoveďou bolo úložisko s rozsahom.

Čo v skutočnosti robí Scoped Storage

Úložisko s rozsahom zásadne mení vzťah medzi aplikáciami a súborovým systémom. V rámci tohto modelu má každá aplikácia svoj vlastný súkromný sandbox na externom úložisku, ktoré sa zvyčajne nachádza na /Android/data/[package.name]/. Aplikácie môžu voľne čítať a zapisovať vo svojom vlastnom karanténe bez toho, aby potrebovali akékoľvek povolenia.

Prístup k súborom mimo tejto karantény však vyžaduje prechod cez riadené rozhrania API. Takto funguje nový model:

Úložisko špecifické pre aplikáciu

Každá aplikácia má vyhradený adresár, ku ktorému má prístup iba ona. Po odinštalovaní aplikácie sa tento adresár automaticky vyčistí. Žiadna iná aplikácia nemôže čítať ani zapisovať do tohto umiestnenia bez prístupu root. To eliminuje problém osirelých súborov a zabraňuje snoopovaniu údajov medzi aplikáciami.

Zbierky médií

Pre zdieľané médiá, ako sú fotografie, videá a zvukové súbory, poskytuje Android rozhranie MediaStore API. Aplikácie môžu pridávať médiá do zdieľaných kolekcií a čítať médiá vytvorené inými aplikáciami, ale iba prostredníctvom tohto štruktúrovaného rozhrania. Aplikácia môže vidieť svoje vlastné médiá bez akéhokoľvek povolenia, ale prístup k médiám iných aplikácií vyžaduje povolenia READ_MEDIA_IMAGES, READ_MEDIA_VIDEO alebo READ_MEDIA_AUDIO zavedené v systéme Android 13.

Storage Access Framework

Pre dokumenty a iné nemediálne súbory musia aplikácie používať Storage Access Framework (SAF). Používateľovi to predstavuje výber systémových súborov, ktorý si explicitne vyberie, ku ktorým súborom alebo adresárom má aplikácia prístup. Aplikácia nikdy nezíska plošný prístup k celému systému súborov.

Povolenie MANAGE_EXTERNAL_STORAGE

Pre aplikácie, ktoré skutočne potrebujú široký prístup k súborom, ako sú správcovia súborov, zálohovacie nástroje a antivírusový softvér, poskytuje Android povolenie MANAGE_EXTERNAL_STORAGE. Toto povolenie však vyžaduje špeciálne schválenie od spoločnosti Google pre aplikácie distribuované prostredníctvom Obchodu Play a používatelia ho musia udeliť manuálne prostredníctvom systémových nastavení, nie prostredníctvom jednoduchého dialógového okna.

Časová os zavádzania

Google nevynútil ukladanie v rozsahu cez noc. Prechod prebiehal postupne:

  • Android 10 (API 29): Ukladací priestor s rozsahom bol predstavený, ale aplikácie mohli vo svojom manifeste zrušiť používanie requestLegacyExternalStorage="true". To dalo vývojárom čas na prispôsobenie sa.
  • Android 11 (API 30): Starý príznak bol ignorovaný pre aplikácie zacielené na API 30 alebo vyššie. Rozsah ukladacieho priestoru sa stal povinným pre nové a aktualizované aplikácie v Obchode Play.
  • Android 12 a novší: Boli urobené ďalšie vylepšenia, vrátane povolení pre granulárne médiá a vylepšeného výkonu SAF.
  • Android 13 (API 33): Široké povolenie READ_EXTERNAL_STORAGE bolo zastarané v prospech špecifických povolení pre médiá.
  • Android 14 (API 34): Bol predstavený čiastočný prístup k fotografiám a videu, ktorý používateľom umožňuje udeliť prístup ku konkrétnym súborom a nie k celým mediálnym knižniciam.

Ako rozsahové úložisko ovplyvňuje bočné zaťaženie

Pre používateľov, ktorí si inštalujú aplikácie mimo Obchodu Play, predstavuje obmedzené úložisko niekoľko praktických výziev, ktoré stojí za to pochopiť.

Sťahovanie a prístup k súborom APK

Keď si stiahnete súbor APK cez prehliadač, zvyčajne sa dostane do priečinka Downloads. V rámci úložiska s rozsahom vlastní tento súbor aplikácia prehliadača. Ak ho chcete nainštalovať pomocou inej aplikácie, ako je napríklad správca súborov, tento správca súborov potrebuje vhodný prístup. Väčšina moderných správcov súborov to rieši správne prostredníctvom SAF, ale starší môžu mať problémy.

Inštalátor systémového balíka má stále prístup k súborom, ktoré explicitne vyberiete prostredníctvom nástroja na výber súborov, takže základný postup sťahovania a inštalácie súboru APK stále funguje. Automatizované pracovné postupy inštalácie, ktoré sa spoliehali na priamy prístup k súborom, sa však môžu prerušiť.

Súbory OBB a herné údaje

Toto je miesto, kde priestorové skladovanie vytvára najväčšie trenie pre bočné nakladače. Mnoho veľkých hier používa súbory OBB (Opaque Binary Blob) uložené v /Android/obb/[package.name]/. Podľa starého modelu ste mohli jednoducho skopírovať súbory OBB do správneho adresára pomocou ľubovoľného správcu súborov.

Pri ukladaní s rozsahom je adresár /Android/obb/ obmedzený. V systéme Android 11 a novšom nemôžu bežné aplikácie zapisovať do adresára OBB inej aplikácie. To znamená, že ak stiahnete súbor XAPK, ktorý obsahuje údaje OBB, inštalačný program potrebuje špeciálne zaobchádzanie, aby tieto súbory umiestnil správne.

Nástroje ako náš OBB extraktor vám môžu pomôcť extrahovať súbory OBB z balíkov XAPK, ale ich umiestnenie do správneho adresára v novších verziách systému Android môže vyžadovať použitie správcu súborov s povolením MANAGE_EXTERNAL_STORAGE alebo použitie príkazov ADB z počítača.

Úvahy o inštalácii XAPK

Súbory XAPK spájajú súbor APK spolu s údajmi OBB a niekedy rozdeľujú konfigurácie súborov APK. Ich inštalácia na zariadeniach so systémom Android 11 alebo novším vyžaduje inštalačný program, ktorý rozumie obmedzeniam ukladacieho priestoru. Inštalačný program musí mať buď oprávnenie MANAGE_EXTERNAL_STORAGE, alebo použiť správne rozhrania API na umiestnenie súborov OBB na správne miesto.

To je jeden z dôvodov, prečo môže byť konverzia súborov XAPK do štandardného formátu APK užitočná. Samostatný súbor APK nevyžaduje umiestnenie súboru OBB, čo zjednodušuje proces inštalácie v novších verziách systému Android. Na extrahovanie základného súboru APK z balíka XAPK môžete použiť náš Prevodník XAPK na APK.

Čo potrebujú vývojári vedieť

Ak vyvíjate aplikácie pre Android, úložisko s rozsahom vyžaduje prehodnotenie spôsobu, akým narábate so súbormi:

  • Použite adresáre špecifické pre aplikáciu pre všetky súbory, ktoré potrebuje iba vaša aplikácia. Nevyžadujú žiadne povolenia a pri odinštalovaní sa automaticky vyčistia.
  • Použite MediaStore pre fotografie, videá a zvuk, ktoré by mali byť viditeľné pre ostatné aplikácie a mali by prežiť aj odinštalovanie.
  • Použite SAF, keď vaša aplikácia potrebuje pracovať s dokumentmi alebo adresármi vybratými používateľom.
  • Vyhnite sa pevne zakódovaným cestám k súborom. Cesty ako /sdcard/MyApp/ už nie sú spoľahlivé. Namiesto toho použite Context.getExternalFilesDir().
  • Správanie Testujte na viacerých úrovniach API. sa medzi Androidom 10, 11, 13 a 14 výrazne líši.

migračných stratégií

Ak vaša aplikácia predtým ukladala súbory do zdieľaného úložiska, potrebujete plán migrácie. Odporúčaný prístup je skopírovať existujúce súbory do úložiska špecifického pre aplikáciu pri prvom spustení po aktualizácii a potom odstrániť staré kópie. Počas prechodného obdobia použite Environment.getExternalStorageDirectory() so starým príznakom na čítanie starých súborov a potom ich presuňte na nové miesto.

Časté mylné predstavy

„Rozsahové úložisko znamená, že aplikácie nemajú prístup k žiadnym súborom“

Toto je nepravda. Aplikácie môžu naďalej voľne pristupovať k svojim vlastným súborom, prispievať do zdieľaných kolekcií médií a žiadať o prístup ku konkrétnym súborom prostredníctvom výberu systému. Zmenilo sa to, že aplikácie už nemôžu ticho prehliadať celý súborový systém.

"Správcovia súborov v nových verziách Androidu nefungujú"

Správcovia súborov, ktorí požadujú MANAGE_EXTERNAL_STORAGE, stále fungujú. Používateľovi stačí udeliť toto špeciálne povolenie prostredníctvom nastavení. Väčšina populárnych správcov súborov sa už prispôsobila tejto požiadavke.

"Ukladací priestor s rozsahom ovplyvňuje iba kartu SD"

Ukladací priestor s rozsahom sa vzťahuje na všetky zdieľané úložiská vrátane interného zdieľaného úložiska. Pojem „externé úložisko“ v systéme Android označuje zdieľané úložisko, ku ktorému má prístup viacero aplikácií, nie nevyhnutne fyzickú SD kartu.

Praktické tipy pre používateľov

Ak pravidelne sťahujete aplikácie alebo spravujete súbory na svojom zariadení s Androidom, tu je niekoľko praktických odporúčaní:

  1. Používajte moderného správcu súborov, ktorý podporuje MANAGE_EXTERNAL_STORAGE. Aplikácie ako Solid Explorer, MiXplorer a Total Commander sa dobre prispôsobili priestorovému úložisku.
  2. Opatrne udeľujte povolenia. Keď správca súborov požiada o „Prístup ku všetkým súborom“, pochopte, že ide o povolenie MANAGE_EXTERNAL_STORAGE a je nevyhnutné pre plnú funkčnosť.
  3. Použite ADB na tvrdohlavé operácie so súbormi. Ak nemôžete umiestniť súbory OBB cez správcu súborov, pripojením zariadenia k počítaču a používaním adb push sa úplne obídu obmedzenia rozsahu úložiska.
  4. Prevod zložitých balíkov na jednoduchšie formáty. Ak vám súbor XAPK spôsobuje problémy na novšom zariadení, extrahovanie iba komponentu APK môže byť cestou najmenšieho odporu.
  5. Udržujte svoje inštalačné aplikácie aktualizované. Staršie verzie inštalačných programov XAPK nemusia správne spracovať úložisko s rozsahom.

Budúcnosť úložiska Android

Spoločnosť Google naďalej zdokonaľuje model úložiska s každým vydaním systému Android. Android 14 zaviedol čiastočný prístup k médiám, čo používateľom umožňuje zdieľať konkrétne fotografie s aplikáciou a nie celú knižnicu. Očakáva sa, že Android 15 prinesie ďalšie vylepšenia výkonu a použiteľnosti Storage Access Framework.

Trend je jasný: Android smeruje k modelu, v ktorom majú používatelia jemnú kontrolu nad tým, čo jednotlivé aplikácie môžu vidieť a upravovať. Aj keď to vytvára určité trenie pre náročných používateľov a sideloaderov, výrazne to zlepšuje súkromie a bezpečnosť pre širšiu používateľskú základňu.

Práca s obmedzeným úložiskom bez narušenia údajov aplikácie

Scoped storage predstavuje jednu z najvýznamnejších zmien architektúry Androidu za posledné roky. Obmedzením aplikácií na ich vlastné karantény a vyžadovaním výslovného súhlasu používateľa pre širší prístup spoločnosť Google dramaticky zlepšila ochranu súkromia platformy. Používateľom, ktorí sťahujú aplikácie a spravujú súbory manuálne, pochopenie týchto obmedzení pomôže obísť občasné trecie body. A pre vývojárov nie je prispôsobenie sa obmedzenému úložisku voliteľné, ale skôr základná požiadavka pre moderný vývoj Androidu.

Inštalácia súborov APK, umiestňovanie súborov OBB a len každodenná správa úložiska to všetko prebieha v rovnakom systéme: úložisko s rozsahom. Keď pochopíte, ako to funguje, budete to vy, kto ovláda svoje zariadenie, namiesto toho, aby ste boli vydaní napospas aplikáciám, ktoré by mohli zneužívať široký prístup k súborom.

Navrhol a zdokumentoval Mst Shaefale Vedúci vývojár a architekt balíkov Android • Overené na Android 12–15

Mst Shaefale spravuje nástroj na zlučovanie XAPK/APKS na strane klienta, analyzátor binárnych manifestov a nástroje na podpisovanie APK v1+v2 na xapktoapk.com. Všimli ste si zastaraný príkaz alebo zmenu operačného systému? Pošlite redakčnú poznámku.