在 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. leetcode:Contains Duplicate和Contains Duplicate II

    一.Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your fun ...

  2. 《OD学Oozie》20160807Oozie

    一.引入 MapReduce Job Hive 脚本任务 同一个业务:先后.定时调度 工作流: 定义工作流程 activity jbpm oozie: 大数据工作流定义与调度框架 专门定义与调度Map ...

  3. 浅谈javascript中的作用域

    首先说明一下:Js中的作用域不同于其他语言的作用域,要特别注意     JS中作用域的概念: 表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境.Javascript的作 ...

  4. javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全

    目录1历史 2澄清误解 3基本概念 4特点 5与Java的不同 6开发工具 历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚 ...

  5. Android应用加入微信分享

    一.申请你的AppID http://open.weixin.qq.com/ 友情提示:推荐使用eclipse打包软件最后一步的MD5值去申请AppID 二.官网下载libammsdk.jar包 ht ...

  6. [Android] Android开发优化之——使用软引用和弱引用

      Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. ...

  7. bzoj4197

    这题现场想的思路方向都是对的,但限于现场和实力因素没能A 很显然我们会想到质因数的选取 如果某个质数p被W选了,那G就不能选含有质因子p的数 因此我们不难想到状压质数的选取情况,令f[i][j]为w质 ...

  8. 凸优化简介 Convex Optimization Overview

    最近的看的一些内容好多涉及到凸优化,没时间系统看了,简单的了解一下,凸优化的两个基本元素分别是凸函数与凸包 凸集 凸集定义如下: 也就是说在凸集内任取两点,其连线上的所有点仍在凸集之内. 凸函数 凸函 ...

  9. 通过github提升自己-测试反馈、持续精进

    如果我们仅仅是将自己的代码commit.push到github上,那么对于我们的技术不会有太多的提升.我们所做的仅仅只是将github当成了我们的网盘. 我们每发布一个版本的时候,是不是也就意味着给用 ...

  10. mipmap 目录和drawable 目录有什么区别

    Q :最近使用studio 发现drawle-hdpi 都没有了换成了mipmap-hdpi,这两个目录有什么区别呢,哪个比较好呢??? A: 我简单总结一下: 使用上没有任何区别,你把它当drawa ...