You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用buildConfigField按构建环境变体配置依赖版本并解决Gradle变量问题

问题原因与解决方案

问题根源

你用了全局的ext.version变量存储版本号,Gradle在配置阶段会按顺序执行所有Product Flavor的配置代码:先执行eval块把version设为0.1.7,接着执行integration块覆盖为0.1.8。而dependencies块和defaultConfig里的buildConfigField都是在配置阶段读取这个全局变量,自然只会拿到最后被覆盖的值,导致所有变体都共用同一个版本。

正确实现方式

1. 为每个Flavor定义专属版本属性

不要用全局变量,给每个Flavor添加独立的扩展属性,避免版本值互相覆盖:

android {
    flavorDimensions 'environments'
    productFlavors {
        eval {
            ext.testVersion = '0.1.7'
        }
        integration {
            ext.testVersion = '0.1.8'
        }
    }

    // 为每个Flavor生成对应的BuildConfig字段
    productFlavors.all { flavor ->
        buildConfigField "String", "TEST_VERSION", "\"${flavor.ext.testVersion}\""
    }

    defaultConfig {
        minSdkVersion 28
    }
}

2. 按Flavor配置依赖版本

直接通过Flavor的专属属性指定对应依赖的版本:

dependencies {
    evalApi "com.example:test:${android.productFlavors.eval.ext.testVersion}"
    integrationApi "com.example:test:${android.productFlavors.integration.ext.testVersion}"
}

3. 在应用中获取版本

构建完成后,每个变体的BuildConfig类会自动生成对应版本的TEST_VERSION常量,直接在代码中调用即可:

String testVersion = BuildConfig.TEST_VERSION;

内容的提问来源于stack exchange,提问作者Dev Loots

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:15