文章

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

需求

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

更好的做法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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放在一个文件里,每次发布新版本时,读取这个值,递增一次,最后再写回这个文件 具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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!")
}

参考链接

本文由作者按照 CC BY 4.0 进行授权

Comments powered by Disqus.