Динамическая доставка функционального модуля во время установки в зависимости от страны пользователя
Я пытаюсь использовать преимущества динамической доставки во время установки с учетом условий для конкретной страны. В соответствии с этим документом Google Play предоставляет возможность предоставлять условия в зависимости от страны. Чтобы использовать это, я создал 2 функциональных модуля, кроме базового.
Модуль 1. Этот модуль имеет реализацию, специфичную для Филиппин. Поэтому я изменил манифест этого модуля, чтобы он выглядел примерно так:
<dist:module
dist:instant="false"
dist:title="@string/title_dynamicfeature">
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:user-countries dist:include="true">
<dist:country dist:code="PH" />
</dist:user-countries>
</dist:conditions>
</dist:install-time>
</dist:delivery>
<dist:fusing dist:include="true" />
</dist:module>
Модуль 2: Этот модуль имеет реализацию, специфичную для Мексики. Поэтому я изменил манифест этого модуля, чтобы он выглядел примерно так:
<dist:module
dist:instant="false"
dist:title="@string/title_dynamicfeature">
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:user-countries dist:include="true">
<dist:country dist:code="MX" />
</dist:user-countries>
</dist:conditions>
</dist:install-time>
</dist:delivery>
<dist:fusing dist:include="true" />
</dist:module>
В базовом модуле (приложении) я написал код для получения реализации для конкретной страны с использованием отражения, предполагая, что одновременно применима только одна страна. Код такой -
private fun provideSharedFeature(): SharedFeature {
val sharedFeatures = arrayOf(
getClassInstance("com.jai.dynamicfeature.SharedFeaturePH"),
getClassInstance("com.jai.dynamicfeature.SharedFeatureMX")
).filterNotNull()
if (sharedFeatures.size > 1) {
throw IllegalStateException("More than one feature module installed")
} else if (sharedFeatures.isEmpty()) {
throw IllegalStateException("No feature module installed")
}
return sharedFeatures[0]
}
Этот код отлично работает, когда я запускаю локально, поскольку какой модуль для сборки необходимо указать в конфигурации сборки, но это не удается, когда я загружаю приложение с помощью Google Play. Приложение вылетает с сообщением"No feature module installed"
что означает, что ни один из модулей не предоставляется.
Есть ли другой способ добиться этого?
1 ответ
Разве ты не должен поставить if (sharedFeatures.size > 0)
? У вас может быть только MX или PH. Во-вторых, в какой стране находится платежный адрес вашего тестового устройства?