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

Основна мотивація пакетів додатків — зменшення розміру завантаження програми. Типова програма Android має підтримувати кілька щільностей екрана (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), кілька архітектур ЦП (armeabi-v7a, arm64-v8a, x86, x86_64) і кілька мов. У традиційній моделі APK усі ці ресурси об’єднані в один файл, навіть якщо будь-якому пристрою потрібна лише їх частина.

Розглянемо гру, яка включає рідні бібліотеки для чотирьох архітектур ЦП і текстури для п’яти щільностей екрана. Універсальний APK може мати 200 МБ, але версія для конкретного пристрою, яка містить лише відповідну архітектуру та щільність, може мати 80 МБ. Це означає зменшення розміру завантаження на 60%.

Google повідомляє, що додатки, які використовують пакети App Bundle, у середньому на 15% менші за універсальні еквіваленти APK. Для великих програм та ігор економія може бути значною. Менші завантаження означають швидші встановлення, менше споживання пропускної здатності та менше перерваних установок через проблеми з розміром.

Як пакети додатків працюють всередині

Структура пучка

Файл AAB організовано в модулі, кожен з яких містить власний код, ресурси та активи. Найбільш поширена структура включає:

  • Базовий модуль: Містить основний код програми та ресурси, необхідні кожному пристрою. Це завжди встановлено.
  • Поділ конфігурації: Окремі розділи для мовних ресурсів, ресурсів щодо щільності екрана та власних бібліотек ABI (архітектура процесора).
  • Модулі динамічних функцій: Додаткові модулі, які можна завантажити на вимогу після початкової інсталяції.
  • Пакети ресурсів: Великі ресурси, як-от ігрові рівні чи медіафайли, які можна завантажувати під час встановлення, за запитом або у фоновому режимі.

Розділена генерація APK

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

  • base.apk, основний код програми та основні ресурси
  • split_config.arm64_v8a.apk, власні бібліотеки для процесора пристрою
  • split_config.xxhdpi.apk, Ресурси для щільності екрану пристрою
  • split_config.en.apk, Мовні ресурси для локалі користувача

Ці розділені APK-файли встановлюються разом як одна логічна програма. Менеджер пакетів Android розглядає їх як одну програму, але вони є фізично окремими файлами на пристрої. Це механізм, який дозволяє заощадити розмір.

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

Однією з найпотужніших функцій App Bundle є динамічна доставка. Розробники можуть позначити певні функції як доступні для завантаження за запитом. Наприклад, програма для редагування фотографій може містити розширені фільтри як модуль динамічних функцій. Користувачі, які ніколи не використовують ці фільтри, ніколи їх не завантажують, заощаджуючи місце для зберігання.

Модулі динамічних функцій завантажуються та встановлюються через бібліотеку 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. Альтернативні магазини додатків і прямі канали розповсюдження все ще можуть приймати файли APK. Розробники, які хочуть розповсюджувати за межами Play, можуть продовжувати створювати універсальні файли APK разом із завантаженими файлами AAB.

Однак деякі розробники створюють лише AAB і повністю покладаються на Play для розповсюдження. Це означає, що програми від цих розробників важче отримати поза екосистемою Play Store. Сховища додатків сторонніх розробників адаптувалися, розміщуючи розділені колекції APK (у вигляді файлів XAPK або APKS) або використовуючи Bundletool для створення універсальних APK.

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

Модулі динамічних функцій представляють одну з найцікавіших можливостей формату App Bundle. Ось кілька реальних випадків використання:

  • Особливості камери: Додаток може містити фільтри AR як динамічний модуль, який завантажується лише тоді, коли користувач вперше отримує доступ до функції камери.
  • Мовні пакети: Дані перекладу для менш поширених мов можна надавати на вимогу, а не в комплекті з кожною установкою.
  • Ігри Рівні гри: можуть надавати додатковий вміст у міру просування гравців, зберігаючи початкове завантаження невеликим.
  • Професійні інструменти: Розширені функції в програмах для підвищення продуктивності можна надавати лише тим користувачам, яким вони потрібні.

Для користувачів це означає, що розмір встановленої програми може з часом збільшуватися в міру завантаження динамічних модулів. Це також означає, що для спільного використання такої програми потрібно включити всі завантажені модулі, що ще більше ускладнює процес вилучення.

Найкращі практики для розробників

Якщо ви розробляєте програми для Android, ось рекомендації щодо ефективної роботи з App Bundle:

  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. Помітили застарілу команду чи зміну ОС? Надіслати редакційну примітку.