1. 程式人生 > >Android配置build.gradle編譯release包時以日期時間加序列號為Version Code且Version Code自動增長(二)

Android配置build.gradle編譯release包時以日期時間加序列號為Version Code且Version Code自動增長(二)

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