4

在我的 Android 应用程序中,我有两个风味维度:“品牌”(brand1,brand2)和“环境”(staging,production)。一段时间后,我添加了“环境”维度,并且我之前已经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-生产:“ http://brand.one.production.api/
  3. Brand2-staging:“ http://brand.two.staging.api/
  4. Brand2-生产:“ http://brand.two.production.api/

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

谢谢

4

1 回答 1

2

经过进一步调查,我在这里发现了一个类似的问题。

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

我的问题是,实际上我有 3 个维度:“品牌”、“环境”和“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())
    }
}

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

奇迹般有效。

于 2016-10-24T08:26:30.817 回答