我有一个更新应用版本代码的任务,名为“changeVersionCode”。该任务在我的 Android 构建任务 (assembleRelease) 之前运行,但显然它发生在 android { }
关闭之后。这似乎意味着 versionCode 已设置并且即使在 changeVersionCode 运行时也无法更改。
这是一个简化的构建脚本,演示了我如何尝试解决此问题:
// .version is a file that starts at "1" the first time I call this
def loadVersionCode() {
// fetch version code from a file, '.version'
return loadVersionCodeFromFile('.version')
}
def incrementVersionCode() {
// fetch version code, update it, and save it back to a file
def newVersion = loadVersionCode() + 1
saveVersionCodeToFile('.version', newVersion)
}
apply plugin: 'com.android.application'
android {
// ... snip ...
defaultConfig {
// Set the version code to contents of .version (eg. 1)
versionCode loadVersionCode()
// ...
}
}
task incrementVersionCode << {
println "Old version code: " + android.defaultConfig.versionCode // prints 1
incrementVersionCode()
def newVersion = loadVersion() // this now returns 2
android.defaultConfig.versionCode = loadVersionCode()
// Also tried:
// android.defaultConfig.versionCode loadVersionCode()
println "New version code: " + android.defaultConfig.versionCode // prints 2
// android.defaultConfig.versionCode is now 2, but APK still has version 1 (until next time I run gradle)
}
然后:
# Build an APK with versionCode 1
$ ./gradlew assembleRelease
# This seems to change versionCode to 2, but still builds an APK with versionCode 1
#
# Prints:
# Old version code: 1
# New version code: 2
$ ./gradlew incrementVersionCode assembleRelease
我正在使用:
- Gradle 2.5
- Groovy 2.3.10
- Ant 1.9.3
- Java 1.8.0_45
- Mac OS X 10.10.5
- Android 构建工具 22.0.1
在调用 Android 构建任务之前,有什么方法可以更改任务的版本代码吗?
最佳答案
如何在任务启动前配置versionCode
您可以使用 DSL tasks.whenTaskAdded
。您可以阅读official doc ,第 58.6.2 章。任务创建。
You can receive a notification immediately after a task is added to a project. This can be used to set some default values or add behaviour before the task is made available in the build file.
您可以定义任务:
task incrementVersionCode << {
//do something
}
然后定义依赖关系:
tasks.whenTaskAdded { task ->
if (task.name == 'xxxxx') {
task.dependsOn incrementVersionCode
}
}
根据您的情况,您可以执行以下操作:
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig' || task.name == 'generateDebugBuildConfig') {
task.dependsOn 'increaseVersionCode'
}
}
如何使用函数配置versionCode
在顶级文件中,您可以配置如下功能:
ext {
buildVersionCode = {
//...
}
}
在你的module/build.gradle
中你可以做这样的事情:
defaultConfig {
versionCode buildVersionCode()
//....
}
否则,您可以在 build.gradle
中执行以下操作:
defaultConfig {
//...
versionCode getMyNumber()
}
def getMyNumber() {
return //.... ;
}
关于android - Gradle 任务完成后设置 Android versionCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508297/