Android:为不同Flavor与Build Type生成差异化Gradle常量
解决Android Flavor + Build Type组合生成差异化Gradle常量的问题
我来帮你搞定这个配置问题!你当前的APP_INFO只区分了Build Type(Debug/Release),没有结合Flavor的差异,其实通过Gradle的变体遍历功能,就能轻松实现每个Flavor+Build Type组合的专属常量。
核心实现思路
我们可以遍历所有生成的Application变体,针对每个变体(比如originalDebug、blackRelease),拼接Flavor和Build Type的名称,生成对应的APP_INFO常量。
具体代码实现
根据你使用的Gradle脚本语言(Groovy或Kotlin DSL),选择对应的配置方式:
方式1:Groovy脚本(build.gradle)
android { // 定义你的Flavors productFlavors { original { // 如果有维度需求可以添加,没有则去掉 dimension "appVariant" } black { dimension "appVariant" } } buildTypes { debug { // 保留你的Debug构建配置(比如minifyEnabled false等) } release { // 保留你的Release构建配置(比如minifyEnabled true等) } } // 遍历所有Application变体,生成组合式APP_INFO applicationVariants.all { variant -> // 将Flavor和Build Type名称转为大写,拼接成常量值 def flavorUpper = variant.flavorName.toUpperCase() def buildTypeUpper = variant.buildType.name.toUpperCase() def appInfoValue = "\"${flavorUpper}_${buildTypeUpper}\"" // 生成BuildConfig.APP_INFO常量 variant.buildConfigField("String", "APP_INFO", appInfoValue) } }
方式2:Kotlin DSL(build.gradle.kts)
android { productFlavors { create("original") { dimension = "appVariant" } create("black") { dimension = "appVariant" } } buildTypes { getByName("debug") { // 你的Debug构建配置 } getByName("release") { // 你的Release构建配置 } } applicationVariants.all { val flavorUpper = flavorName.uppercase() val buildTypeUpper = buildType.name.uppercase() val appInfoValue = "\"${flavorUpper}_${buildTypeUpper}\"" buildConfigField("String", "APP_INFO", appInfoValue) } }
配置说明
- 这段代码会为每个变体生成对应的
APP_INFO:originalDebug→BuildConfig.APP_INFO = "ORIGINAL_DEBUG"originalRelease→BuildConfig.APP_INFO = "ORIGINAL_RELEASE"blackDebug→BuildConfig.APP_INFO = "BLACK_DEBUG"blackRelease→BuildConfig.APP_INFO = "BLACK_RELEASE"
- 如果之前你在
buildTypes中单独设置过APP_INFO,请删除那行配置,避免冲突(变体级别的配置优先级更高)。
后续操作
配置完成后,点击Android Studio右上角的Sync Now同步Gradle,然后重新构建项目(Build → Make Project),新的BuildConfig就会生成并生效了。
内容的提问来源于stack exchange,提问作者Saurabh Padwekar
相关产品推荐
相关产品推荐

