Динамическое время установки c доставка функционального модуля в зависимости от страны пользователя - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь использовать преимущества динамической доставки c во время установки с использованием условия c, указанного в конкретной стране. В соответствии с этот do c Google Play предоставляет способ определения условий в зависимости от страны. Чтобы использовать это, я создал 2 функциональных модуля, отличных от базового модуля.

Модуль 1: Этот модуль имеет реализацию, заданную Филиппинами c. Поэтому я изменил манифест этого модуля так, чтобы он выглядел примерно так:

<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: Этот модуль имеет реализацию, спецификацию Мексики c. Поэтому я изменил манифест этого модуля, чтобы он выглядел примерно так:

<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>

В базовом модуле (приложении) я написал код для получения реализации c, специфичной для страны, с использованием отражения, предполагая, что при время будет применима только одна страна. Код выглядит так -

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", что означает, что ни один из модулей не предоставлен.

Есть ли другой способ, которым я могу достичь этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...