使用gradle構建Android時 版本號碼versionName中嵌入git提交資訊

來源:互聯網
上載者:User

標籤:編譯   ref   工具介紹   版本號碼   evel   分支   索引   tco   exce   

為什麼要這麼做

??在應用開發的版本迭代過程中,通過版本號碼並不能快速定位到所對應的代碼,導致在後面分析問題追溯對應版本的代碼時比較麻煩。
??如果代碼是通過git來管理的,git的commit id等資訊是能夠快速定位到響應代碼的。如果能夠在構建應用的時候自動將commit id嵌入到versionName中去,對後續的追溯是有很大協助的。
??以下以主流的gradle構建工具介紹。

可行的辦法
  1. 可以通過gradle調用git命令擷取當前倉庫狀態,拼接到versionName裡面
    如通過git describe --always擷取形如origin/develop.2.0.1017-2-g0327583(有tag存在)或0327583(無tag存在)
    或者通過git rev-parse HEAD擷取形如90312cd9157587d11779ed7be776e3220050b308,或通過git rev-parse --short HEAD擷取短的90312cd9.
  2. 方法1使用起來很方便,但是需要依賴構建環境是有git且配置完全正確,實際在windows上可能會出現命令列中編譯OK,在Android Studio中卻執行失敗的情況。因此這裡介紹的方法是在代碼倉庫相對路徑裡自己解析git commit id資訊拼裝到versionName中。
步驟介紹提取git commit id

gradle指令碼裡面提取git commit id

gradle.allprojects {    ext.getGitHeadRefsSuffix = {        try {            // .git/HEAD描述目前的目錄所指向的分支資訊,內容樣本:"ref: refs/heads/master\n"            def headFile = new File(‘.git/HEAD‘)            if (headFile.exists()) {                String[] strings = headFile.getText(‘UTF-8‘).split(" ");                if (strings.size() > 1) {                    String refFilePath = ‘.git/‘ + strings[1];                                        // 根據HEAD讀取當前指向的hash值,路徑樣本為:".git/refs/heads/master"                    def refFile = new File(refFilePath.replace("\n", ""));                    // 索引檔案內容為hash值+"\n",                    // 樣本:"90312cd9157587d11779ed7be776e3220050b308\n"                    return "_" + refFile.getText(‘UTF-8‘).substring(0, 7)                }            }        } catch (Exception e) {            e.printStackTrace()        }        return ""    }}

將上述儲存到公用的common.gradle指令碼中,供後續使用。

project中匯入

project的build.gradle中匯入

apply from: ‘common.gradle‘
module引用

在module中根據需要引用定義的方法

android {    ....    defaultConfig {        ....        versionName "2.0_" + getGitHeadRefsSuffix()        ....    }    ....}
檢驗

構建安裝後確認應用的版本資訊,形如:

....versionName=2.0_14e1535....

如果需要跟蹤到對應版本的代碼,可以在git倉庫中直接

git checkout 14e1535 [-b $branchname]



轉載連結:http://www.jianshu.com/p/582939dfd73e

使用gradle構建Android時 版本號碼versionName中嵌入git提交資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.