Soubory rozšíření APK

Některé aplikace (například některé hry) vyžadují více prostředků a prostředků, než je možné vyžadovat v maximálním limitu velikosti aplikace pro Android, který Google Play. Toto omezení závisí na verzi Androidu, pro kterou je soubor APK určený:

  • 100 MB pro rozhraní API, která cílí na Android 4.0 nebo vyšší (úroveň rozhraní API 14 nebo vyšší).
  • 50 MB pro rozhraní API, která cílí na Android 3.2 nebo nižší (úroveň rozhraní API 13 nebo vyšší).

Aby bylo možné toto omezení překonat, Google Play bude hostovat a distribuovat dva soubory rozšíření, aby spolu s souborem APK bylo možné aplikaci nepřímo překročit tento limit.

Na většině zařízení se při instalaci aplikace stáhnou soubory rozšíření společně se souborem APK a uloží se do sdíleného úložiště (SD karta nebo oddíl připojitelný přes USB) na zařízení. Na několika starších zařízeních se rozšiřující soubory nemusí automaticky instalovat se souborem APK. V těchto situacích je nutné, aby aplikace obsahovala kód, který bude stahovat soubory rozšíření při prvním spuštění aplikace uživatelem.

Soubory rozšíření jsou považovány za neprůhledné binární objekty blob (obb) a mohou mít velikost až 2 GB. Android po stažení neprovádí žádné zvláštní zpracování těchto souborů – soubory mohou být v libovolném formátu vhodném pro aplikaci. Koncepčně je doporučený přístup k rozšiřujícím souborům následující:

  • Hlavní rozšíření – Tento soubor je primárním rozšiřujícím souborem pro prostředky a prostředky, které se nevejde do limitu velikosti souboru APK. Hlavní rozšiřující soubor by měl obsahovat primární prostředky, které aplikace potřebuje, a měl by se jen zřídka aktualizovat.
  • Rozšíření opravy – je určené pro malé aktualizace hlavního rozšiřujícího souboru. Tento soubor je možné aktualizovat. Za provedení všech potřebných oprav nebo aktualizací z tohoto souboru zodpovídá aplikace.

Soubory rozšíření se musí nahrát současně s nahrávkem souboru APK. Google Play neumožňuje nahrání rozšiřujícího souboru do existujícího souboru APK ani aktualizaci existujících souborů AKS. Pokud je nutné aktualizovat rozšiřující soubor, musí se s aktualizovanou příponou nahrát nový versionCode soubor APK.

Rozšíření souboru Storage

Když se soubory stáhnou do zařízení, uloží se do sdíleného úložiště/Android/obb/package-name:

  • shared-store – adresář určený parametrem .
  • package-name – název balíčku ve stylu Javy aplikace.

Po stažení by se rozšiřující soubory neměly přesouvat, měnit, přejmenovávat ani odstraňovat ze svého umístění na zařízení. To způsobí, že se soubory rozšíření znovu stáhnou a staré soubory se odstraní. Kromě toho by adresář rozšiřujícího souboru měl obsahovat pouze soubory rozšiřujícího balíčku.

Soubory rozšíření nabízejí žádné zabezpečení ani ochranu jejich obsahu – ostatní aplikace nebo uživatelé mají přístup ke všem souborům uloženým ve sdíleném úložišti.

Pokud je nutné rozbalit rozbalovací soubor, rozbalené soubory by měly být uložené v samostatném adresáři, například v Android.OS.Environment.ExternalStorageDirectory .

Alternativou k extrahování souborů z rozbalení souboru je čtení prostředků nebo prostředků přímo z tohoto rozšiřujícího souboru. Rozbalovací soubor není nic jiného než soubor ZIP, který lze použít s odpovídajícím souborem ContentProvider . Knihovna Android.Play.ExpansionLibrary obsahujeSystem.IO.Compression.Zip , které obsahuje , které umožní přímý přístup k souborům některých mediálních souborů. Pokud jsou multimediální soubory zabalené do souboru ZIP, volání přehrávání médií mohou soubory v souboru ZIP používat přímo, aniž by bylo zazipované. Multimediální soubory by se po přidání do souboru zip neměly komprimovat.

Formát FileName

Po stažení rozšiřujících souborů Google Play rozšíření pomocí následujícího schématu:

[main|patch].<expansion-version>.<package-name>.obb

Toto schéma má tyto tři součásti:

  • main nebo patch – Určuje, jestli se jedná o hlavní soubor nebo rozšiřující soubor opravy. Každý z nich může být pouze jeden.
  • <expansion-version> – Jedná se o celé číslo, které odpovídá souboru versionCode APK, ke které byl soubor poprvé přidružen.
  • <package-name> – Jedná se o název balíčku ve stylu Javy aplikace.

Pokud je například verze APK 21 a název balíčku je , hlavní rozšiřující soubor bude mít název mono.samples.helloworldmono.samples.helloworld

Proces stahování

Při instalaci aplikace z Google Play by se měly soubory rozšíření stáhnout a uložit společně se souborem APK. V některých situacích k tomu nemusí dojít nebo může dojít k odstranění rozšiřujících souborů. Aby aplikace tuto podmínku zvládla, musí zkontrolovat, jestli existují soubory rozšíření, a v případě potřeby je stáhnout. Následující vývojový diagram zobrazuje doporučený pracovní postup tohoto procesu:

Vývojový diagram rozšíření APK

Při spuštění aplikace by měla zkontrolovat, jestli na aktuálním zařízení existují příslušné soubory rozšíření. Pokud ne, musí aplikace vytvořit požadavek z Google Play aplikace. Tato kontrola se provádí pomocí knihovny LVL (License Verification Library)a musí se provést pro bezplatné i licencované aplikace. LVL primárně používají placené aplikace k vynucení licenčních omezení. Společnost Google ale rozšířila LVL tak, aby ji bylo možné použít i s rozšiřujícími knihovnami. Bezplatné aplikace musí provést kontrolu LVL, ale mohou ignorovat licenční omezení. Požadavek LVL zodpovídá za poskytnutí následujících informací o rozšiřujících souborech, které aplikace vyžaduje:

  • Velikost souboru – Velikosti souborů rozšiřujících souborů se používají jako součást kontroly, která určuje, jestli se už stáhly správné soubory rozšíření.
  • Názvy souborů – název souboru (na aktuálním zařízení), do kterého se musí balíčky rozšíření uložit.
  • Adresa URL pro Download – adresa URL, která by se měla použít ke stažení rozšiřujících balíčků. Toto je jedinečné pro každé stažení a brzy po jeho stažení vyprší jeho platnost.

Po provedení kontroly LVL by aplikace měla stáhnout soubory rozšíření s ohledem na následující body v rámci stahování:

  • Zařízení nemusí mít dostatek místa pro uložení rozšiřujících souborů.
  • Pokud Wi-Fi dostupná, měl by mít uživatel povoleno stahování pozastavit nebo zrušit, aby se zabránilo nežádoucím poplatkům za data.
  • Rozšiřující soubory se stáhnou na pozadí, aby se zabránilo blokování interakcí uživatelů.
  • Zatímco stahování probíhá na pozadí, měl by se zobrazit indikátor průběhu.
  • Chyby, ke kterým došlo během stahování, jsou řádně zpracovány a obnovitelné.

Přehled architektury

Při spuštění hlavní aktivity zkontroluje, jestli se stáhnou soubory rozšíření. Pokud jsou soubory staženy, je nutné zkontrolovat jejich platnost.

Pokud soubory rozšíření nebyly staženy nebo jsou aktuální soubory neplatné, je nutné stáhnout nové soubory rozšíření. Ohraničené služby se vytvoří jako součást aplikace. Při spuštění hlavní aktivity aplikace se pomocí ohraničené služby provede kontrola u licenčních služeb Google a zjistí názvy rozšiřujících souborů a adresu URL souborů, které se mají stáhnout. Ohraničovaná služba pak stáhne soubory ve vlákně na pozadí.

Aby se usnadnilo úsilí potřebné k integraci rozšiřujících souborů do aplikace, vytvořil Google v Javě několik knihoven. Jsou to tyto knihovny:

  • Knihovna downloaderů – jedná se o knihovnu, která snižuje úsilí potřebné k integraci rozšiřujících souborů v aplikaci. Knihovna stáhne rozšiřující soubory ve službě na pozadí, zobrazí oznámení uživatelů, zřídí problémy se síťovým připojením, obnoví stahování atd.
  • License Verification Library (LVL) – knihovna pro provádění a zpracování volání služeb licencování aplikací. Můžete ji také použít k provádění kontrol licencování a zjistit, jestli má aplikace oprávnění k použití na zařízení.
  • Knihovna ZIP rozšíření APK (volitelné) – Pokud jsou rozbalovací soubory v souboru ZIP, bude tato knihovna fungovat jako poskytovatel obsahu a umožní aplikaci číst prostředky a prostředky přímo ze souboru zip, aniž by bylo možné rozbalit soubor ZIP.

Tyto knihovny byly portovány do jazyka C# a jsou k dispozici v rámci licence Apache 2.0. Pokud chcete rychle integrovat soubory rozšíření do existující aplikace, můžete tyto knihovny přidat do existující aplikace Xamarin.Android. Kód je k dispozici v Android.Play.ExpansionLibrary na GitHub.