Предупреждение: Google Play Instant больше не будет доступен. Начиная с декабря 2025 года мгновенные приложения не могут быть опубликованы через Google Play, и все API-интерфейсы мгновенных приложений Google Play больше не будут работать. Пользователи больше не будут получать мгновенные приложения от Play с использованием любого механизма.
Мы вносим это изменение на основе отзывов разработчиков и наших постоянных инвестиций в улучшение экосистемы с момента внедрения Google Play Instant.
Чтобы продолжить оптимизацию для роста числа пользователей, мы призываем разработчиков направлять пользователей в их обычные приложения или игры, используя глубокие ссылки для перенаправления их на определенные пути или функции, когда это уместно.
Если вы все еще используете устаревший плагин Feature Android Gradle ( com.android.feature
) для своих модулей Android Instant App, вам необходимо перейти на использование базового плагина приложения ( com.android.application
) и плагина Dynamic Feature ( com.android.dynamic-feature
).
В плагине Android Gradle 3.3.0 и выше базовый плагин приложения включает поддержку мгновенного опыта. То есть, если базовый модуль приложения удовлетворяет требованиям для мгновенного опыта, вы автоматически получаете это преимущество. Затем вы можете включить дополнительные функции, которые пользователи могут загружать по требованию в качестве мгновенного опыта с помощью плагина Dynamic Feature. Такая настройка упрощает поддержку как установленного, так и мгновенного опыта приложения из одного проекта и позволяет вам извлекать выгоду из публикации с помощью Android App Bundles .
Следующая таблица лучше описывает, на какие плагины вы будете мигрировать:
Описание модуля | Старый плагин | Текущий плагин |
---|---|---|
Модуль, включающий базовый код, ресурсы и функциональные возможности для вашего установленного или мгновенного приложения. | com.android.feature (с baseFeature = true ) | com.android.application Примечание: этот модуль включает в себя всю информацию о манифесте и подписи, необходимую для сборки и упаковки вашего приложения в виде Android App Bundle или APK. |
Дополнительные модульные функции, которые пользователи могут загружать по требованию | com.android.feature | com.android.dynamic-feature (с dist:instant="true" и dist:onDemand="false" в манифесте модуля) |
Код и ресурсы для функции, доступной только для установленной версии вашего приложения. | com.android.application | com.android.dynamic-feature (с dist:instant="false" и dist:onDemand="false" в манифесте модуля) |
На этой странице показано, как перенести существующий проект мгновенного приложения для создания мгновенного пакета приложений Android. Здесь также описывается, как создать, протестировать и опубликовать мгновенно поддерживаемый пакет приложений Android.
Если вы создаете новые мгновенные возможности для своего приложения, вместо этого прочтите статью Создание модуля функций с поддержкой мгновенных возможностей .
Понять изменения
При переносе проекта на использование плагина Dynamic Feature пакеты приложений Android предоставляют новый способ создания и публикации приложения, который существенно упрощает распространение оптимизированных APK-файлов среди пользователей.
Пакеты приложений упрощают распространение, упаковывая весь скомпилированный код и ресурсы вашего приложения для загрузки, но откладывают генерацию APK и подписание в Google Play. Новая модель обслуживания приложений Google Play затем использует ваш пакет приложений для генерации и обслуживания оптимизированных APK для конфигурации устройства каждого пользователя, поэтому они загружают только тот код и ресурсы, которые им нужны для запуска вашего приложения. Вам больше не нужно создавать, подписывать и управлять несколькими APK для поддержки разных устройств, и пользователи получают меньшие, более оптимизированные загрузки.
При использовании теперь устаревшего плагина функций для создания мгновенного приложения требовалось создание базового модуля функций, который содержал общий код и ресурсы для всех ваших модулей, включая модуль мгновенного приложения. Остальная часть вашего кода была включена в несколько небазовых модулей функций, которые содержали точки входа для ваших мгновенных впечатлений. Для установленной версии вашего приложения ваш проект мог включать отдельный модуль приложения, который содержал код и действия, необходимые только для вашего установленного приложения.
Когда вы переносите свое приложение для поддержки Android App Bundles, ваш модуль приложения возвращает себе роль базового модуля, и вы организуете дополнительные установленные или мгновенные возможности в качестве функциональных модулей. То есть ваш проект теперь больше похож на стандартный проект приложения с базовым модулем с поддержкой мгновенной возможности и возможностью включать дополнительные модульные мгновенные возможности.
Чтобы перенести существующий проект мгновенного приложения и внедрить более оптимизированную модель распространения Android App Bundle, выполните действия, описанные в разделах ниже.
Преобразовать базовый функциональный модуль в модуль приложения
Сначала необходимо отредактировать файл build.gradle
базового функционального модуля, прежде чем преобразовывать его в основной модуль приложения, как показано ниже:
- Удалите строку
baseFeature true
. Удалите все зависимости, использующие конфигурации зависимостей
feature
илиapplication
.Круто
dependencies { ... // delete any lines that look like // feature project(":foo") // feature project(":bar") // application project(":app") }
Котлин
dependencies { ... // delete any lines that look like // feature(project(":foo")) // feature(project(":bar")) // application(project(":app")) }
Переместите
applicationId
вместе с любыми другими конфигурациями скрипта сборки, которые вы ожидаете увидеть в вашем базовом модуле приложения, из текущего модуляcom.android.application
в модульcom.android.feature
. Ниже приведены некоторые примеры. Для этого шага, в зависимости от вашей конкретной настройкиbuild.gradle
, может быть проще скопировать и вставить блокandroid
build.gradle
из предыдущего модуля приложения в файлbuild.gradle
нового модуля приложения. Однако при этом следует соблюдать осторожность.Круто
android { ... defaultConfig { // You need to move the application ID from the app module // to your feature module. applicationId "com.example.myapp" ... } // Some additional build configurations you might want to // copy from your current ‘app’ module may include ProGuard // rules and code shrinking settings. buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile( 'proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
Котлин
android { ... defaultConfig { // You need to move the application ID from the app module // to your feature module. applicationId = "com.example.myapp" ... } // Some additional build configurations you might want to // copy from your current ‘app’ module may include ProGuard // rules and code shrinking settings. buildTypes { getByName("release") { minifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } }
Отметьте модуль функции как мгновенно активируемый, добавив соответствующие теги распределения пакетов в манифест, как показано ниже.
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution"> <dist:module dist:instant="true" /> ... </manifest>
Преобразуйте модуль функций в базовый модуль приложения, изменив его тип плагина на
com.android.application
:Круто
// Replace "plugins { id 'com.android.feature' }" // with the following plugins { id 'com.android.application' }
Котлин
// Replace "plugins { id("com.android.feature") }" // with the following plugins { id("com.android.application") }
Преобразовать старый модуль приложения в модуль функций, устанавливаемый во время установки
Если в старом модуле приложения нет кода или ресурсов, вы можете просто удалить его, поскольку шаги, которые вы выполнили в предыдущем разделе, преобразовали ваш модуль функций в базовый модуль приложения.
Однако если в старом модуле приложения есть код и ресурсы, представляющие функциональные возможности, которые вы хотели бы предоставить пользователям при установке вашего приложения, следуйте инструкциям в этом разделе, чтобы преобразовать модуль приложения в модуль функций.
Создание модуля функций включает изменение типа плагина с com.android.application
на com.android.dynamic-feature
, а также несколько других изменений build.gradle
, как показано ниже:
Измените тип плагина с
com.android.application
наcom.android.dynamic-feature
.Круто
// Replace "plugins { id 'com.android.feature' }" // with the following: plugins { id 'com.android.dynamic-feature' }
Котлин
// Replace "plugins { id("com.android.application") }" // with the following: plugins { id("com.android.dynamic-feature") }
Как описано в предыдущем разделе, убедитесь, что вы переместили конфигурации сборки, необходимые плагину
com.android.application
, в базовый модуль приложения, например правилаapplicationId
илиproguardFiles
.Переименуйте модуль во что-то вроде «installed_feature» следующим образом:
- Откройте панель «Проект» , выбрав в строке меню «Вид» > «Окна инструментов» > «Проект» .
- Щелкните правой кнопкой мыши по функциональному модулю и выберите Рефакторинг > Переименовать .
- В появившемся диалоговом окне выберите «Переименовать модуль» и нажмите «ОК» .
- Введите новое имя модуля и нажмите ОК .
Аналогично шагу 3 переименуйте новый модуль приложения, созданный в предыдущем разделе, во что-то вроде «app».
Добавьте зависимость реализации от модуля «app» в файле
build.gradle
функционального модуля, как показано ниже.Круто
dependencies { ... // In the feature module, add an implementation dependency // on the base app module. implementation project(":app") }
Котлин
dependencies { ... // In the feature module, add an implementation dependency // on the base app module. implementation(project(":app")) }
Добавьте функцию в файл
build.gradle
нового модуля приложения.Круто
android { ... // In the base app module, specify each feature module. dynamicFeatures = [":installed_feature"] }
Котлин
android { ... // In the base app module, specify each feature module. dynamicFeatures.addAll(listOf(":installed_feature")) }
В манифесте функционального модуля отметьте функциональный модуль как устанавливаемый модуль, добавив в манифест соответствующие теги распространения пакета.
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution"> <dist:module dist:instant="false" dist:onDemand="false" dist:title="@string/title_dynamic_feature"> <dist:fusing dist:include="true" /> </dist:module> ... </manifest>
Преобразуйте другие функциональные модули в мгновенно активируемые функциональные модули
Если вы разделили дополнительные функции своего приложения на несколько модулей функций, вам необходимо выполнить действия, описанные в этом разделе, чтобы преобразовать эти модули в модули функций с мгновенной поддержкой.
Для каждого оставшегося функционального модуля в вашем проекте выполните следующие действия, чтобы преобразовать их в мгновенно активируемые функции:
Измените тип плагина в файле
build.gradle
наcom.android.dynamic-feature
, как показано ниже:Круто
// Replace 'com.android.feature' with 'com.android.dynamic-feature' plugins { id 'com.android.dynamic-feature' }
Котлин
// Replace "com.android.feature" with "com.android.dynamic-feature" plugins { id("com.android.dynamic-feature") }
Отметьте каждый функциональный модуль как поддерживающий мгновенную поддержку, добавив в манифест следующее.
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution"> <dist:module dist:instant="true" dist:onDemand="false" dist:title="@string/title_dynamic_feature"> <dist:fusing dist:include="true" /> </dist:module> ... </manifest>
Добавьте модуль функций в файл
build.gradle
нового модуля приложения, в котором вы добавилиinstalled_feature
в список модулей функций.Круто
android { ... dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"] // or whichever name exists for the instant enabled feature module }
Котлин
android { ... dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2")) // or whichever name exists for the instant enabled feature module }
Создавайте, тестируйте и публикуйте новые пакеты приложений с поддержкой мгновенного запуска
После выполнения шагов на этой странице ваш проект сможет создать единый артефакт, Android App Bundle, который вы можете использовать для публикации как установленной, так и мгновенной версии вашего приложения в Google Play Console и отдельно для мгновенной и установленной версий. Кроме того, с помощью app bundles вы получаете преимущество обслуживания оптимизированных APK для конфигурации устройства каждого пользователя, поэтому они загружают только тот код и ресурсы, которые им нужны для запуска вашего приложения. То есть вам больше не нужно создавать, подписывать и управлять несколькими APK для поддержки разных устройств, а пользователи получают меньшие, более оптимизированные загрузки.
Чтобы приступить к созданию и тестированию пакета приложений с поддержкой мгновенного запуска, перейдите в раздел «Создание пакета приложений» .