在gradle flavor维度中组合BuildConfig变量

时间:2016-10-24 07:50:52

标签: gradle android-build-flavors android-buildconfig android-flavordimension

在我的Android应用程序中,我有两个风格维度:"品牌" (品牌1,品牌2)和"环境" (分期,制作)。 我添加了"环境"维度一段时间后,我之前为不同品牌定义了一些BuildConfig变量。更具体地说,我将BASE_URL定义为:

flavorDimensions 'brand'
productFlavors {

    brand1 {
        dimension 'brand'
        ...
        buildConfigField "String", "BASE_URL", "\"http://brand.one.api/\""
        ...
    }

    brand2 {
        dimension 'brand'
        ...
        buildConfigField "String", "BASE_URL", "\"http://brand.two.api/\""
        ...
    }
}

现在,我添加了"环境"维度和我想要设置的是四个不同的端点:

  1. Brand1-staging:" http://brand.one.staging.api/"
  2. Brand1-production:" http://brand.one.production.api/"
  3. Brand2-staging:" http://brand.two.staging.api/"
  4. Brand2-production:" http://brand.two.production.api/"
  5. 但我无法弄清楚如何为特定风味维度组合创建BuildConfig变量。这是否可以使用裸体?

    由于

1 个答案:

答案 0 :(得分:2)

经过进一步调查后,我找到了similar question here.

似乎您需要添加一个函数来迭代构建变体名称并检查它们是否与某个所需名称匹配。

我的问题是,实际上我有3个维度:"品牌","环境"和" api" (15个用于生产,21个用于即时运行的调试)。因此变体名称看起来像brand1Api15StagingDebug,...,brand2Api21ProductionRelease,...等。

我需要的是一些groovy regex matching与上面的链接问题相结合。 最后,我所做的功能如下:

android.applicationVariants.all { variant ->
    if (variant.getName() ==~ /brand1Api[0-9]{2}Staging.*/) {
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.one.staging.api//\""
    } else if(variant.getName() ==~ /brand1Api[0-9]{2}Production.*/){
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.one.production.api/\""
    } else if(variant.getName() ==~ /brand2Api[0-9]{2}Staging.*/) {
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.two.staging.api//\""
    } else if(variant.getName() ==~ /brand2Api[0-9]{2}Production.*/){
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.two.production.api/\""
    } else {
        throw new Exception("Unexpected variant name: " + variant.getName())
    }
}

我在链的末尾添加了一个异常抛出,因此如果有人将变体名称更改为未选中的变体名称,则构建将失败。这对于避免使用错误的端点构建应用程序非常重要。

像魅力一样。