在 app/build.gradle 文件里添加几行代码:

def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project.rootDir).text.trim()
def gitCommitDate = 'git log -1 --pretty=%ci'.execute([], project.rootDir).text.trim().split()[]
def gitShortShaDate = gitCommitShortHash + "_" + gitCommitDate // Auto-incrementing commit count based on counting commits to HEAD (Build #543)
def gitCommitCount = Integer.parseInt('git rev-list HEAD --count'.execute([], project.rootDir).text.trim()) // I want to use git tags as my version names (1.2.2)
def gitCurrentTag = 'git describe --tags --abbrev=0'.execute([], project.rootDir).text.trim()

加完之后整个build.gradle文件像这个样子(注意其中的 versionCode gitCommitCount  和 versionName gitShortShaDate):

apply plugin: 'com.android.application'

def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project.rootDir).text.trim()
def gitCommitDate = 'git log -1 --pretty=%ci'.execute([], project.rootDir).text.trim().split()[]
def gitShortShaDate = gitCommitShortHash + "_" + gitCommitDate // Auto-incrementing commit count based on counting commits to HEAD (Build #543)
def gitCommitCount = Integer.parseInt('git rev-list HEAD --count'.execute([], project.rootDir).text.trim()) // I want to use git tags as my version names (1.2.2)
def gitCurrentTag = 'git describe --tags --abbrev=0'.execute([], project.rootDir).text.trim() android {
compileSdkVersion
buildToolsVersion "24.0.3"
defaultConfig {
applicationId "com.welhzh.android.myapplication"
minSdkVersion
targetSdkVersion
versionCode gitCommitCount
versionName gitShortShaDate
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
}

附:

git的 post-commit 类型 hook,post-commit 类型hook创建方法:1、这项目的主目录里创建一个hooks目录,在该目录里放入一个文件 post-commit,改属性:  chmod a+x post-commit,

然后将 .git/hooks 目录删除,将自己创建的hooks链接到 .git/ 目录里,进入 .git 目录执行:ln  -s  ../.hooks/  hooks,为啥要这么做,因为.git/ 目录下的所有文件是没法版本管理的,所以创建到工程目录以便加入版本管理。以后所有hook都放在该目录,且该目录不要忽略(不要放进.gitignore)。

该 post-commit 目录的内容:

#!/bin/bash
commit=$(git log - --pretty=%H%n%ci)
commit_full_hash=$(echo "$commit" | head -) # c7618bf23a71637c54b5e51c37cbace3f6ff4899
# commit_full_hash=$(git log - --pretty=%H) # same as above
# commit_full_date=$(echo "$commit" | head - | tail -) # -- :: +
commit_short_hash=$(git log - --pretty=%h) # c7618bf commit_date=$(git log - --pretty=%ci >/dev/null | cut -d" " -f ) # --
commit_time=$(git log - --pretty="%ci" >/dev/null | cut -d" " -f ) # :: branch_full=$(git symbolic-ref HEAD >/dev/null) # refs/heads/master
branch_simple=$(git symbolic-ref HEAD >/dev/null | cut -d"/" -f ) # master
# branch_simple=$(git symbolic-ref --short -q HEAD)
# branch_simple=$(git name-rev --name-only HEAD)
# branch_simple=$(git symbolic-ref --short -q HEAD) echo "print by hzh --------"
echo "$commit_full_hash"
echo "$commit_short_hash"
echo "$commit_date"
echo "$branch_full"
echo "$branch_simple"
echo "print by hzh end --------\n" # 当然,你可以将这些东西写到version文件里,然后编译的时候读取它,以下只是示例
versionfilename=$(git config hooks.versionfilename)
if [[ -z $versionfilename ]]
then
versionfilename="version"
fi # Version number
#echo \# Generated using git post-commit hook > $versionfilename
echo -n "$commit_time" > $versionfilename
echo -n " " >> $versionfilename
echo -n "$commit_date" >> $versionfilename
echo -n " " >> $versionfilename
echo -n "$commit_short_hash" >> $versionfilename
echo -n " " >> $versionfilename
echo -n "$branch_simple" >> $versionfilename

gradle 及 git 环境下利用hook及gradle脚本自动添加versioncode和versionname的方法的更多相关文章

  1. Windows环境下利用github快速配置git环境

    在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...

  2. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  3. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  4. 一步步教你搭建VS环境下用C#写WebDriver脚本

    一步步教你搭建VS环境下用C#写WebDriver脚本http://www.automationqa.com/forum.php?mod=viewthread&tid=3529&fro ...

  5. 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本

    20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...

  6. Window环境下,PHP调用Python脚本

    参考 php调用python脚本*** php 调用 python脚本的方法 解决办法:php提供了许多调用其他脚本或程序的方法,比如exec/system/popen/proc_open/passt ...

  7. windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录

    Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚.下面介绍windows环境下的自动部署和发布. 所需环境及资源:Java环境.Gitblit ...

  8. 在ctex环境下利用Metapost作图

    使用Metapost作图,是LaTeX的好搭档.下面介绍如何在ctex环境下的使用Metapost作图. 首先新建一个test.mp的Metapost文件. 在文件开始需要声明如下代码: prolog ...

  9. 断网环境下利用pip安装Python离线安装包

    这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...

随机推荐

  1. Android开源库--Universal Image Loader通用图片加载器

    如果说我比别人看得更远些,那是因为我站在了巨人的肩上.   github地址:https://github.com/nostra13/Android-Universal-Image-Loader 介绍 ...

  2. R语言实战读书笔记(五)高级数据管理

    5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...

  3. android studio sqlite操作代码片段

    SQLiteDatabase db;Cursor cur; SimpleCursorAdapter adapter;   // 打开或创建数据库db = openOrCreateDatabase(DB ...

  4. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  5. iOS基础CGAffineTransform的简单使用

    CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0. ...

  6. 事件对象event和计时器

    事件对象:event 属性: srcElement事件源对象 keyCode 键盘按键Ascii码 window方法: 定时器: 1)setTimeout();//n毫秒后执行一次 2)setInte ...

  7. simplefactory简单工厂模式

    简单工厂模式概述    又叫静态工厂方法模式,它定义一个具体的工厂类负责一些类的实例 优点    客户端不需要在负责对象的创建,从而明确了各个类的职责 缺点:    这个静态工厂类负责所有对象的创建, ...

  8. 20160204.CCPP体系详解(0014天)

    程序片段(01):define.h+data.h&data.c+control.h&control.c+view.h&view.c+AI.h&AI.c+main.c 内 ...

  9. 20160123.CCPP详解体系(0002天)

    程序片段(01):字符.c 内容概要: 转义字符 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdi ...

  10. Java核心技术II读书笔记(二)

    ch2 XML 有两种XML文档结构,DTD和Schema,用解释文档构成规则,这些规则指定了每个元素俺的合法子元素和属性. DTD DTD有多种提供方式,可以像下面这样加到XML中: <?xm ...