Android配置build.gradle實現Version Code編譯release包時自動增長(一)
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名稱編寫實現則會正確實現目標。