自動化處理 VersionCode

常用檢測工具

MSI Afterbunner FurMark AIDA64 1943U-XYSD6-5FD5Z-DDAC4-C5NPK 3V3JD-EUYD6-1ZD5J-HDP94-FB1TV DPYQ3-U4JD6-G1D58-4DSW4-HST7T 3N3WY-H4MD6-19D5J-TDPX4-FS1GP 3N3WY-H4MD6-CUD5X-YDPX4-FSCHK HWiNFO [...]

By |20 5 月, 2020|Categories: 未分類|0 Comments

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'
        }
    }
}
2019-07-04T22:16:21+08:00