提问人:alrama 提问时间:4/7/2023 最后编辑:alrama 更新时间:4/14/2023 访问量:626
android 不同的 applicationId 和 applicationIdSuffix by flavors chains
android different applicationId & applicationIdSuffix by flavors chains
问:
我有 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”
编辑
我在 targetA 和 targetB 都需要的 companyA/companyB 的文件夹 java/res 中有专门的代码
答:
3赞
Elizabeth
4/7/2023
#1
客户维度似乎只参与 targetA。 也许,您需要没有任何客户维度的 targetB。 因此,我会尝试按目标维度为默认客户和 variantFilter 添加新风格。
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
}
}
评论
0赞
alrama
4/7/2023
我不知道 setIgnore 是做什么的,但您的解决方案对我来说可能很好。为targetA构建时,我应该选择“releaseTargetACustomerUndefined”。明天我会试一试。
0赞
Elizabeth
4/7/2023
构建变体的结果列表是维度和构建类型的组合。在这里,我添加了新客户,无需修改。 允许将构建类型静音。 block 将 customerA 和 customerB 排除在 targetB 之外,将 customerUndefined 排除在 targetA 之外。因此,您将有 3 个发布变体:targetACustomerARelease、targetACustomerBRelease、targetBCustomerUndefinedRelease。applicationIdSuffix
setIgnore()
variantFilter
0赞
alrama
4/7/2023
也许我不能使用你的解决方案。在为 targetB 构建时,我也需要从 companyA 和 companyB java/res 文件夹中选择源代码,但选择 companyUndefined 不包括此
0赞
alrama
4/20/2023
我必须分配赏金。我把它给你,因为不能把它交给我自己的答案。
1赞
alrama
4/14/2023
#2
applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.productFlavors[1].name.equals("targetb")) {
variant.mergedFlavor.applicationId = "com.mycompany.oldappname"
} else if (variant.productFlavors[0].name.equals("companya")) {
variant.mergedFlavor.applicationId = "com.mycompany.newappname.companya"
} else if (variant.productFlavors[0].name.equals("companyb")) {
variant.mergedFlavor.applicationId = "com.mycompany.newappname.companyb"
}
}
}
评论