Az Android hatálya alá tartozó tárhely megértése: mi változott és miért számít

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

Ha próbált már fájlokat kezelni Android-eszközön, valószínűleg észrevette, hogy a működés az Android verziójától függően eltérő. Az Android 10-zel kezdődően a Google alapvető változást vezetett be abban, ahogyan az alkalmazások a fájlrendszerrel kommunikálnak. Ez a hatókörre korlátozott tárhely (Scoped Storage) néven ismert módosítás újraírta a megosztott tárhelyen lévő fájlok olvasásának és írásának szabályait. Az alkalmazásokat külső forrásból telepítő, OBB-fájlokat kezelő vagy fájlkezelőket használó felhasználók számára elengedhetetlen ennek a rendszernek a megértése.

Ebben a cikkben megvizsgáljuk, mi az a hatályos tárhely, miért implementálta a Google, hogyan érinti a mindennapi felhasználókat és a fejlesztőket, és mit jelent mindenki számára, aki a Play Áruházon kívül telepít APK- vagy XAPK-fájlokat.

Probléma a régi tárolómodellel

Az Android 10 előtt minden olyan alkalmazás, amely READ_EXTERNAL_STORAGE vagy WRITE_EXTERNAL_STORAGE engedélyt kért, gyakorlatilag minden fájlhoz hozzáférhetett az eszköz megosztott tárhelyén. Ez magában foglalta a fényképeket, dokumentumokat, letöltéseket és még más alkalmazások által létrehozott fájlokat is. Bár ez kényelmessé tette a fájlkezelést, komoly adatvédelmi és biztonsági aggályokat okozott.

Vegyünk egy egyszerű zseblámpa alkalmazást. A régi modellben, ha megadtad neki a tárolási engedélyt, hangtalanul el tudta olvasni a fotóidat, beolvasni a letöltött dokumentumokat, vagy akár módosítani is más alkalmazásokhoz tartozó fájlokat. Nem volt szemcsés ellenőrzés. Vagy teljes hozzáférést adott egy alkalmazásnak a teljes tárhelyéhez, vagy teljesen megtagadta azt.

Ez a széles körű hozzáférés valós problémákhoz vezetett. Egyes alkalmazások érzékeny fájlok után kutatva pásztázták végig a tárhelyet, hogy felhasználói adatokat gyűjtsenek. Mások gazdátlan fájlokat hagytak hátra, amelyek még jóval az alkalmazás eltávolítása után is teleszemetelték a készüléket. A Google-nek olyan megoldásra volt szüksége, amely egyensúlyt teremt a használhatóság és az adatvédelem között – erre született válaszként a hatókörre korlátozott tárhely (Scoped Storage).

Mire jó a kiterjedt tárhely?

A kiterjedt tárhely alapvetően megváltoztatja az alkalmazások és a fájlrendszer közötti kapcsolatot. Ebben a modellben minden alkalmazás saját privát homokozót kap külső tárolón, amely általában a /Android/data/[package.name]/ helyen található. Az alkalmazások szabadon olvashatnak és írhatnak saját homokozójukban anélkül, hogy engedélyre lenne szükségük.

A saját elszigetelt környezeten (sandboxon) kívüli fájlok eléréséhez azonban ellenőrzött API-kon keresztül kell haladni. Így működik az új modell:

Alkalmazás-specifikus tárhely

Minden alkalmazásnak van egy dedikált könyvtára, amelyhez csak ő férhet hozzá. Az alkalmazás eltávolításakor ez a könyvtár automatikusan törlődik. Egyetlen más alkalmazás sem tud olvasni vagy írni erre a helyre root hozzáférés nélkül. Ez kiküszöböli az árva fájlok problémáját, és megakadályozza az alkalmazások közötti adathalászást.

Médiagyűjtemények

A megosztott médiákhoz, például fényképekhez, videókhoz és hangfájlokhoz az Android biztosítja a MediaStore API-t. Az alkalmazások hozzáadhatnak médiát a megosztott gyűjteményekhez, és olvashatnak más alkalmazások által létrehozott médiát, de csak ezen a strukturált felületen keresztül. Az alkalmazások engedély nélkül láthatják a saját médiáját, de más alkalmazások médiájának eléréséhez az Android 13-ban bevezetett READ_MEDIA_IMAGES, READ_MEDIA_VIDEO vagy READ_MEDIA_AUDIO engedélyekre van szükség.

Storage Access Framework

A dokumentumok és más nem médiafájlok esetében az alkalmazásoknak a Storage Access Framework (SAF) rendszert kell használniuk. Ez egy rendszerfájl-választót jelenít meg a felhasználó számára, aki kifejezetten kiválasztja, hogy az alkalmazás mely fájlokhoz vagy könyvtárakhoz férhet hozzá. Az alkalmazás soha nem kap átfogó hozzáférést a teljes fájlrendszerhez.

A MANAGE_EXTERNAL_STORAGE engedély

Az olyan alkalmazások esetében, amelyeknek valóban széles körű fájlhozzáférésre van szükségük, például fájlkezelők, biztonsági mentési eszközök és víruskereső szoftverek, az Android biztosítja a MANAGE_EXTERNAL_STORAGE engedélyt. Ehhez az engedélyhez azonban külön jóváhagyásra van szükség a Google-tól a Play Áruházban terjesztett alkalmazásokhoz, és a felhasználóknak manuálisan kell megadniuk a rendszerbeállításokon keresztül, nem pedig egyszerű párbeszédpanelen.

A közzétételi idővonal

A Google egyik napról a másikra nem kényszerítette ki a hatókörű tárolást. Az átállás fokozatosan történt:

  • Android 10 (API 29): Bevezették a kiterjedt tárhelyet, de az alkalmazások leiratkozhattak a requestLegacyExternalStorage="true" használatáról a manifestben. Ez időt hagyott a fejlesztőknek az alkalmazkodásra.
  • Android 11 (API 30): A rendszer figyelmen kívül hagyta a régi jelzőt az API 30-as vagy újabb verzióját célzó alkalmazásoknál. A kiterjedt tárhely kötelezővé vált az új és frissített alkalmazásokhoz a Play Áruházban.
  • Android 12 és újabb: További finomítások történtek, beleértve a szemcsés médiaengedélyeket és a jobb SAF-teljesítményt.
  • Android 13 (API 33): A széles körű READ_EXTERNAL_STORAGE engedélyt elavulttá vált, bizonyos médiaengedélyek helyett.
  • Android 14 (API 34): Részleges fotó- és videó-hozzáférést vezettek be, lehetővé téve a felhasználók számára, hogy bizonyos fájlokhoz biztosítsanak hozzáférést a teljes médiakönyvtárak helyett.

Hogyan hat a kiterjedt tárolás az oldalbetöltésre

Azon felhasználók számára, akik a Play Áruházon kívülről telepítenek alkalmazásokat, a kiterjedt tárhely néhány gyakorlati kihívást jelent, amelyeket érdemes megérteni.

APK-fájlok letöltése és elérése

Amikor letölt egy APK-fájlt egy böngészőn keresztül, az általában a Letöltések mappába kerül. A hatókörű tárterületen a böngészőalkalmazás birtokolja ezt a fájlt. Ha egy másik alkalmazással, például fájlkezelővel szeretné telepíteni, akkor a fájlkezelőnek megfelelő hozzáférésre van szüksége. A legtöbb modern fájlkezelő ezt megfelelően kezeli a SAF-en keresztül, de a régebbiek nehézségekbe ütközhetnek.

A rendszercsomag-telepítő továbbra is hozzáférhet a fájlválasztón keresztül kifejezetten kiválasztott fájlokhoz, így az APK letöltésének és telepítésének alapvető folyamata zavartalanul működik. A közvetlen fájlelérési útvonalakra épülő automatizált telepítési munkafolyamatok azonban működésképtelenné válhatnak.

OBB fájlok és játékadatok

A hatókörű tárolás itt okozza a legnagyobb súrlódást az oldalbetöltők számára. Sok nagy játék a /Android/obb/[package.name]/-ben tárolt OBB (Opaque Binary Blob) fájlokat használja. A régi modellben egyszerűen átmásolhatta az OBB fájlokat a megfelelő könyvtárba bármely fájlkezelővel.

A hatókörű tárolás esetén a /Android/obb/ könyvtár korlátozott. Android 11 és újabb rendszereken a normál alkalmazások nem tudnak írni egy másik alkalmazás OBB-könyvtárába. Ez azt jelenti, hogy ha olyan XAPK fájlt tölt le, amely OBB adatokat tartalmaz, a telepítőnek speciális kezelésre van szüksége a fájlok megfelelő elhelyezéséhez.

Az olyan eszközök, mint a OBB elszívó, segíthetnek az OBB-fájlok XAPK-csomagokból való kinyerésében, de az újabb Android-verziókon a megfelelő könyvtárba helyezéshez szükség lehet egy MANAGE_EXTERNAL_STORAGE-engedéllyel rendelkező fájlkezelőre vagy ADB-parancsok használatára a számítógépről.

XAPK telepítési szempontok

Az XAPK-fájlok egy APK-t kötnek össze az OBB-adatokkal, és néha felosztják az APK-konfigurációkat. Ezeknek az Android 11 vagy újabb rendszert futtató eszközökre való telepítéséhez olyan telepítőre van szükség, amely megérti a hatókörű tárolási korlátozásokat. A telepítőnek rendelkeznie kell a MANAGE_EXTERNAL_STORAGE engedéllyel, vagy a megfelelő API-kat kell használnia az OBB-fájlok megfelelő helyre történő elhelyezéséhez.

Ez az egyik oka annak, hogy az XAPK fájlok szabványos APK formátumba konvertálása hasznos lehet. Az önálló APK nem igényel OBB-fájlok elhelyezését, ami leegyszerűsíti a telepítési folyamatot az újabb Android-verziókon. A XAPK APK konvertáló segítségével kibonthatja az alap APK-t egy XAPK-csomagból.

Amit a fejlesztőknek tudniuk kell

Ha Android-alkalmazásokat fejleszt, a hatókörű tárhely át kell gondolnia a fájlok kezelését:

  • Használjon alkalmazásspecifikus könyvtárakat minden olyan fájlhoz, amelyre csak az alkalmazásodnak van szüksége. Ezekhez nincs szükség engedélyekre, és eltávolításkor automatikusan törlődnek.
  • Használja a MediaStore-t fotókhoz, videókhoz és hangokhoz, amelyeknek láthatónak kell lenniük más alkalmazások számára, és túl kell élniük az eltávolítást.
  • SAF használata, ha alkalmazásának a felhasználó által kiválasztott dokumentumokkal vagy könyvtárakkal kell működnie.
  • Kerülje a keménykódolt fájl útvonalakat. Az olyan utak, mint a /sdcard/MyApp/, már nem megbízhatóak. Használja helyette a Context.getExternalFilesDir()-t.
  • A Teszt több API-szinten. viselkedése jelentősen eltér az Android 10, 11, 13 és 14 között.

Migrációs stratégiák

Ha az alkalmazás korábban megosztott tárhelyen tárolt fájlokat, akkor migrációs tervre van szüksége. A javasolt megközelítés az, hogy a frissítés utáni első indításkor a meglévő fájlokat alkalmazás-specifikus tárhelyre másolja, majd törölje a régi másolatokat. Használja a Environment.getExternalStorageDirectory()-t az örökölt jelzővel az átmeneti időszakban a régi fájlok olvasásához, majd helyezze át őket az új helyre.

Gyakori tévhitek

"A hatókörű tárhely azt jelenti, hogy az alkalmazások nem férhetnek hozzá egyetlen fájlhoz sem"

Ez tévhit. Az alkalmazások továbbra is szabadon hozzáférhetnek saját fájljaikhoz, bővíthetik a megosztott médiagyűjteményeket, és a rendszer fájlválasztóján keresztül hozzáférést kérhetnek adott fájlokhoz. Ami megváltozott, az az, hogy az alkalmazások többé nem böngészhetik végig észrevétlenül a teljes fájlrendszert.

"A fájlkezelők meghibásodtak az új Android-verziókon"

A MANAGE_EXTERNAL_STORAGE-t kérő fájlkezelők továbbra is működnek. A felhasználónak csak meg kell adnia ezt a különleges engedélyt a beállításokon keresztül. A legtöbb népszerű fájlkezelő már alkalmazkodott ehhez a követelményhez.

"A hatókörű tárhely csak az SD-kártyát érinti"

A hatályos tárhely minden megosztott tárhelyre vonatkozik, beleértve a belső megosztott tárhelyet is. A „külső tárhely” kifejezés az Androidban olyan megosztott tárhelyet jelent, amelyhez több alkalmazás is hozzáférhet, nem feltétlenül fizikai SD-kártya.

Gyakorlati tippek a felhasználóknak

Ha rendszeresen tölt fel alkalmazásokat vagy kezel fájlokat Android-eszközén, íme néhány gyakorlati javaslat:

  1. Használjon modern fájlkezelőt, amely támogatja a MANAGE_EXTERNAL_STORAGE-t. Az olyan alkalmazások, mint a Solid Explorer, a MiXplorer és a Total Commander, jól alkalmazkodtak a hatókörű tároláshoz.
  2. Óvatosan adja meg az engedélyeket. Amikor egy fájlkezelő „Minden fájl hozzáférést” kér, vegye figyelembe, hogy ez a MANAGE_EXTERNAL_STORAGE engedély, és szükséges a teljes funkcionalitáshoz.
  3. A makacs fájlműveletekhez használja az ADB-t. Ha nem tudja elhelyezni az OBB fájlokat egy fájlkezelőn keresztül, az eszköz számítógéphez történő csatlakoztatása és a adb push használata teljes mértékben megkerüli a hatókörű tárolási korlátozásokat.
  4. Konvertálja az összetett csomagokat egyszerűbb formátumokká. Ha egy XAPK fájl problémát okoz egy újabb eszközön, akkor csak az APK komponens kibontása lehet a legkisebb ellenállás útja.
  5. Tartsa frissítve telepítő alkalmazásait. Előfordulhat, hogy az XAPK-telepítők régebbi verziói nem kezelik megfelelően a hatókörű tárolást.

Az Android Storage jövője

A Google minden egyes Android-kiadással tovább finomítja a tárolási modellt. Az Android 14 bevezette a részleges médiahozzáférést, lehetővé téve a felhasználóknak, hogy a teljes fotókönyvtár helyett csak kiválasztott fényképeket osszanak meg egy alkalmazással. Az Android 15 pedig további teljesítmény- és használhatósági fejlesztéseket hoz a Storage Access Framework keretrendszerbe.

A tendencia egyértelmű: az Android egy olyan modell felé halad, amelyben a felhasználók finoman szabályozhatják, hogy az egyes alkalmazások mit láthatnak és módosíthatnak. Noha ez némi súrlódást okoz a hatékony felhasználók és az oldalbetöltők számára, jelentősen javítja a szélesebb felhasználói bázis adatvédelmét és biztonságát.

Munka a kiterjedt tárhellyel az alkalmazásadatok feltörése nélkül

A hatókörre korlátozott tárhely (Scoped Storage) az elmúlt évek egyik legjelentősebb változása az Android architektúrájában. Azáltal, hogy az alkalmazásokat saját elszigetelt könyvtárukra korlátozza, és a szélesebb körű hozzáféréshez a felhasználók kifejezett hozzájárulását kéri, a Google jelentősen megerősítette a platform adatvédelmét. A külső forrásból telepítő és a fájlokat manuálisan kezelő felhasználóknak e korlátozások ismerete segít áthidalni az esetleges akadályokat. A fejlesztők számára pedig a hatókörre korlátozott tárhelyhez való alkalmazkodás nem választható opció, hanem a modern Android-fejlesztés alapvető követelménye.

Az APK-k telepítése, az OBB-fájlok elhelyezése és a mindennapi tárhelykezelés mind ugyanabba a rendszerbe fut bele: a hatókörre korlátozott tárhelybe (Scoped Storage). Ha megérti a működését, Ön tarthatja kézben eszköze irányítását ahelyett, hogy ki lenne szolgáltatva a széles körű fájlhozzáféréssel visszaélő alkalmazásoknak.

Mst Shaefale tervezte és dokumentálta Vezető fejlesztő és Android Package Architect • Ellenőrizve Android 12–15

Az Mst Shaefale karbantartja az ügyféloldali XAPK/APKS egyesítést, bináris jegyzékelemzőt és APK v1+v2 aláíró eszközöket a xapktoapk.com-nél. Elavult parancsot vagy operációs rendszerváltozást észlel? Szerkesztői megjegyzés küldése.