Android配置build.gradle实现Version Code编译release包时自动增长(一)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/84770126

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名称编写实现则会正确实现目标。

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/84770126