Поиск по сайту:

APK vs App Bundle: почему Google меняет формат приложения для Android?


Приложения для Android исторически распространялись в виде APK (пакетов Android). APK содержит скомпилированную версию приложения, а также важные мультимедийные ресурсы, такие как значки и звуки. Они также включают файл манифеста, предоставляющий информацию о приложении для системы Android, а также набор сертификатов и ключей подписи, подтверждающих личность издателя.

В мае 2018 года Google запустил новый формат упаковки приложений, предназначенный для устранения некоторых недостатков APK. Наборы Android App Bundle (AAB) выполняют ту же роль, что и APK, но со значительными отличиями в реализации.

На Google I/O 2021 Google объявила, что AAB станет форматом приложений для Android по умолчанию. С конца августа Play Store будет требовать, чтобы новые публикации приложений представлялись в виде AAB. Конечным пользователям, которые используют только Play Store, не нужно ничего делать. Для разработчиков история немного сложнее.

Преимущества набора приложений

Первоначально AAB был представлен как способ решения некоторых распространенных проблем с упаковкой в экосистеме Android. Android работает на тысячах устройств с огромным диапазоном размеров экрана, базовых показателей производительности и архитектуры ЦП. Формат APK не соответствует этому разнообразию, поскольку каждый пакет содержит все ресурсы приложения.

Если вы устанавливаете приложение на свой телефон, вам не нужно загружать варианты графики с высоким разрешением для планшетов. Тем не менее, с APK вы обычно получаете все варианты, что приводит к увеличению загрузки и увеличению использования хранилища. Если разработчик хочет предложить более оптимизированные сборки, ему необходимо вручную скомпилировать и подписать несколько разных APK.

Пакеты приложений используют другой подход. По своему замыслу они «объединяют» несколько разных версий приложения в один логический пакет. Затем Play Store отправляет только соответствующие биты на каждое устройство, запрашивающее установку. Он будет создавать правильный пакет по запросу для каждого пользователя, поэтому американский пользователь с 10-дюймовым устройством Intel получит другую загрузку, чем немец с 5-дюймовым телефоном ARM. Важно отметить, что устройства по-прежнему получают APK — пользователи никогда не будут напрямую взаимодействовать с App Bundle. Разница в том, что APK генерируются динамически в облаке.

Пакеты приложений также выигрывают от более простой загрузки дополнительных модулей и расширенной поддержки больших ресурсов, таких как игровой контент. По данным Google, все это обычно приводит к уменьшению размера загрузки на 15% по сравнению с тем же приложением, распространяемым в виде APK.

Что изменилось для APK?

Google постепенно прекратит поддержку APK-файлов с августа 2021 года. Новые приложения, загружаемые в Play Store, необходимо будет выпускать в виде набора приложений. Существующие приложения на основе APK по-прежнему будут поддерживаться, и разработчики смогут продолжать выпускать обновления. Эти приложения описываются как «в настоящее время освобожденные», что предполагает, что в будущем может потребоваться выпуск обновлений в виде AAB.

По словам Google, изменение вносится для того, чтобы больше пользователей могли воспользоваться преимуществами App Bundle. С точки зрения типичного конечного пользователя трудно спорить с обещаниями App Bundle: многие будут приветствовать меньшие загрузки и меньше места для хранения, особенно на недорогих устройствах и медленном интернет-соединении.

Пользователи более старых версий Android не увидят преимуществ, поскольку их устройства не смогут собрать «разделенные» пакеты в работающее приложение. Устаревшие версии ОС по-прежнему смогут устанавливать приложения App Bundle из Play Store — система связывания поймет, что работает со старым устройством, и вместо этого будет использовать обычный APK «все в одном».

Как насчет недостатков?

В то время как основные преимущества несомненны, наборы приложений имеют один существенный недостаток как для разработчиков, так и для опытных пользователей. Поскольку система App Bundle основана на динамическом создании подписанных APK-файлов в облаке, разработчикам необходимо передать свои ключи подписи приложений в Google. Вместо того, чтобы разработчики подписывали обновления приложений в своей собственной инфраструктуре сборки, Google возьмет App Bundle и сам преобразует его в подписанные APK.

Процесс подписания позволяет устройствам Android убедиться, что обновления исходят от того же издателя, что и установленное в данный момент приложение. Это важная часть экосистемы, которая не позволяет злоумышленникам создавать вредоносные приложения, которые незаметно перезаписывают подлинные загрузки. Google обещает, что разработчики смогут предоставлять свои собственные ключи, но их все равно нужно будет хранить в Play Store.

Доверив Google хранение ключей подписи, компания получает еще больший контроль над распространением приложений для Android. Любой, кто успешно взломал Play Store, может начать публиковать обновления приложений для учетных записей разработчиков, поскольку все ключи подписи будут централизованы в инфраструктуре Google.

Более того, Google теперь может сам публиковать обновления приложений, возможно, если правительство вынудит его к этому. У него уже есть возможность автоматически устанавливать приложения на устройства Android. Теперь у него есть ключи к королевствам разработчиков, он может выполнять запросы на скрытую установку неутвержденных обновлений существующих приложений.

Может ли государственное учреждение заставить Google установить модифицированное приложение для обмена зашифрованными сообщениями на устройстве целевого пользователя? Такой запрос может позволить агентству перехватывать сообщения, о чем цель не узнает. Пакеты приложений и размещенная подпись делают этот сценарий теоретически возможным.

Предполагается, что риск снижается за счет системы «прозрачности кода». Это предназначено для того, чтобы дать разработчикам и конечным пользователям возможность проверить, соответствуют ли загруженные APK пакету, который был отправлен в Play Store, что исключает возможность вторжения.

Android на самом деле не проверяет сигнатуры прозрачности кода, поэтому сообщество должно создавать инструменты для этого. Кроме того, прозрачность кода является совершенно необязательной и включается только в том случае, если APK содержит файл прозрачности. Поскольку у Google уже есть ключи, необходимые для создания новых APK, он может удалить файл прозрачности кода, когда захочет.

Наборы приложений и сторонние магазины приложений

Пакеты приложений также представляют угрозу для открытой природы экосистемы Android. В последние годы Google стал играть более сильную руководящую роль. Пакеты приложений — еще один удар по сторонним магазинам приложений, которые предлагают прямую загрузку APK.

Поскольку разработчикам теперь нужно будет компилировать наборы приложений, сборки APK отодвинуты на второй план. Это может быть только вопросом времени, когда Google полностью отключит прямую установку APK или удалит возможности сборки APK из официальных выпусков Android Studio.

В настоящее время разработчики смогут загружать подписанные автономные APK-файлы из Play Store после отправки наборов приложений. Эти APK будут готовы к загрузке в сторонние магазины приложений, поэтому для этой модели развертывания нет прямого риска. Тем не менее, это все еще неудобство для разработчиков — вам нужно либо вручную загрузить подписанные APK-файлы, либо создать их отдельно на своем локальном компьютере.

Google объявил об обязательном переходе на наборы приложений всего через несколько дней после того, как Microsoft представила Windows 11 с поддержкой приложений для Android из Amazon App Store. Хотя переход на App Bundles разрабатывался уже пару лет, решение Google сделать это сейчас может быть направлено на то, чтобы ограничить влияние партнерства Microsoft и Amazon, которое будет поддерживать только обычные APK.

Заключение

Наборы Android App Bundle — это новый формат компиляции приложений, гораздо более эффективный, чем обычный APK. Хотя в конечном итоге устройства все равно получат APK, каждый из них будет специально адаптирован к версии ОС, форм-фактору устройства и активной локали.

Хотя наборы приложений должны приветствоваться большинством пользователей Android, они не являются идеальным решением для разработчиков и более широкой экосистемы Android. Модель App Bundle дает Google больший контроль над распространением приложений, требуя раскрытия ключей подписи, что может сделать принудительные обновления приложений реальностью, угрожая сторонним магазинам.