我的android版本设置为在发布模式下使用文件中的versionName
和versionCode
。在不创建发布版本以保持增量构建工作时,它们将设置为静态值。
gradle文件的相关部分是:
android {
defaultConfig {
versionCode 1
versionName "1.0"
// SNIP...
}
applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
variant.versionCode = file('version-code.txt').text as int
variant.versionName = file('version.txt').text
}
}
// SNIP ...
}
版本文件的示例内容可以是:
version.txt
:0.7
version-code.txt
:7
这是通过遵循建议的指南中的Use static build config values with your debug build部分来完成的,以保持增量版本的正常运行。
例如,使用动态版本代码,版本名称,资源或任何其他更改清单文件的构建逻辑,每次要运行更改时都需要完整的APK构建 - 即使实际更改可能只需要热插拔。 如果您的构建配置需要这样的动态属性,那么将它们隔离到您的发布版本变体并保持调试版本的静态值,如下面的build.gradle文件所示。
但是,我们发现自从升级到gradle插件的第3版后这种情况已经破裂,这已经不再适用了。 gradle插件3.0.0迁移指南的Modifying variant outputs at build time may not work部分说:
使用Variant API来操纵变体输出会被新插件破坏。它仍适用于简单的任务,例如在构建时更改APK名称,如下所示:
但是,涉及访问outputFile对象的更复杂的任务不再有效。这是因为在配置阶段不再创建特定于变体的任务。这导致插件不能预先知道所有输出,但也意味着更快的配置时间。
迁移指南中似乎没有任何其他选择。还有另一种方法可以实现吗?
更新
感谢@nhoxbypass的回答,更改我的gradle文件以包含以下内容:
applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
variant.outputs.all { output ->
output.setVersionNameOverride(file('version.txt').text)
output.setVersionCodeOverride(file('version-code.txt').text as int)
}
}
}
答案 0 :(得分:4)
migration guide 仍可用于简单任务,例如在构建期间更改APK名称(至少适用于我的项目)。但是,涉及访问outputFile
对象的更复杂的任务不再有效。
但是如果您需要尝试一种解决方法,那么在3.0版本之前就有一个存在,如果有人在寻找解决方案,您可以使用:
output.setVersionCodeOverride(Integer.parseInt(buildTimeSmall()))
请参阅:Unable to change project versionCode for different build types