我有 2 个目标 Android 风格,以及 2 个不同的客户风格。 我需要:
- 第一个目标具有 appId 和客户的不同后缀
- 第二个目标具有不同的 appId,没有任何后缀。
我的尝试:
flavorDimensions "customer","target"
productFlavors {
customerA {
dimension "customer"
applicationId = "com.mycompany.newappname.customerA"
}
customerB {
dimension "customer"
applicationId = "com.mycompany.newappname.customerB"
}
targetA{
dimension "target"
}
targetB{
dimension "target"
applicationId = "com.mycompany.oldappname"
}
}
它在 targetB 上不起作用。我在维度客户中定义了 appId,而不是在维度目标中定义的 appId。
我尝试过:
defaultConfig {
applicationId "com.mycompany.newappname"
}
...
flavorDimensions "customer","target"
productFlavors {
customerA {
dimension "customer"
applicationIdSuffix = ".customerA"
}
customerB {
dimension "customer"
applicationIdSuffix = ".customerB"
}
targetA{
dimension "target"
}
targetB{
dimension "target"
applicationIdSuffix = ""
applicationId = "com.mycompany.oldappname"
}
}
但我得到了结果 targetB appId= "com.mycompany.oldappname.customerB"
编辑
我在companyA/companyB的文件夹java/res中有targetA和targetB都需要的专门代码
最佳答案
似乎客户维度仅参与 targetA。 也许,您需要没有任何客户维度的 targetB。 因此,我会尝试为默认客户和按目标维度的变体过滤器添加新风格。
flavorDimensions "target", "customer"
productFlavors {
targetA {
dimension "target"
applicationId = "com.mycompany.newappname"
}
targetB {
dimension "target"
applicationId = "com.mycompany.oldappname"
}
customerUndefined {
dimension "customer"
}
customerA {
dimension "customer"
applicationIdSuffix = ".customerA"
}
customerB {
dimension "customer"
applicationIdSuffix = ".customerB"
}
}
variantFilter { variant ->
def names = variant.flavors*.name
switch (variant) {
case { names.contains("targetA") and names.contains("customerUndefined") }:
setIgnore(true)
break
case { names.contains("targetB") and names.contains("customerA") }:
setIgnore(true)
break
case { names.contains("targetB") and names.contains("customerB") }:
setIgnore(true)
break
default:
break
}
}
关于android 按口味链不同的 applicationId 和 applicationIdSuffix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75957054/