【问题标题】:Is there a way to have a common section with buildConfigField and resValue in gradle?有没有办法在 gradle 中有一个与 buildConfigField 和 resValue 共用的部分?
【发布时间】:2014-09-23 11:39:08
【问题描述】:

我的产品具有多种产品风味,例如:

buildTypes {
    debug {
    }

    release {
    }

}

productFlavors {
    flavor1 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor1"
    }
    flavor2 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor2"
    }
    flavor3 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor3"
    }
    flavor4 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor4"
    }
    flavor5 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "no-NO"
        buildConfigField "String" "appName" "Flavor5"
    }
}

我更喜欢一个包含所有属性的公共部分,并且只覆盖那些不同的部分。这可能吗?

我还想将所有风格(可能还有 buildTypes)放在它自己的文件中,以使其更具可读性。因此,无论何时您必须更改风味,您都可以轻松地在其自己的文件中找到它,而不必滚动数千行,如果我在主构建文件中拥有所有风味和 buildTypes 以及所有其余部分,那将是这样。

【问题讨论】:

  • 我想过,但是将 resValues 和 buildConfigFields 添加到该部分似乎很混乱。但也许这是唯一的方法。将其移至单独的文件怎么样?
  • debugbuildTypesrelease 也应该可以解决问题,但是您必须为两者都设置值...无论如何为什么会这么乱?默认配置将包含默认值...关于多个文件...我从不使用 em
  • 也许我的问题不够清楚。当您有 15 个或更多 productFlavors 和大约 20 个不同的键时,它会变得混乱。然后最好让它们远离构建周围的所有其他内容,例如签名、打包以及有关 android sdk 版本等的所有其他信息。这就是它变得混乱的原因。

标签: android gradle


【解决方案1】:

Selvin 是正确的,使用 defaultConfig 闭包 - 没有更简洁的方法!在以下示例中,风味 1、2 和 5 会将默认国家和语言设置为 de。风格 3 和 4 用他们自己的语言覆盖它。

defaultConfig {
    buildConfigField "String", "country", "de"
    buildConfigField "String", "language", "de"
}

buildTypes {
    debug {
    }

    release {
    }
}

productFlavors {
    flavor1 {
        buildConfigField "String", "appName", "Flavor1"
    }
    flavor2 {
        buildConfigField "String", "appName", "Flavor2"
    }
    flavor3 {
        buildConfigField "String", "country", "uk"
        buildConfigField "String", "language", "en_GB"
        buildConfigField "String", "appName", "Flavor3"
    }
    flavor4 {
        buildConfigField "String", "country", "fr"
        buildConfigField "String", "language", "fr"
        buildConfigField "String", "appName", "Flavor4"
    }
    flavor5 {
        buildConfigField "String", "appName", name.capitalize()
    }
}

注意

仅供参考,您可以使用name.capitalize() 转换任何口味的名称,例如使用capitalize() 方法将flavor5 插入到Flavor5 的应用程序名称中——这将使字符串中的第一个字符大写。但是,这必须符合口味,而不是 defaultConfig

【讨论】:

  • 非常有帮助。非常感谢!
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多