Уменьшите размер вашего мгновенного приложения

Внимание: Google Play Instant больше не будет доступен. С декабря 2025 года мгновенные приложения нельзя будет публиковать через Google Play, и все API мгновенного запуска сервисов Google Play перестанут работать. Пользователи больше не смогут получать мгновенные приложения через Play, используя какие-либо механизмы.

Мы вносим это изменение, основываясь на отзывах разработчиков и наших постоянных инвестициях в улучшение экосистемы с момента внедрения Google Play Instant.

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

Google Play Instant обеспечивает насыщенный, нативный интерфейс одним нажатием на веб-ссылку. Пользователи могут использовать ваше приложение без предварительной установки, что обеспечивает более высокий уровень и качество взаимодействия. Однако, чтобы мгновенное приложение загружалось так же быстро, как обычная мобильная веб-страница, необходимо создать хорошо структурированное и эффективное мгновенное приложение. Чем меньше двоичный файл вашего мгновенного приложения, тем быстрее оно загружается и тем удобнее для пользователя.

В этом документе представлены рекомендации по управлению структурой и размером двоичного кода вашего приложения для обеспечения его бесперебойной работы. Вы можете применить эти рекомендации и к своему устанавливаемому приложению.

Реорганизация в многофункциональные модули

Наибольшее улучшение размера двоичного кода вашего приложения достигается при рефакторинге приложения в несколько функциональных модулей. Начните с базового функционального модуля , а затем выделите тематически связанные рабочие процессы в отдельные функциональные модули. Назначьте каждому функциональному модулю начальное действие и уникальный URL-адрес, чтобы пользователи могли успешно завершить рабочий процесс модуля.

При создании модулей функций старайтесь, чтобы размер базового модуля был как можно меньше. В частности, обратите особое внимание на те части приложения, которым требуется доступ к зависимым библиотекам. Если библиотеку использует только один модуль функций, импортируйте эту библиотеку в сам модуль функций, а не в базовый модуль функций. Имейте в виду, что для выпуска мгновенного приложения для конкретного модуля функций общий размер этого модуля функций и базового модуля функций должен быть меньше 15 МБ .

Лучшие практики

При рефакторинге вашего приложения помните о следующих рекомендациях:

Используйте одну и ту же кодовую базу для обоих типов приложений.
Вы можете упростить процесс управления проектом своего приложения, используя одну и ту же модульную кодовую базу для создания как устанавливаемого приложения, так и мгновенных приложений.
Проектирование многофункциональных модулей
Даже если в вашем приложении всего один рабочий процесс и на данный момент требуется только один функциональный модуль, всё равно рекомендуется проектировать его с учётом нескольких функциональных модулей. Таким образом, вы сможете добавлять существующие модули в приложение, не влияя на размер исходного функционального модуля.
Не зацикливайтесь на ограничении размера функционального модуля в начале
Ограничения на размер функциональных модулей не распространяются на локально собранные исполняемые файлы. Вы также можете выпустить мгновенное приложение через внутреннюю тестовую версию, которая устанавливает ограничение в 15 МБ на размер функциональных модулей. Это ограничение действует только в альфа-версии и рабочей версии.

Обновление ресурсов приложения

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

Уменьшить размер файла изображения

Вы можете значительно уменьшить общий размер графических элементов вашего приложения, используя формат файлов WebP вместо PNG. Google Play Instant обеспечивает полную поддержку WebP, включая прозрачность и сжатие без потерь, поэтому качество изображений остаётся прежним.

По возможности удалите все требования обратной совместимости для использования других PNG-изображений. Если вам необходимо использовать PNG-изображения, поместите их в модуль, используемый для сборки и установки вашего приложения.

Удалить неиспользуемые языки

Если ваше приложение поддерживает несколько языков, максимально сократите количество локализованных ресурсов. Этот шаг особенно полезен, если вы используете библиотеку совместимости с приложениями, например android.support.v7.appcompat . Эта библиотека содержит сообщения на многих языках, некоторые из которых ваше приложение может не поддерживать.

Чтобы узнать больше, ознакомьтесь с тем, как удалить неиспользуемые альтернативные ресурсы , в частности неиспользуемые языки.

Удалить лишние файлы

Возможно, ваше приложение больше не использует некоторые ресурсы, импортированные в проект. Чтобы удалить эти ресурсы, в Android Studio предусмотрена проверка Lint для таких случаев. Чтобы воспользоваться инструментом, выполните следующие действия:

  1. Нажмите Control+Alt+Shift+I ( Command+Alt+Shift+I в Mac OS).
  2. В появившемся диалоговом окне введите "unused resources" .
  3. Выберите опцию Неиспользуемые ресурсы , чтобы начать процесс проверки использования ресурсов.

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

Удалить неиспользуемые библиотеки

По мере роста масштаба приложения у него может появиться удивительно много зависимостей, в частности, одного из следующих типов:

  • Нативные библиотеки: библиотеки, содержащие собственный код, который ваше мгновенное приложение никогда не запускает.
  • Транзитивные зависимости: библиотеки, от которых зависят импортированные библиотеки вашего приложения.

В Android Studio есть несколько полезных инструментов для выявления любых внешних зависимостей в проекте вашего приложения:

Внешние библиотеки

В представлении проекта Android Studio есть раздел «Внешние библиотеки» .

В этом разделе представлены все библиотеки, используемые вашим приложением, включая нативный код и все транзитивные зависимости. В этом представлении найдите неиспользуемые или дублирующиеся библиотеки, которые не требуются вашему приложению.

APK-анализатор

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

Определив, какие библиотеки не нужны вашему приложению, исключите их, добавив в файл сборки Gradle строки, похожие на следующие:

<модуль_функции>/build.gradle

Круто

dependencies {
    implementation('some-important-but-large-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Котлин

dependencies {
    implementation('some-important-but-large-library') {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

Дополнительную информацию об уменьшении общего размера импорта зависимостей вашего приложения см. в руководстве Gradle по управлению зависимостями .

Реализовать облачную доставку активов

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