Gradle:Multi-Dimension Flavor ApplicationId

Dav*_*ott 8 groovy android gradle android-studio

我有一个相对复杂的项目,每个应用程序需要两个风味维度.我在下面的示例中更简单地重写了它:

flavorDimensions "shape", "color"

productFlavors {

     blue {
         flavorDimension "color"
     }

     red {
         flavorDimension "color"
     }

     green {
         flavorDimension "color"
     }


     square {
         flavorDimension "shape"
     }

     circle {
         flavorDimension "shape"
     }
Run Code Online (Sandbox Code Playgroud)

我希望能够为每个变体设置不同的applicationId,例如:squareblue将具有与circleblue不同的applicationId.我无法在颜色维度中设置applicationId,因为它对于每个形状都是相同的.在上面的例子中我需要有6个不同的applicationIds.这些ID也不遵循任何模式,它们可以是任何东西.

我在这里看到了答案:如何使用flavorDimensions为每个风味组合设置不同的applicationId?但这意味着我需要手动设置,这对我的项目来说是不可行的,因为变种的数量(1000s).

我真正想要做的是在颜色维度上设置两个应用程序,然后在构建时根据形状维度选择正确的一个.我已经尝试过定义变量但是没有取得任何成功,它们只是被最后一个变量覆盖了.

Chr*_*ris 1

Gradle 内置了extras 属性,因此您无需定义类即可执行此操作。

看起来像这样,可能有一两个错字:

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)
        } ...
    }
Run Code Online (Sandbox Code Playgroud)