Android App Bundle (AAB): Пълно ръководство за разработчици и потребители

A sealed parcel labeled AAB on a developer desk, illustrating the Android App Bundle format

През август 2021 г. Google взе решение, което фундаментално промени начина, по който се разпространяват приложенията за Android: всички нови приложения, изпратени в Google Play Store, трябва да използват формата Android App Bundle (AAB) вместо традиционния APK. Тази промяна засегна разработчиците, потребителите и цялата екосистема на разпространение на приложения на трети страни. Но какво точно е App Bundle, как работи и защо трябва да ви интересува?

Това ръководство обхваща всичко от техническите елементи на формата AAB до практическите последици за потребителите, които искат да споделят приложения с приятели или да ги инсталират на устройства без достъп до Play Store.

Какво е Android App Bundle?

Android App Bundle е формат за публикуване, който съдържа целия компилиран код и ресурси на приложението, но отлага генерирането на крайния инсталируем APK за Google Play. Мислете за него като за главен шаблон, от който сървърите на Google създават оптимизирани, специфични за устройството пакети в движение.

За разлика от APK, който е готов за инсталиране пакет, AAB файл не може да бъде директно инсталиран на устройство. Това е компилационен артефакт, който се качва в Play Store, където инфраструктурата на Google го обработва и генерира персонализирани APK за всяка конфигурация на устройство.

Разширението на файла е .aab и вътрешно използва протоколен буферен формат, комбиниран със структура, подобна на ZIP. Той съдържа DEX байт код на приложението, ресурси, активи, собствени библиотеки и специален файл с метаданни на пакета, който казва на Google Play как да раздели съдържанието.

Защо задължителни пакети приложения от Google

Основната мотивация зад App Bundles е намаляване на размерите за изтегляне на приложения. Типично приложение за Android трябва да поддържа множество плътности на екрана (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), множество процесорни архитектури (armeabi-v7a, arm64-v8a, x86, x86_64) и множество езици. В традиционния APK модел всички тези ресурси са групирани в един файл, въпреки че всяко дадено устройство се нуждае само от малка част от тях.

Помислете за игра, която включва собствени библиотеки за четири CPU архитектури и текстури за пет плътности на екрана. Универсалният APK може да бъде 200 MB, но специфична за устройството версия, съдържаща само съответната архитектура и плътност, може да бъде 80 MB. Това е 60% намаление на размера за изтегляне.

Google съобщава, че приложенията, използващи App Bundle, са средно с 15% по-малки от техните универсални APK еквиваленти. За големи приложения и игри спестяванията могат да бъдат много по-драматични. По-малките изтегляния означават по-бързи инсталации, по-малко потребление на честотна лента и по-малко изоставени инсталации поради проблеми с размера.

Как App Bundle работят вътрешно

Структурата на пакета

AAB файлът е организиран в модули, като всеки модул съдържа собствен код, ресурси и активи. Най-често срещаната структура включва:

  • Базов модул: Съдържа основния код на приложението и ресурси, от които се нуждае всяко устройство. Това винаги е инсталирано.
  • Разделяне на конфигурацията: Отделни секции за езикови ресурси, ресурси за плътност на екрана и собствени библиотеки за ABI (CPU архитектура).
  • Модули с динамични функции: Допълнителни модули, които могат да бъдат изтеглени при поискване след първоначалната инсталация.
  • Пакети с активи: Големи активи като нива на игра или медии, които могат да бъдат доставени по време на инсталиране, при поискване или във фонов режим.

Разделено генериране на APK

Когато потребител изтегли приложение от Play Store, сървърите на Google проверяват конфигурацията на устройството и генерират набор от разделени APK файлове, пригодени за това конкретно устройство. Типичната инсталация може да включва:

  • base.apk, Основният код на приложението и основните ресурси
  • split_config.arm64_v8a.apk, Родни библиотеки за процесора на устройството
  • split_config.xxhdpi.apk, Ресурси за плътността на екрана на устройството
  • split_config.en.apk, Езикови ресурси за локала на потребителя

Тези разделени APK файлове се инсталират заедно като едно логическо приложение. Мениджърът на пакети за Android ги третира като едно приложение, но те са физически отделни файлове на устройството. Това е механизмът, който позволява спестяване на размер.

Динамична доставка

Една от най-мощните характеристики на App Bundles е динамичната доставка. Разработчиците могат да маркират определени функции като достъпни за изтегляне при поискване. Например, приложение за редактиране на снимки може да включва разширени филтри като динамичен функционален модул. Потребителите, които никога не използват тези филтри, никога не ги изтеглят, спестявайки място за съхранение.

Модулите с динамични функции се изтеглят и инсталират чрез библиотеката на Play Core по време на изпълнение. Приложението може да провери дали даден модул е ​​инсталиран и да поиска изтеглянето му, когато е необходимо, така че потребителят да изпита новата функционалност като малко изтегляне в приложението, а не пълно преинсталиране.

AAB срещу APK: Основни разлики

Разбирането на разликите между тези формати помага да се изясни кога всеки е подходящ:

  • Инсталируемост: APK файловете могат да бъдат директно инсталирани на всяко устройство с Android. AAB файловете не могат да се инсталират директно и първо трябва да бъдат обработени.
  • размер: Универсален APK съдържа ресурси за всички конфигурации. AAB позволява доставка на специфично устройство, което води до по-малки изтегляния.
  • Подписване: С APK файловете разработчикът подписва окончателния инсталируем пакет. С AAB разработчикът подписва пакета, а Google преподписва генерираните APK чрез подписване на приложения в Play.
  • Разпределение: APK файловете могат да се разпространяват чрез всеки канал. AAB са предназначени основно за Play Store, въпреки че инструменти като bundletool могат да генерират APK от тях локално.
  • Възможност за споделяне: Можете лесно да споделяте APK файл с друг човек. Споделянето на приложение, инсталирано от AAB, изисква събиране на всички разделени APK файлове, което е по-сложно.

Спорът за подписването

Един от най-обсъжданите аспекти на мандата на AAB е Игра Подписване на приложения. Когато разработчик качи AAB, Google държи ключа за подписване, използван за подписване на окончателните APK файлове, доставени на потребителите. Това означава, че Google технически има способността да променя съдържанието на APK, преди да го подпише и достави.

Google твърди, че това е необходимо, защото те трябва да подпишат разделените APK файлове, които генерират. Разработчиците запазват ключ за качване, за да удостоверят своите качвания, но действителният ключ за подписване на приложение се управлява от инфраструктурата на Google.

За повечето разработчици това е разумен компромис. Google предоставя услуги за архивиране и възстановяване на ключове и рискът от загуба на ключ (което би попречило завинаги на актуализациите на приложения) е елиминиран. Фокусираните върху поверителността разработчици и защитниците на отворен код обаче изразиха опасения относно тази централизация на доверието.

Какво означава това за потребители, които споделят приложения

Преминаването към App Bundle има значителни последици за потребителите, които искат да споделят приложения извън Play Store:

Извличане на инсталирани приложения

Когато извлечете инсталирано приложение от AAB, не получавате нито един APK файл. Вместо това получавате колекция от разделени APK файлове. Тези разделяния са специфични за устройството, което означава, че приложение, извлечено от телефон с процесор ARM64 и екран xxhdpi, няма да работи на устройство с различна конфигурация.

XAPK и APKS формати

За да се отговори на предизвикателството за споделяне на разделени APK файлове, бяха създадени контейнерни формати като XAPK и APKS. Тези формати обединяват всички разделени APK файлове заедно в един файл за изтегляне. Когато срещнете XAPK файл, той вероятно съдържа приложение, което първоначално е било разпространено като App Bundle.

Нашият XAPK към APK конвертор може да ви помогне да извлечете основния APK от тези контейнерни формати. Имайте предвид обаче, че основният APK може да не съдържа всички ресурси, необходими за правилното функциониране на приложението на всяко устройство, тъй като плътността и специфичните за ABI ресурси може да са в разделените APK.

Използване на bundletool

Google предоставя инструмент с отворен код, наречен bundletool, който може да генерира локално APK файлове от AAB файл. Разработчиците могат да използват това, за да създават универсални APK файлове за тестване или алтернативно разпространение. Командата изглежда така:

bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal

Това генерира универсален APK, който съдържа всички ресурси за всички конфигурации. Той ще бъде по-голям от компилация за конкретно устройство, но работи на всяко устройство. Това е подходът, използван от нашия AAB към APK конвертор.

Въздействие върху алтернативните магазини за приложения

Мандатът на AAB засяга предимно Google Play Store. Алтернативните магазини за приложения и директните канали за разпространение все още могат да приемат APK файлове. Разработчиците, които искат да разпространяват извън Play, могат да продължат да изграждат универсални APK заедно със своите AAB качвания.

Някои разработчици обаче изграждат само AAB и разчитат изцяло на Play за разпространение. Това означава, че приложенията от тези разработчици са по-трудни за получаване извън екосистемата на Play Store. Хранилищата на приложения на трети страни са се адаптирали чрез хостване на разделени APK колекции (като XAPK или APKS файлове) или чрез използване на bundletool за генериране на универсални APK.

Модули с динамични функции на практика

Модулите с динамични функции представляват една от най-интересните възможности на формата App Bundle. Ето някои случаи на употреба в реалния свят:

  • Характеристики на камерата: Едно приложение може да включва AR филтри като динамичен модул, изтеглен само когато потребителят за първи път получи достъп до функцията на камерата.
  • Езикови пакети: Данните за превод за по-рядко срещани езици могат да бъдат доставени при поискване, вместо да се доставят в пакет с всяка инсталация.
  • Нива на играта: Игрите могат да предоставят допълнително съдържание, докато играчите напредват, като поддържат първоначалното изтегляне малко.
  • Професионални инструменти: Разширените функции в приложенията за производителност могат да бъдат доставени само на потребители, които имат нужда от тях.

За потребителите това означава, че инсталираният размер на приложението може да нарасне с течение на времето, когато се изтеглят динамични модули. Това също означава, че споделянето на такова приложение изисква включване на всички изтеглени модули, което допълнително усложнява процеса на извличане.

Най-добри практики за разработчици

Ако разработвате приложения за Android, ето препоръки за ефективна работа с App Bundles:

  1. Винаги тествайте локално с bundletool преди качване в Play. Генерирайте специфични за устройството APK файлове и проверете дали работят правилно.
  2. Използвайте вътрешната тестова песен на Play Console, за да проверите дали разделените APK файлове се инсталират и функционират правилно на реални устройства.
  3. Помислете за предоставяне на универсален APK за алтернативни канали за разпространение, ако вашата потребителска база се простира отвъд Play Store.
  4. Обърнете внимание на границите на модулите с динамични функции. Характеристиките, които се използват често, трябва да бъдат в основния модул, а не в динамичните модули.
  5. Тествайте на устройства с различни конфигурации, за да се гарантира, че конфигурационните разделяния се генерират правилно и няма липсващи ресурси.
  6. Пазете ключа си за качване защитен. Докато Google управлява ключа за подписване на приложение, вашият ключ за качване удостоверява вашата самоличност като разработчик.

Бъдещето на разпространението на приложения

Форматът на App Bundle продължава да се развива. Google представи функции като Play Asset Delivery за големи игрови активи, SDK Runtime за рекламни SDK и подобрена поддръжка за Wear OS и Android TV конфигурации. Тенденцията е към по-подробна доставка при поискване на компоненти на приложения.

За потребителите това означава, че концепцията за един самостоятелен файл на приложение става все по-рядко срещана за приложенията на Play Store. Разбирането на формати като XAPK, APKS и наличните инструменти за работа с тях става все по-важно за всеки, който управлява приложения извън стандартния поток на Play Store.

Кога да запазите AAB или кога да изградите универсален APK

Android App Bundle представлява фундаментална промяна в начина, по който приложенията се пакетират и доставят. Въпреки че носи истински предимства по отношение на размера на изтеглянето и ефективността на доставката, той също така въвежда сложност за потребителите, които споделят приложения или ги инсталират от алтернативни източници. Разбирането как работят AAB, как генерират разделени APK файлове и какви инструменти са налични за конвертиране между формати, ви дава това, от което се нуждаете, за да изберете правилния формат и да конвертирате между тях с увереност.

Разработчиците достигат до AAB, за да оптимизират начина, по който се доставя дадено приложение; повечето обикновени потребители го срещат само когато се опитват да инсталират нещо на устройство без достъп до Play Store. Така или иначе, нещото, което си струва да запомните, е просто: AAB е формат за публикуване, а не формат за инсталиране, и има инструменти, които преодоляват празнината между двете.

Проектиран и документиран от Mst Shaefale Водещ разработчик и архитект на пакети за Android • Проверен на Android 12–15

Mst Shaefale поддържа инструментите за подписване на XAPK/APKS от страна на клиента, парсер на бинарен манифест и APK v1+v2 в xapktoapk.com. Забележите остаряла команда или промяна на операционната система? Изпратете редакционна бележка.