【问题标题】:Combined BuildConfig variables in gradle flavor dimensionsgradle 风格维度中的组合 BuildConfig 变量
【发布时间】:2016-10-24 07:50:52
【问题描述】:

在我的 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. 品牌1-生产:“http://brand.one.production.api/
  3. Brand2-staging:“http://brand.two.staging.api/
  4. Brand2-生产:“http://brand.two.production.api/

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    经过进一步调查,我发现了一个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())
        }
    }
    

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

    像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2020-01-24
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多