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