在gradle中设置applicationId以获得组合的产品风味

grA*_*uit 2 android build gradle android-productflavors

我有两个应用程序productFlavors

flavorDimensions "type", "country"

productFlavors {
    free {
        dimension "type"
    }
    premium {
        dimension "type"
    }
    us {
        dimension "country"
    }
    de {
        dimension "country"
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致四个buildVariants(忽略构建类型)。

现在,我面临的挑战是applicationId为这四个变体设置不同的,但是我不知道该怎么做。我发现真正更改的唯一方法applicationId是在productFlavors定义内,如下所示:

productFlavors {
    free {
        applicationId "some.application.id"
        dimension "type"
    }
Run Code Online (Sandbox Code Playgroud)

但问题是,flavor实际上是freeDe,并且我想applicationId为合并后的那个设置。

我试过了:

productFlavors {
    freeDe {
        applicationId "some.random.id"
    }
Run Code Online (Sandbox Code Playgroud)

productFlavors {
    free {
        de {
            applicationId "some.random.id"
        }
    }
Run Code Online (Sandbox Code Playgroud)

和许多其他组合,但似乎都不起作用。

重要提示:我不能为此使用前置/后缀,因为应用程序ID彼此完全不同:(

非常感谢您的帮助!

谢谢,祝一切顺利!

Ani*_*bla 6

用它

android.applicationVariants.all { variant ->
    def mergedFlavor = variant.mergedFlavor
    switch (variant.flavorName) {
        case "freeUs":
            mergedFlavor.setApplicationId("com.application.id.freeUs")
            break
        case "freeDe":
            mergedFlavor.setApplicationId("com.application.id.freeDe")
            break

    }
}
Run Code Online (Sandbox Code Playgroud)