Условная доставка позволяет вам установить определенные требования к конфигурации устройства для автоматических загрузок функциональных модулей во время установки приложения. Например, вы можете настроить функциональный модуль, включающий функции дополненной реальности (AR), который будет доступен при установке приложения только для устройств, поддерживающих AR.
Этот механизм доставки в настоящее время поддерживает управление загрузкой модуля во время установки приложения на основе следующих конфигураций устройства:
- Аппаратные и программные функции устройства , включая версию OpenGL ES
- Страна пользователя
- уровень API
Если устройство не соответствует всем указанным вами требованиям, модуль не загружается во время установки приложения. Однако позже ваше приложение может запросить загрузку модуля по требованию с помощью Play Core SDK.
Прежде чем начать, убедитесь, что вы используете Android Studio 3.5 или более позднюю версию. В следующих разделах показано, как добавить поддержку условной доставки в функциональные модули.
Добавьте новый модуль с вариантами условной доставки.
Самый простой способ создать новый функциональный модуль с условной доставкой — использовать мастер создания нового модуля следующим образом:
- Чтобы открыть диалоговое окно «Новый модуль» , выберите «Файл» > «Создать» > «Новый модуль» в строке меню.
- В диалоговом окне «Новый модуль» выберите «Модуль динамических функций» и нажмите «Далее» .
- Настройте свой модуль, как обычно, и нажмите «Далее» .
В разделе «Параметры загрузки модуля» выполните следующие действия:
Укажите название модуля , используя до 50 символов. Платформа использует этот заголовок, чтобы идентифицировать модуль для пользователей, например, когда подтверждает, хочет ли пользователь загрузить модуль. По этой причине базовый модуль вашего приложения должен включать заголовок модуля в виде строкового ресурса , который вы можете перевести. При создании модуля с помощью Android Studio среда IDE добавляет строковый ресурс в базовый модуль и вставляет следующую запись в манифест функционального модуля:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
В раскрывающемся меню в разделе «Включение во время установки» выберите «Включать модуль только при установке приложения для устройств с указанными функциями» . При этом модуль будет включен в ваше приложение во время установки приложения только на устройствах с определенными конфигурациями, которые вы можете указать, например функции устройства или страну. Android Studio вставляет в манифест модуля следующее, чтобы отразить ваш выбор:
<dist:module ... > <dist:delivery> <dist:install-time> <dist:conditions> <!-- If you specify conditions, as described in the steps below, the IDE includes them here. --> </dist:conditions> </dist:install-time> </dist:delivery> </dist:module>
Если вы хотите ограничить автоматическую загрузку модуля определенными странами или минимальным уровнем API, нажмите «Готово» , чтобы завершить создание модуля, а затем прочитайте раздел о том, как указать условия в зависимости от страны или минимального уровня API . В противном случае нажмите + функция устройства , чтобы добавить функцию, необходимую устройству для загрузки модуля во время установки.
Рядом с device-feature выберите в раскрывающемся меню один из следующих вариантов и укажите его значение:
- Имя: позволяет указать аппаратную или программную функцию, необходимую устройству для загрузки модуля во время установки. Функции, поддерживаемые условной доставкой, такие же, как и те, которые перечислены в качестве констант
FEATURE_*
вPackageManager
. Если вы выберете этот вариант, начните вводить любую часть постоянного значения функции, например «Bluetooth», в поле рядом с раскрывающимся списком и выберите одно из появившихся предложений. - Версия OpenGL ES: позволяет указать версию OpenGL ES, необходимую устройству для загрузки модуля во время установки. Если вы выберете этот вариант, начните вводить версию, например «0x00030001», в поле рядом с раскрывающимся списком и выберите одно из появившихся предложений.
- Имя: позволяет указать аппаратную или программную функцию, необходимую устройству для загрузки модуля во время установки. Функции, поддерживаемые условной доставкой, такие же, как и те, которые перечислены в качестве констант
Если вы хотите добавить несколько условий на основе доступных функций устройства, нажмите + функция устройства для каждого условия функции устройства, которое вы хотите указать.
Установите флажок рядом с Fusing , если вы хотите, чтобы этот модуль был доступен для устройств под управлением Android 4.4 (уровень API 20) и ниже и был включен в несколько APK-файлов. Это означает, что вы можете включить поведение по требованию для этого модуля и отключить объединение, чтобы исключить его из устройств, которые не поддерживают загрузку и установку разделенных APK. Android Studio вставляет в манифест модуля следующее, чтобы отразить ваш выбор:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
Когда вы закончите настройку параметров загрузки модуля, нажмите «Готово» .
Обратите внимание, что плагин Android Gradle не поддерживает запуск lint из модулей динамических функций. Запуск lint из соответствующего модуля приложения запустит lint на его модулях динамических функций и включит все проблемы в отчет о проверке приложения.
Добавьте параметры условной доставки в существующий функциональный модуль
Вы можете легко добавить параметры условной доставки к существующему функциональному модулю через манифест модуля. Однако сначала вам следует прочитать о совместимости вариантов условной доставки с другими вариантами доставки, которые вы, возможно, уже включили.
Чтобы начать работу, вам необходимо сначала перенести манифест в новый элемент <dist:delivery>
. В приведенном ниже фрагменте кода показан пример старого синтаксиса:
<!-- This is the old syntax. -->
<dist:module
dist:title="@string/feature_title" dist:onDemand="true">
<dist:fusing dist:include="true"/>
</dist:module>
Вышеуказанные варианты доставки теперь указаны следующим образом.
<dist:module
dist:title="@string/feature_title">
<dist:delivery>
<dist:on-demand/>
</dist:delivery>
<dist:fusing dist:include="true"/>
</dist:module>
Затем вы можете включить варианты условной доставки на основе функций устройства следующим образом.
<dist:module
dist:title="@string/feature_title">
<dist:delivery>
<dist:on-demand/>
<dist:install-time>
<dist:conditions>
<!-- Requires that the device support AR to download the module at
app install-time. -->
<dist:device-feature dist:name="android.hardware.camera.ar"/>
</dist:conditions>
</dist:install-time>
</dist:delivery>
<dist:fusing dist:include="true"/>
</dist:module>
В разделах ниже обсуждаются другие варианты условной доставки, например по стране или минимальному уровню API.
Совместимость с другими вариантами загрузки модулей.
Поскольку функциональные модули предлагают несколько вариантов настройки способа доставки каждой функции на устройство пользователя, важно понимать, как на варианты условной доставки влияют другие параметры. В следующей таблице приведены сведения о совместимости условной доставки с другими вариантами загрузки модулей.
Возможность загрузки модуля | Совместимость с условной доставкой |
---|---|
Слияние ( <dist:fusing dist:include="true"/> ) | Если модуль устанавливает для этого параметра значение true, Google Play не учитывает параметры условной доставки, которые вы указываете при развертывании приложения на устройствах с API уровня 19 или ниже. То есть функциональные модули, обеспечивающие объединение, всегда включаются во время установки для устройств с уровнем API 19 или ниже. |
Мгновенная поддержка ( <dist:module dist:instant="true"/> ) | Варианты условной доставки не поддерживаются для функциональных модулей с мгновенной поддержкой. |
По требованию ( <dist:on-demand/> ) | По умолчанию, если вы укажете параметры условной доставки, модуль также будет доступен по требованию. |
Укажите условия в зависимости от страны
Условная доставка также позволяет вам указать, какие страны вы хотите исключить (или включить) из загрузки вашего модуля во время установки приложения. Указание этого условия может оказаться полезным, если, например, ваш модуль реализует способ оплаты, недоступный в определенных регионах.
В этом контексте страна устройства обычно определяется платежным адресом пользователя, зарегистрированным в его учетной записи Google Play.
Чтобы указать страны для вашего модуля, включите следующее в манифест функционального модуля.
<dist:conditions>
<!-- Set to "true" to specify countries to exclude from downloading
this module at app install-time. By default, modules are available
for download to all user countries. -->
<dist:user-countries dist:exclude="true">
<!-- Specifies the two-letter CLDR country code for regions that should
not download the module at app install-time. -->
<dist:country dist:code="CN"/>
<dist:country dist:code="HK"/>
</dist:user-countries>
</dist:conditions>
Укажите условия для уровня API
Указание условия на основе уровня API устройства может оказаться полезным, если функциональный модуль зависит от API, доступных только в определенных версиях платформы Android.
Чтобы установить условие на основе минимального или максимального уровня API устройства, включите следующее в манифест вашего функционального модуля.
<dist:conditions> <!-- Specifies the minimum API level that the device must satisfy in order to download your module at app install-time. The API level you specify must be greater or equal to the module's own minSdkVersion. --> <dist:min-sdk dist:value="21"/> <!-- Specifies the maximum API level that the device cannot exceed in order to download your module at app install-time. The API level you specify must be less than or equal to the module's own maxSdkVersion. --> <dist:max-sdk dist:value="24"/> </dist:conditions>