我试图利用安装时动态交付的好处,使用特定国家的条件。根据这文档,Google提供了一种基于国家的条件。为了利用这一点,我创建了两个功能模块,而不是基本模块。
模块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>在基本模块(app)中,我编写了代码,使用反射实现特定国家的实现,假设一次只有一个国家适用。密码是这样的-
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下载应用程序时,它就失败了。该应用程序与消息"No feature module installed"崩溃,这意味着没有提供任何模块。
我还有其他方法可以做到这一点吗?
发布于 2020-06-08 12:23:18
你不应该放if (sharedFeatures.size > 0)吗?你只能拥有MX或PH。第二,您的测试设备的国家帐单地址是什么?
https://stackoverflow.com/questions/61324214
复制相似问题