В августе 2021 года Google приняла решение, которое фундаментально изменило способ распространения приложений для Android: все новые приложения, размещаемые в Google Play Store, должны использовать формат Пакет приложений для Android (AAB) вместо традиционного APK. Этот сдвиг затронул разработчиков, пользователей и всю экосистему распространения сторонних приложений. Но что такое App Bundle, как он работает и почему вас это должно волновать?
В этом руководстве рассматривается все: от технических особенностей формата AAB до практических последствий для пользователей, которые хотят делиться приложениями с друзьями или устанавливать их на устройства без доступа к Play Store.
Что такое пакет приложений для Android?
Android App Bundle — это формат публикации, который содержит весь скомпилированный код и ресурсы приложения, но откладывает создание окончательного устанавливаемого APK-файла в Google Play. Думайте об этом как о главном шаблоне, на основе которого серверы Google на лету создают оптимизированные пакеты для конкретных устройств.
В отличие от APK, который представляет собой готовый к установке пакет, файл AAB нельзя установить непосредственно на устройство. Это артефакт сборки, который загружается в Play Store, где инфраструктура Google обрабатывает его и генерирует оптимизированные APK-файлы для каждой конфигурации устройства.
Расширение файла — .aab, и внутри он использует формат буфера протокола в сочетании со структурой, подобной ZIP. Он содержит байт-код DEX приложения, ресурсы, ассеты, нативные библиотеки и специальный файл метаданных пакета, который указывает Google Play, как именно разделять содержимое.
Зачем нужны пакеты приложений Google?
Основная мотивация создания App Bundle — уменьшение размера загрузки приложения. Типичное приложение Android должно поддерживать несколько плотностей экрана (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), несколько архитектур ЦП (armeabi-v7a, Arm64-v8a, x86, x86_64) и несколько языков. В традиционной модели APK все эти ресурсы объединены в один файл, хотя любому устройству нужна лишь часть из них.
Рассмотрим игру, которая включает в себя собственные библиотеки для четырех архитектур ЦП и текстуры для пяти плотностей экрана. Универсальный APK-файл может иметь размер 200 МБ, а версия для конкретного устройства, содержащая только соответствующую архитектуру и плотность, может иметь размер 80 МБ. Это сокращение размера загрузки на 60%.
Google сообщает, что приложения, использующие App Bundles, в среднем на 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 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 является Подписание приложений в Google Play. Когда разработчик загружает AAB, Google хранит ключ подписи, используемый для подписи окончательных APK-файлов, доставленных пользователям. Это означает, что Google технически имеет возможность изменять содержимое APK перед его подписанием и доставкой.
Google утверждает, что это необходимо, поскольку им необходимо подписывать генерируемые ими разделенные APK-файлы. Разработчики сохраняют ключ загрузки для аутентификации своих загрузок, но фактический ключ подписи приложения управляется инфраструктурой Google.
Для большинства разработчиков это разумный компромисс. Google предоставляет услуги резервного копирования и восстановления ключей, а риск потери ключей (который может навсегда препятствовать обновлению приложений) исключается. Однако разработчики, ориентированные на конфиденциальность, и сторонники открытого исходного кода выразили обеспокоенность по поводу такой централизации доверия.
Что это значит для пользователей, которые делятся приложениями
Переход к пакетам приложений имеет серьезные последствия для пользователей, которые хотят делиться приложениями за пределами Play Store:
Извлечение установленных приложений
Когда вы извлекаете приложение, установленное из AAB, вы не получаете ни одного APK-файла. Instead, you get a collection of split APKs. Эти разделения зависят от устройства, то есть приложение, извлеченное из телефона с процессором ARM64 и экраном xxhdpi, не будет работать на устройстве с другой конфигурацией.
Форматы XAPK и APKS
Чтобы решить проблему совместного использования разделенных APK, были созданы такие форматы контейнеров, как XAPK и APKS. Эти форматы объединяют все разделенные APK-файлы в один загружаемый файл. Когда вы сталкиваетесь с файлом XAPK, он, скорее всего, содержит приложение, которое изначально распространялось как пакет приложений.
Наш Конвертер XAPK в APK может помочь вам извлечь базовый APK из этих форматов контейнеров. Однако имейте в виду, что базовый APK-файл сам по себе может не содержать всех ресурсов, необходимых для правильной работы приложения на каждом устройстве, поскольку ресурсы, специфичные для плотности и ABI, могут находиться в разделенных APK-файлах.
Использование бандл-инструмента
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-фильтры в виде динамического модуля, загружаемого только при первом доступе пользователя к функции камеры.
- Языковые пакеты: Данные перевода для менее распространенных языков могут предоставляться по требованию, а не включаться в комплект каждой установки.
- Уровни игры: Games может предоставлять дополнительный контент по мере продвижения игроков, сохраняя при этом первоначальную загрузку небольшой.
- Профессиональные инструменты: Расширенные функции приложений для повышения производительности могут быть доступны только тем пользователям, которым они необходимы.
Для пользователей это означает, что размер установленного приложения может со временем увеличиваться по мере загрузки динамических модулей. Это также означает, что совместное использование такого приложения требует включения всех загруженных модулей, что еще больше усложняет процесс извлечения.
Лучшие практики для разработчиков
Если вы разрабатываете приложения для Android, вот рекомендации по эффективной работе с пакетами приложений:
- Всегда тестируйте с помощью Bundletool локально. перед загрузкой в Play. Создайте APK-файлы для конкретных устройств и убедитесь, что они работают правильно.
- Используйте версию внутреннего тестирования Play Console., чтобы убедиться, что разделенные APK-файлы правильно устанавливаются и работают на реальных устройствах.
- Рассмотрите возможность предоставления универсального APK для альтернативных каналов распространения, если ваша пользовательская база выходит за пределы Play Store.
- Помните о границах модулей динамических функций. Часто используемые функции должны находиться в базовом модуле, а не в динамических модулях.
- Тестируйте на устройствах с разными конфигурациями, чтобы гарантировать правильность создания разделения конфигурации и отсутствие пропущенных ресурсов.
- Храните ключ загрузки в безопасности. Хотя 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 — это формат публикации, а не формат установки, и существуют инструменты, которые устраняют разрыв между ними.