Android配置build.gradle编译release包时以日期时间加序列号为Version Code且Version Code自动增长(二)

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

Android配置build.gradle编译release包时以日期时间加序列号为Version Code且Version Code自动增长(二)

Android官方推荐以一个自然增长的整数值为Version Code,比如以基础数值1为基础,每次发一个release包时候Version值自增长1,于是Version Code以1,2,3,4,5,,,,这种样式的自然整数增长下去。然而有时候,可能项目本身想利用Version Code表达一些有意义的事情,比如用时间日期+序列号,表明该release包是具体什么日期打的包。举例2018年12月3日打了第一个release包,那么这个包的Version Code值为:2018120301,如果修复了一些小问题,当天又打了第二个release包,于是Version Code值变为:2018120302,至于20181203后面的01,02表示打出的release包序列号,整齐期间个位数前面补齐补上0。通常两位数就够用了,一天之内,不太可能打出上百个release包,一般也就最多不超过两位数。
为实现上述目的,现在在附录文章1的基础上改进,关键还是配置app目录下的build.gradle文件:

import java.text.DecimalFormat

apply plugin: 'com.android.application'

android {
    ......

    def currentVersionCode = getVersionCode()

    defaultConfig {
        ......
        versionCode currentVersionCode
        versionName "1.0"
        ......
    }
   ......
}

dependencies {
    .......
}

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 Integer.parseInt(getVersionCodePrefix() + addZeroForNumber(versionCode))
    } else {
        throw new GradleException("无法读取version_code.properties文件!")
    }
}

//Version Code的前缀。年月日,例如20181203。
def getVersionCodePrefix() {
    def date = new Date()
    def versionCode = date.format('yyyyMMdd')
    return versionCode
}

//给一个int整数左边补上0。比如一个整数值为1,经过addZeroForNumber处理后,返回01。
def addZeroForNumber(versionCode) {
    DecimalFormat df = new DecimalFormat('00')
    return df.format(versionCode);
}

附录:
1,《Android配置build.gradle实现Version Code编译release包时自动增长(一)》链接:https://blog.csdn.net/zhangphil/article/details/84770126 

猜你喜欢

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