如何用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
相关产品推荐
相关产品推荐

