在我的应用程序中,我有2个维度“应用程序”和“服务器”,我有4种口味。现在我想有不同的版本代码不同的口味组合。
例如:
- 对于 ApponeLive,我希望有版本代码1。
- 对于 ApponeStaging,我希望使用versionCode 2。
- build.gradle.kts*
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"
}
}
字符串
我尝试使用 “applicationVariants.configureEach { }" 设置版本代码,但versionCode为瓦尔,这意味着无法重新分配。
根据 “ProductFlavor.kt”
与此风味关联的版本代码,如果没有设置,则为空。这只是在此产品风味上设置的值,不一定是使用的实际版本代码。
applicationVariants.configureEach {
val app = productFlavors[0].name
val server = productFlavors[1].name
if (app == "Appone" && server == "live"){
mergedFlavor.versionCode = 1
}else if (app == "Appone" && server == "staging"){
mergedFlavor.versionCode = 2
}else {
//Do something..
}
}
型
我甚至试过铸造 “MergedFlavor”,但它导致gradle任务失败,并显示了我认为是Groovy的。
applicationVariants.configureEach {
val app = productFlavors[0].name
val server = productFlavors[1].name
if (app == "Appone" && server == "live"){
(mergedFlavor as MergedFlavor).versionCode = 1
}else if (app == "Appone" && server == "staging"){
(mergedFlavor as MergedFlavor).versionCode = 2
}else {
//Do something..
}
}
型
*Gradle错误 *
无法直接在mergedFlavor上设置versionCode。可以使用以下语法为变量输出设置versionCodeCode:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.versionCodeOverride = 1
}
}
}
型
现在我没有办法了,任何帮助都将不胜感激。
1条答案
按热度按时间rekjcdws1#
经过一些研究,我想出了这个,它为我工作,但我不确定这是否是一个最佳解决方案。
让我知道是否可以做任何优化。
字符串
云计算
型
回调中执行的代码还可以访问用于配置org.gradle.API.Task输入的VariantT信息(例如buildConfigFields)。此类信息表示为org.gradle.API.provider.Property,但仍可以修改,以确保Android Gradle插件创建的所有org.gradle.API. Task都使用更新后的值。