如何在Kotlin DSL中为不同Flavor维度组合设置不同versionCode
为多维度Flavor组合设置不同versionCode的解决方案
你遇到的问题核心是Gradle中mergedFlavor的versionCode是只读属性(val),无法直接赋值,官方要求必须通过variant的outputs来设置versionCodeOverride。以下是具体实现方案:
在你的build.gradle.kts中,添加applicationVariants.configureEach代码块,遍历每个变体,根据Flavor组合的名称匹配对应的versionCode:
flavorDimensions.add("app") flavorDimensions.add("server") productFlavors { create("Appone") { val appName = "App One" applicationId = "com.app.one" dimension = "app" resValue("string", "appName", appName) manifestPlaceholders["launcherName"] = appName } create("Apptwo") { val appName = "App Two" applicationId = "com.app.two" dimension = "app" resValue("string", "appName", appName) manifestPlaceholders["launcherName"] = appName } create("live") { dimension = "server" manifestPlaceholders["appNameSuffix"] = "" } create("staging") { dimension = "server" applicationIdSuffix = ".staging" versionNameSuffix = "-staging" manifestPlaceholders["appNameSuffix"] = " Staging" } } // 新增:为不同Flavor组合设置versionCode applicationVariants.configureEach { outputs.configureEach { val versionCode = when (flavorName) { "ApponeLive" -> 1 "ApponeStaging" -> 2 "ApptwoLive" -> 3 // 可根据需求添加其他组合的versionCode "ApptwoStaging" -> 4 else -> 0 // 默认值,可调整 } (this as com.android.build.gradle.internal.api.BaseVariantOutputImpl).versionCodeOverride = versionCode } }
关键说明:
flavorName是Gradle自动生成的Flavor组合名称,格式为App维度名称+Server维度名称(注意首字母大写,比如Appone+live会变成ApponeLive)- 必须将outputs强制转换为
BaseVariantOutputImpl才能访问versionCodeOverride(Kotlin中需要显式强转) - 可以根据需求扩展
when语句,覆盖所有4种Flavor组合的versionCode设置
内容的提问来源于stack exchange,提问作者Akrit Khanna
相关产品推荐
相关产品推荐

