gradle 风味维度中的组合 BuildConfig 变量

Combined BuildConfig variables in gradle flavor dimensions

在我的 Android 应用程序中,我有两个风味维度:"brand"(品牌 1、品牌 2)和 "environment"(暂存、生产)。 一段时间后我添加了 "environment" 维度,之前我已经为不同的品牌定义了一些 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/\""
        ...
    }
}

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

  1. 品牌 1 分期:“http://brand.one.staging.api/
  2. 品牌 1-生产:“http://brand.one.production.api/
  3. 品牌 2 分期:“http://brand.two.staging.api/
  4. 品牌 2-生产:“http://brand.two.production.api/

但我不知道如何为风味维度的特定组合创建 BuildConfig 变量。这甚至可以用裸 gradle?

谢谢

经过进一步调查,我发现了

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

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

我在这里需要的是一些 结合上面的链接问题。 最后我做的函数看起来像这样:

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())
    }
}

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

很有魅力。