我有一个相对复杂的项目,每个应用程序需要两个风味维度。我在下面的例子中更简单地重写了它:
flavorDimensions "shape", "color"
productFlavors {
blue {
flavorDimension "color"
}
red {
flavorDimension "color"
}
green {
flavorDimension "color"
}
square {
flavorDimension "shape"
}
circle {
flavorDimension "shape"
}
我希望能够为每个变体设置不同的applicationId,例如:squareblue将具有与circleblue不同的applicationId。我无法在颜色维度中设置applicationId,因为它对于每个形状都是相同的。在上面的例子中我需要有6个不同的applicationIds。这些ID也不遵循任何模式,它们可以是任何模式。
我在这里看到了答案:How to set different applicationId for each flavor combination using flavorDimensions?但这意味着我需要手动设置它,这对我的项目来说是不可行的,因为变种的数量(1000s)。
我真正想要做的是在颜色维度上设置两个应用程序,然后根据形状维度选择正确的应用程序。我已经尝试过定义变量但是没有取得任何成功,它们只是被最后一个变种覆盖了。
答案 0 :(得分:1)
Gradle内置extras property,因此您可以在不定义类的情况下执行此操作。
看起来像这样,可能会写一两个错字:
private static final double GOLDEN_NUMBER = 1.618d;
public long fibonacci(int n) {
double sqrt = Math.sqrt(5);
double result = Math.pow(GOLDEN_NUMBER, n);
result = result - Math.pow(1d - GOLDEN_NUMBER, n);
result = Math.round(result / sqrt);
return Double.valueOf(result).longValue();
}
答案 1 :(得分:0)
我在此示例中找到了一个解决方案:Gradle Android Plugin - add custom flavor attribute?
如果您将这样的类添加到gradle文件,则可以向productFlavor添加自定义属性
class AppIdExtension {
String squareId
String circleId
AppIdExtension(String sId, String cId){
squareId = sId
circleId = cId
}
public void setSquareId(String id){
squareId = id
}
public String getSquareId(){
squareId
}
public void setCircleId(String id){
circleId = id
}
public String getCircleId(){
circleId
}
}
然后,您可以在android { }
部分的开头添加以下代码,将其添加到每种风味的扩展名
productFlavors.whenObjectAdded { flavor ->
flavor.extensions.create("shapeIds", AppIdExtension, "", "")
}
然后在产品风味中,您可以设置每种形状类型的值
blue {
flavorDimension "color"
platformIds.squareId "yourAppId"
platformIds.circleId "yourAppId"
}
最后,在您的productFlavors { }
部分之后添加以下内容:
android.variantFilter { variant ->
def applicationId = ""
def flavors = variant.getFlavors()
if(flavors[0].name.equals("square")){
applicationId = flavors[1].platformIds.squareId
} else if(flavors[0].name.equals("circle")){
applicationId = flavors[1].platformIds.circleId
}
variant.getDefaultConfig().applicationId applicationId
}
这可能不是实现它的最优雅或最有效的方式,但它对我来说非常有效。现在我可以在productFlavor部分添加我的所有ID,然后variantFilter根据第一种风格设置正确的applicationId。
答案 2 :(得分:0)
def appId = "my.custom.package"
if (appId == "some.package") {
..... Change conditions based on the flavors maybe defined more variables
}
defaultConfig {
applicationId "${appId}"
...............
}