我有一个相对复杂的项目,每个应用程序都需要两个口味维度。我在下面的示例中更简单地重写了它:
flavorDimensions "shape", "color"
productFlavors {
blue {
flavorDimension "color"
}
red {
flavorDimension "color"
}
green {
flavorDimension "color"
}
square {
flavorDimension "shape"
}
circle {
flavorDimension "shape"
}我希望能够为每个变体设置一个不同的applicationId,例如:方形蓝色将有一个与圆圈蓝色不同的applicationId。我不能在颜色维度中设置applicationId,因为每个形状都是相同的。在上面的例子中,我需要有6个不同的applicationIds。这些Ids也不遵循任何模式,它们可能是任何东西。
我在这里看到了答案:How to set different applicationId for each flavor combination using flavorDimensions?,但这意味着我需要手动设置它,这对我的项目是不可行的,因为变体的数量(1000 S)。
我真正想做的是在颜色维度上设置两个应用程序,然后根据其生成时的形状尺寸选择正确的应用程序。我尝试过定义变量,但没有成功,它们只是被最后一个变体覆盖了。
发布于 2017-06-16 01:42:18
Gradle有一个内置的extras property,所以您可以在不定义类的情况下这样做。
会出现这样的情况,可能会犯一两次错误:
productFlavors {
blue {
flavorDimension "color"
ext.squareId = "yourAppId"
ext.circleId = "yourAppId"
}
android.applicationVariants.all { variant ->
def flavors = variant.getFlavors()
if (flavors[0].name.equals("square")){
variant.mergedFlavor.setApplicationId(flavors[1].ext.squareId)
} ...
}发布于 2014-10-29 10:41:06
我在下面的示例中找到了一个解决方案: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部分中添加我的所有I,然后variantFilter根据第一种风格设置正确的applicationId。
发布于 2017-06-16 01:57:52
def appId = "my.custom.package"
if (appId == "some.package") {
..... Change conditions based on the flavors maybe defined more variables
}
defaultConfig {
applicationId "${appId}"
...............
}https://stackoverflow.com/questions/26612445
复制相似问题