1

我正在尝试使用特定国家/地区的条件来利用安装时动态交付的好处。根据文档,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",这意味着没有提供任何模块。

有没有其他方法可以实现这一目标?

4

1 回答 1

0

不应该放if (sharedFeatures.size > 0)吗?您只能拥有 MX 或 PH。其次,您的测试设备的国家账单地址是什么?

于 2020-06-08T12:23:18.363 回答