Porozumění úložišti Android Scoped Storage: Co se změnilo a proč na tom záleží

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

Pokud jste se někdy pokoušeli spravovat soubory na zařízení Android, pravděpodobně jste si všimli, že věci fungují odlišně v závislosti na verzi systému Android, kterou používáte. Počínaje Androidem 10 představil Google zásadní posun ve způsobu interakce aplikací se systémem souborů. Tato změna, známá jako Scoped Storage, předefinovala pravidla pro čtení a zápis souborů na sdíleném úložišti. Pro uživatele, kteří si načítají aplikace, spravují soubory OBB nebo pracují se správci souborů, je pochopení omezeného úložiště zásadní.

V tomto článku prozkoumáme, co je to omezené úložiště, proč jej Google implementoval, jak to ovlivňuje běžné uživatele a vývojáře a co to znamená pro každého, kdo si instaluje soubory APK nebo XAPK mimo Obchod Play.

Problém se starým modelem úložiště

Před Androidem 10 mohla jakákoli aplikace, která požadovala oprávnění READ_EXTERNAL_STORAGE nebo WRITE_EXTERNAL_STORAGE, přistupovat prakticky k jakémukoli souboru na sdíleném úložišti zařízení. To zahrnovalo fotografie, dokumenty, stažené soubory a dokonce i soubory vytvořené jinými aplikacemi. I když to usnadnilo správu souborů, vyvolalo to vážné obavy o soukromí a bezpečnost.

Zvažte jednoduchou aplikaci na baterku. Ve starém modelu, pokud jste mu udělili oprávnění k ukládání, mohl tiše číst vaše fotografie, skenovat stažené dokumenty nebo dokonce upravovat soubory patřící jiným aplikacím. Neexistovala žádná podrobná kontrola. Buď jste aplikaci udělili plný přístup k celému vašemu úložišti, nebo jste jej úplně odepřeli.

Tento široký přístup vedl k problémům v reálném světě. Některé aplikace sklízely uživatelská data skenováním úložiště na citlivé soubory. Jiní po sobě zanechali osiřelé soubory, které zaplňovaly zařízení ještě dlouho poté, co byla aplikace odinstalována. Google potřeboval řešení, které by vyvážilo použitelnost a soukromí, a řešením bylo úložiště s rozsahem.

Co Scoped Storage vlastně dělá

Úložiště s rozsahem zásadně mění vztah mezi aplikacemi a systémem souborů. V rámci tohoto modelu má každá aplikace svůj vlastní soukromý sandbox na externím úložišti, které se obvykle nachází na /Android/data/[package.name]/. Aplikace mohou volně číst a zapisovat ve svém vlastním sandboxu, aniž by k tomu potřebovaly jakákoliv oprávnění.

Přístup k souborům mimo tuto karanténu však vyžaduje použití řízených rozhraní API. Zde je návod, jak nový model funguje:

Úložiště specifické pro aplikaci

Každá aplikace má vyhrazený adresář, ke kterému má přístup pouze ona. Po odinstalaci aplikace se tento adresář automaticky vyčistí. Žádná jiná aplikace nemůže číst ani zapisovat do tohoto umístění bez přístupu root. To eliminuje problém osiřelých souborů a zabraňuje sledování dat napříč aplikacemi.

Sbírky médií

Pro sdílená média, jako jsou fotografie, videa a zvukové soubory, poskytuje Android rozhraní MediaStore API. Aplikace mohou přidávat média do sdílených sbírek a číst média vytvořená jinými aplikacemi, ale pouze prostřednictvím tohoto strukturovaného rozhraní. Aplikace může vidět svá vlastní média bez jakéhokoli povolení, ale přístup k médiím jiných aplikací vyžaduje oprávnění READ_MEDIA_IMAGES, READ_MEDIA_VIDEO nebo READ_MEDIA_AUDIO zavedená v systému Android 13.

Storage Access Framework

Pro dokumenty a další nemediální soubory musí aplikace používat Storage Access Framework (SAF). To představuje výběr systémových souborů uživateli, který explicitně vybírá, ke kterým souborům nebo adresářům má aplikace přístup. Aplikace nikdy nezíská plošný přístup k celému systému souborů.

Oprávnění MANAGE_EXTERNAL_STORAGE

Pro aplikace, které skutečně potřebují široký přístup k souborům, jako jsou správci souborů, zálohovací nástroje a antivirový software, poskytuje Android oprávnění MANAGE_EXTERNAL_STORAGE. Toto oprávnění však vyžaduje zvláštní schválení od společnosti Google pro aplikace distribuované prostřednictvím Obchodu Play a uživatelé jej musí udělit ručně prostřednictvím systémových nastavení, nikoli pomocí jednoduchého dialogu.

Časová osa zavedení

Google nevynutil úložiště s rozsahem přes noc. Přechod probíhal postupně:

  • Android 10 (API 29): Bylo představeno úložiště s rozsahem, ale aplikace se mohly odhlásit pomocí requestLegacyExternalStorage="true" ve svém manifestu. To dalo vývojářům čas se přizpůsobit.
  • Android 11 (API 30): Starší příznak byl ignorován u aplikací cílených na API 30 nebo vyšší. Rozsah úložiště se stal povinným pro nové a aktualizované aplikace v Obchodě Play.
  • Android 12 a novější: Byla provedena další vylepšení, včetně povolení granulárních médií a vylepšeného výkonu SAF.
  • Android 13 (API 33): Široké oprávnění READ_EXTERNAL_STORAGE bylo ukončeno ve prospěch specifických oprávnění pro média.
  • Android 14 (API 34): Byl představen částečný přístup k fotografiím a videu, který uživatelům umožňuje udělit přístup ke konkrétním souborům, nikoli k celým knihovnám médií.

Jak omezené úložiště ovlivňuje boční zatížení

Pro uživatele, kteří si instalují aplikace mimo Obchod Play, představuje omezené úložiště některé praktické výzvy, které stojí za pochopení.

Stahování a přístup k souborům APK

Když stáhnete soubor APK prostřednictvím prohlížeče, obvykle se zobrazí ve složce Stažené soubory. V rámci úložiště s rozsahem tento soubor vlastní aplikace prohlížeče. Pokud jej chcete nainstalovat pomocí jiné aplikace, například správce souborů, tento správce souborů potřebuje odpovídající přístup. Většina moderních správců souborů to řeší správně prostřednictvím SAF, ale starší mohou mít potíže.

Instalační program systémového balíčku má stále přístup k souborům, které explicitně vyberete prostřednictvím nástroje pro výběr souborů, takže základní postup stahování a instalace souboru APK stále funguje. Pracovní postupy automatizované instalace, které se spoléhaly na přímý přístup k cestě k souboru, se však mohou přerušit.

Soubory OBB a herní data

To je místo, kde prostorové skladování vytváří největší tření pro boční nakladače. Mnoho velkých her používá soubory OBB (Opaque Binary Blob) uložené v /Android/obb/[package.name]/. Podle starého modelu jste mohli jednoduše zkopírovat soubory OBB do správného adresáře pomocí libovolného správce souborů.

U úložiště s rozsahem je adresář /Android/obb/ omezen. V systému Android 11 a novějším nemohou běžné aplikace zapisovat do adresáře OBB jiné aplikace. To znamená, že pokud stáhnete soubor XAPK, který obsahuje data OBB, instalační program potřebuje speciální zacházení, aby tyto soubory správně umístil.

Nástroje jako náš OBB extraktor vám mohou pomoci extrahovat soubory OBB z balíčků XAPK, ale jejich umístění do správného adresáře v novějších verzích Androidu může vyžadovat použití správce souborů s oprávněním MANAGE_EXTERNAL_STORAGE nebo použití příkazů ADB z počítače.

Pokyny k instalaci XAPK

Soubory XAPK spojují APK společně s daty OBB a někdy rozdělují konfigurace APK. Instalace těchto zařízení na zařízení se systémem Android 11 nebo novějším vyžaduje instalační program, který rozumí omezením úložiště. Instalační program musí mít buď oprávnění MANAGE_EXTERNAL_STORAGE, nebo použít správná rozhraní API k umístění souborů OBB na správné místo.

To je jeden z důvodů, proč může být převod souborů XAPK do standardního formátu APK užitečný. Samostatný soubor APK nevyžaduje umístění souboru OBB, což zjednodušuje proces instalace na novější verze systému Android. K extrahování základního souboru APK z balíčku XAPK můžete použít náš Převodník XAPK na APK.

Co vývojáři potřebují vědět

Pokud vyvíjíte aplikace pro Android, úložiště s rozsahem vyžaduje přehodnocení způsobu zacházení se soubory:

  • Používejte adresáře specifické pro aplikaci pro všechny soubory, které potřebuje pouze vaše aplikace. Nevyžadují žádná oprávnění a jsou automaticky vyčištěny při odinstalaci.
  • Použijte MediaStore pro fotografie, videa a zvuk, které by měly být viditelné pro ostatní aplikace a měly by přežít odinstalaci.
  • Použijte SAF, když vaše aplikace potřebuje pracovat s dokumenty nebo adresáři vybranými uživatelem.
  • Vyhněte se pevně zakódovaným cestám k souborům. Cesty jako /sdcard/MyApp/ již nejsou spolehlivé. Místo toho použijte Context.getExternalFilesDir().
  • Chování Testujte na více úrovních API. se mezi Androidem 10, 11, 13 a 14 výrazně liší.

Migrační strategie

Pokud vaše aplikace dříve ukládala soubory do sdíleného úložiště, potřebujete plán migrace. Doporučený přístup je zkopírovat existující soubory do úložiště specifického pro aplikaci při prvním spuštění po aktualizaci a poté staré kopie odstranit. Použijte Environment.getExternalStorageDirectory() se starším příznakem během přechodného období ke čtení starých souborů a poté je přesuňte do nového umístění.

Časté mylné představy

"Rozsah úložiště znamená, že aplikace nemají přístup k žádným souborům"

To není pravda. Aplikace mohou stále volně přistupovat ke svým vlastním souborům, přispívat do sdílených sbírek médií a žádat o přístup ke konkrétním souborům prostřednictvím nástroje pro výběr systému. Změnilo se to, že aplikace již nemohou tiše procházet celý systém souborů.

"Správci souborů jsou v nových verzích Androidu nefunkční"

Správci souborů požadující MANAGE_EXTERNAL_STORAGE stále fungují. Uživatel pouze musí udělit toto zvláštní oprávnění prostřednictvím nastavení. Většina populárních správců souborů se tomuto požadavku již přizpůsobila.

"Úložiště s rozsahem ovlivňuje pouze SD kartu"

Úložiště s rozsahem se vztahuje na všechna sdílená úložiště, včetně interního sdíleného úložiště. Pojem „externí úložiště“ v systému Android označuje sdílené úložiště, které je přístupné více aplikacím, nikoli nutně fyzické kartě SD.

Praktické tipy pro uživatele

Pokud pravidelně stahujete aplikace nebo spravujete soubory na svém zařízení Android, zde je několik praktických doporučení:

  1. Používejte moderní správce souborů, který podporuje MANAGE_EXTERNAL_STORAGE. Aplikace jako Solid Explorer, MiXplorer a Total Commander se dobře přizpůsobily omezenému úložišti.
  2. Oprávnění udělujte opatrně. Když správce souborů požádá o „Přístup ke všem souborům“, uvědomte si, že se jedná o oprávnění MANAGE_EXTERNAL_STORAGE a je nezbytné pro plnou funkčnost.
  3. Pro náročné operace se soubory použijte ADB. Pokud nemůžete umístit soubory OBB prostřednictvím správce souborů, připojením zařízení k počítači a používáním adb push se zcela obejde omezení úložiště.
  4. Převeďte složité balíčky do jednodušších formátů. Pokud vám soubor XAPK dělá potíže na novějším zařízení, může být extrakce pouze součásti APK cestou nejmenšího odporu.
  5. Udržujte své instalační aplikace aktualizované. Starší verze instalačních programů XAPK nemusí správně zpracovávat úložiště s rozsahem.

Budoucnost úložiště Android

Google pokračuje ve zdokonalování modelu úložiště s každým vydáním Androidu. Android 14 zavedl částečný přístup k médiím, což uživatelům umožňuje sdílet konkrétní fotografie s aplikací namísto celé knihovny. Očekává se, že Android 15 přinese další vylepšení výkonu a použitelnosti Storage Access Framework.

Trend je jasný: Android se posouvá k modelu, kde mají uživatelé jemnou kontrolu nad tím, co jednotlivé aplikace mohou vidět a upravovat. I když to vytváří určité tření pro náročné uživatele a sideloadery, výrazně to zlepšuje soukromí a zabezpečení pro širší uživatelskou základnu.

Práce s omezeným úložištěm bez porušení dat aplikací

Scoped storage představuje jednu z nejvýznamnějších změn v architektuře Androidu v posledních letech. Omezením aplikací na jejich vlastní sandboxy a vyžadováním výslovného souhlasu uživatele pro širší přístup Google dramaticky zlepšil ochranu soukromí platformy. Uživatelům, kteří stahují aplikace a spravují soubory ručně, pochopení těchto omezení pomůže obejít občasné třecí body. A pro vývojáře není přizpůsobení se omezenému úložišti volitelné, ale spíše základní požadavek pro moderní vývoj Androidu.

Instalace souborů APK, umístění souborů OBB a každodenní správa úložiště – to vše běží do stejného systému: úložiště s rozsahem. Jakmile pochopíte, jak to funguje, budete to vy, kdo ovládá své zařízení, místo toho, abyste byli vydáni na milost aplikacím, které by mohly zneužívat široký přístup k souborům.

Navrhl a zdokumentoval Mst Shaefale Vedoucí vývojář a architekt balíčku Android • Ověřeno na Androidu 12–15

Mst Shaefale spravuje nástroje pro slučování XAPK/APKS na straně klienta, analyzátor binárních manifestů a nástroje pro podepisování APK v1+v2 na xapktoapk.com. Zaznamenali jste zastaralý příkaz nebo změnu operačního systému? Pošlete redakční poznámku.