在更新到AGP(Android插件) 3.2.0之后,我们不能直接在mergedFlavor上设置mergedFlavor。如果我们这样做,就会得到以下有用的警告:
versionCode cannot be set on a mergedFlavor directly.
versionCodeOverride can instead be set for variant outputs using the following syntax:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.versionCodeOverride = 40805
}
}
}在这个变化之后,除了一件小事情外,一切都很好。自动生成的BuildConfig.VERSION_CODE不反映来自output.versionCodeOverride = 40805的版本代码。
在AGP 3.2.0之前,我们可以通过以下方法动态地设置versionCode:
applicationVariants.all { v ->
v.mergedFlavor.versionCode = 40805 // 40805 is hardcoded as an example but it is archived dynamically.
}以及反映在BuildConfig.VERSION_CODE中的版本代码(这非常方便),我想用AGP3.2.0进行同样的归档。
我知道我可以通过为这类variant.buildConfigField('int', 'OVERRIDDEN_VERSION_CODE', "${versionCodeOverride}")创建一个定制的build字段来解决这个问题,这将使用我覆盖的BuildConfig.OVERRIDDEN_VERSION_CODE生成versionCode。通过通过versionCode设置mergedFlavor.versionCode = 40805来存档AGP版本,如3.2.0所示,但我不喜欢这种解决办法。
有没有办法让output.versionCodeOverride = 40805在自动生成的BuildConfig.VERSION_CODE中进行反射?
PS:如果我们将versionCode直接设置在特定的风格中,它将如预期的那样工作,但这不是我想知道的:)
更新
找到一个类似的问题(用一个描述良好的用例),并考虑到我们的讨论,我可以给出一个更好的答案,这里。
发布于 2018-09-25 20:13:20
综上所述,问题不在于版本代码覆盖根本没有被应用,只是BuildConfig.VERSION_CODE没有获取覆盖值。
这已在官方问题跟踪器( https://issuetracker.google.com/issues/37008496 )中被标记为预期行为。
其中一条注释解释了为什么定义versionCode,并建议将defaultConfig定义为一种风格,而不是defaultConfig
如果我们为每个输出创建一个不同的buildconfig.java,那么我们还需要为每个拆分运行javac/proguard/jacoco/dex,这样我们就失去了构建时间的改进。 如果这对您非常重要,那么就不要使用splits,而是使用味道,但是我们会得到更慢的构建时间。
如果不想更改当前设置,则可能需要从清单中读取版本代码。你所需要的只是一个背景:
val versionCode = context.packageManager.getPackageInfo(context.packageName, 0).versionCode您应该缓存这个值,因为获取包信息是一个非常重要的操作。
版本号也是如此。
发布于 2018-09-25 17:08:33
指令的顺序很重要..。
String versionName = version.versionName
int versionCode = version.versionCode
android {
applicationVariants.all { variant ->
// to be removed here:
// variant.mergedFlavor.versionCode = versionCode
variant.outputs.each { output ->
// and to be added here:
output.versionNameOverride = versionName
output.versionCodeOverride = versionCode
}
}
}构建多个APK的文档解释了它,下面是“配置版本控制”。
虽然这样做的原因不是构建工具3.2.0,而是Gradle 4.6。
https://stackoverflow.com/questions/52502548
复制相似问题