jk2K's 窝

休息,是为了更好的前行

哈喽, 我是叶萌(@jk2K), 一名来自中国的 PHP / iOS 开发者


当发布新版本时自动递增 versionCode

需求

versionCodeandroid应用内部用来识别版本,判断新旧用的, 希望每次发布新版本时能够自动化的自增,避免人工修改可能带来的问题

更好的做法

import java.util.regex.Pattern
task('increaseVersionCode') << {
def buildFile = file("build.gradle")
def pattern = Pattern.compile("versionCode\\s+(\\d+)")
def manifestText = buildFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode " + ++versionCode)
buildFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name.matches('assemble.*?Release')) {
task.dependsOn 'increaseVersionCode'
}
}

这样就实现了每次发布新版本时,自动递增versionCode, 比普通做法的好处是,无需增加另外的文件, 更简便

普通做法

versionCode放在一个文件里,每次发布新版本时,读取这个值,递增一次,最后再写回这个文件
具体代码如下

def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def code = versionProps['VERSION_CODE'].toInteger() + 1
versionProps['VERSION_CODE'] = code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode code
versionName "1.1"
minSdkVersion 14
targetSdkVersion 18
}
}
else {
throw new GradleException("Could not read version.properties!")
}

参考链接

comments powered by Disqus