zoukankan      html  css  js  c++  java
  • 使用gradle构建Android时 版本号versionName中嵌入git提交信息

    为什么要这么做

      在应用开发的版本迭代过程中,通过版本号并不能快速定位到所对应的代码,导致在后面分析问题追溯对应版本的代码时比较麻烦。
      如果代码是通过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
    "
                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("
    ", ""));
    
                        // 索引文件内容为hash值+"
    ",
                        // 示例:"90312cd9157587d11779ed7be776e3220050b308
    "
                        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

  • 相关阅读:
    我是如何去了解jquery的(六),案例之幻灯片轮换
    近两年学习博客案例目录整理
    我是如何去了解jquery的(三),事件之点击事件,光棍节特献
    滚动鼠标放大缩小图片效果,兼容火狐
    自己动手制作jquery插件之自动添加删除行(下)
    JY案例一:瀑布流布局页面
    我是如何去了解jquery的(一),从查询开始
    自己动手制作jquery插件之自动添加删除行(上)
    我是如何去了解jquery的(二),复杂选择符
    我是如何去了解jquery的(七),案例之不间断滚动
  • 原文地址:https://www.cnblogs.com/fuyaozhishang/p/7675551.html
Copyright © 2011-2022 走看看