APP在每次編寫完成時 , 要上傳 Google Play 都必須變更 VersionCode 才能讓使用者按照 VersionCode 比對更新 , 更新原則與限制如下
- VersionCode 號碼需要比上次的 VersionCode 號碼還要大
- VersionCode 最高極限為 2100000000 , 總共10碼
所以按照以上兩點原則來看 , 想讓系統自動處理 , 又想加上日期當作區隔 , 就需要作一點手腳
最後我想要的格式如右 年+月+日+版本號碼
年 = 使用民國年 , 又考慮到辨識問題 , 所以保留三碼民國年號碼 ex.108 , 這邊有個限制是萬一一天編譯超過100次(含)又剛好超過民國210年號碼就會爆掉 , 但這問題還要等30年 , 以我的年紀來說 , 我暫時還不想理會這問題 (就算超過 , 到時候取民國年後兩碼也可以 , 但目前因為已好辨識為原則 , 所以還是取3碼民國年)
月 , 日 = 使用各兩碼 , 不足補0 , 所以變成 0515 這樣
版本號碼 = 每編譯程式一次就+1 , 從1開始 , 最高 999 , 因為最高極限為10碼 , 這邊一天只能編譯不能超過 999 次 , 超過 Google Play 就不允許啦 , 但這個機會很少 , 所以乾脆不考慮這問題 , 另外這邊還需判斷前面的年月日是否相同 , 若相同才會繼續家 , 不同就會從1開始
- 在app目錄底下新增一個名為 version.properties 的檔案 , 內容如下
VERSION_DATE=1080515 VERSION_CODE=1
VERSION_DATE = 這邊紀錄上次的編譯時間
VERSION_CODE = 這邊紀錄上次的編譯次數(版本號碼)
- 參考以下內容編輯 gradle
android {
compileSdkVersion 26
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "tw.com.songbor.temple"
minSdkVersion 18
targetSdkVersion 26
//抓取今天日期並寫換算成民國年
def today_date = Integer.parseInt(new Date().format("yyyyMMdd"))-19110000
//抓取版本紀錄檔案
def versionPropsFile = file('version.properties')
Properties versionProps = new Properties()
//讀取版本紀錄檔案
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
}
//初始話版本號碼
def code
//取得版本紀錄檔案-上次日期
def last_date = Integer.parseInt(versionProps['VERSION_DATE'])
//如果 上次日期 = 今天日期
if(last_date == today_date){
//回填號碼 = 版本號碼+1
code = versionProps['VERSION_CODE'].toInteger()+1
} else {
//版本號碼=1
code = 1
}
//準備回填資料 , 判斷版本號碼不足3碼時自動補0
if(code.toString().length() != 3){
if(code.toString().length() == 1){
versionProps['VERSION_CODE']="00"+code.toString()
} else {
versionProps['VERSION_CODE']="0"+code.toString()
}
}
versionProps['VERSION_DATE']=today_date.toString()
//回寫資料到版本紀錄檔案
versionProps.store(versionPropsFile.newWriter(), null)
// versionCode = 今天日期 + 版本號碼
versionCode Integer.parseInt(today_date.toString()+versionProps['VERSION_CODE'])
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}