Android配置build.gradle实现Version Code编译release包时自动增长(一)
Android配置build.gradle实现Version Code编译release包时自动增长(一)
经常的,开发者在上线发布之前要打出很多测试包给测试团队测试,每次打出的release包为了区分不同的版本号,需要手动的修改Android里面的配置文件build.gradle的versionCode字段,这一工作纯属于机械的手工修改,重复劳动,一不小心可能还会把版本号version code改错,因此,需要寻找一种方案,在打包时候,自动实现version code自动增长,无需人工手动维护,现在就给出一个方案,通过配置Android Studio中的build.gradle文件实现这一目的。给出完整的模块app下build.gradle文件:
apply plugin: 'com.android.application'
android {
def currentVersionCode = getVersionCode()
defaultConfig {
......
versionCode currentVersionCode
......
}
......
}
......
def getVersionCode() {
def versionCodeFile = file('version_code.properties')
if (versionCodeFile.canRead()) {
Properties properties = new Properties()
properties.load(new FileInputStream(versionCodeFile))
def versionCode = properties['VERSION_CODE'].toInteger()//读取version_code.properties文件存放的版本号。
def runTasks = gradle.startParameter.taskNames
def task = ':app:assembleRelease'
if (task in runTasks) {
properties['VERSION_CODE'] = (++versionCode).toString()
properties.store(versionCodeFile.newWriter(), null)
}
return versionCode
} else {
throw new GradleException("无法读取version_code.properties文件!")
}
}
要特别注意currentVersionCode位置,不要放在defaultConfig里面。
配置文件version_code.properties里面写一个初始值,后续的编译版本将在这个基础上实现自增长,即没发布一个release版本,version_code.properties里面的VERSION_CODE将自动加1。version_code.properties和当前的app模块同处于一个文件目录下:
version_code.properties内容:
VERSION_CODE=1
关键是gradle里面getVersionCode()函数的编写。getVersionCode()只会在正式编译生成release包时候才去主动增加version code的值,其他情况如debug包不受影响不做变化。这里面的变量task定义容易出错
def task = ':app:assembleRelease'
其中task的值在不同的项目中会有不同,在我的例子中,task的值可以通过Android Studio带的Event log日志查看到底是什么:
在我的例子中,task的值是方括号里面的:app:assembleRelease。
总结起来,有两处要点如果没配置对,将不能正确自增长version code值:
(1)在当前build.gradle里面定义currentVersionCode的位置不对。
(2)def task的值,没有和当前Android Studio编译release的task名称一致。
严格按照本文的定义结构和build过程中Event Log输出的task名称编写实现则会正确实现目标。