Разделённые APK и Android App Bundle простыми словами
Advertisement
От одного APK к нескольким
Раньше приложение было одним APK с кодом и ресурсами под любой размер экрана, язык и процессор. С августа 2021 года Google Play требует загружать новые приложения в виде Android App Bundle (.aab). Play хранит бандл и при каждой загрузке генерирует набор APK, из которых приложение состоит на конкретном устройстве.
Составные части
- base.apk: код и ресурсы, общие для всех устройств. Устанавливается отдельно, только если приложение так собрано; большинство современных приложений — нет.
- Части конфигурации:
split_config.arm64_v8a.apk(нативный код под процессор),split_config.xxhdpi.apk(изображения под плотность экрана),split_config.en.apk,split_config.ru.apk(строки языков). Устройство получает по одной каждого вида. - Части функций: необязательные модули, которые приложение скачивает по требованию, например редактор или функцию камеры.
Все части одного приложения имеют общее имя пакета, код версии и подпись. Android устанавливает их в одной сессии и считает одним приложением.
Почему установка только base.apk не работает
Приложение запускается, ищет ресурс или нативную библиотеку, лежащую в отдельной части, и падает с Resources$NotFoundException или UnsatisfiedLinkError, либо установщик отказывает с INSTALL_FAILED_MISSING_SPLIT. Поэтому XAPK нужно устанавливать целиком; см. установку разделённых APK через SAI.
Как зеркала обходятся с бандлами
Поскольку Play генерирует наборы под устройство, зеркало хранит либо универсальный APK (сборку разработчика одним файлом, содержащую все конфигурации, — крупнее, но ставится где угодно), либо XAPK с базой и частями самой распространённой конфигурации (arm64, xxhdpi, несколько языков). На страницах версий здесь у каждого файла указан формат, так что для необычного устройства можно выбрать универсальный APK, а для современного телефона — XAPK.
Как проверить, что стоит на устройстве
App Manager или SAI перечисляют части установленного приложения в его сведениях. adb shell pm path <пакет> выводит каждый файл APK приложения, по одному в строке. Приложение с одной строкой установлено как универсальный или однофайловый пакет.
В инструкции описано общее поведение Android; названия пунктов меню зависят от производителя и версии. Загрузки на этом сайте идут с проверенных сторонних зеркал и никогда не изменяются нами.