gradle 及 git 环境下利用hook及gradle脚本自动添加versioncode和versionname的方法
在 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的方法的更多相关文章
- Windows环境下利用github快速配置git环境
在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...
- 一步步教你搭建VS环境下用C#写WebDriver脚本
一步步教你搭建VS环境下用C#写WebDriver脚本http://www.automationqa.com/forum.php?mod=viewthread&tid=3529&fro ...
- 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本
20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...
- Window环境下,PHP调用Python脚本
参考 php调用python脚本*** php 调用 python脚本的方法 解决办法:php提供了许多调用其他脚本或程序的方法,比如exec/system/popen/proc_open/passt ...
- windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录
Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚.下面介绍windows环境下的自动部署和发布. 所需环境及资源:Java环境.Gitblit ...
- 在ctex环境下利用Metapost作图
使用Metapost作图,是LaTeX的好搭档.下面介绍如何在ctex环境下的使用Metapost作图. 首先新建一个test.mp的Metapost文件. 在文件开始需要声明如下代码: prolog ...
- 断网环境下利用pip安装Python离线安装包
这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...
随机推荐
- MyEclipse 10离线安装PyDev插件
PyDev for Eclipse, 经过测试,一般在线安装会失败(不能访问某些网站所致) 以下为离线安装步骤 1 下载 PyDev 2.8.2, 链接:http://sourceforge.net ...
- Codeforces Round #320 (Div. 2) D. "Or" Game 数学
D. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 详解javascript中的call, apply
一些学js的同学一看到call, apply, 就蒙了, 感觉不好懂, 看的头大. 今天我们就一起来研究一下这2个东东.彻底弄清楚它们的用法. 定义: call, apply是函数的方法, 只有函数才 ...
- 浅析JavaScript引用类型之--Object、Array
1.Object类型 对象是某个特定引用类型的实例,新对象有两种创建方式: i.使用new操作符调用构造函数来创建. var person = new Object(); person.name = ...
- DataGridView 相关操作
一.单元格内容的操作// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Consol ...
- web开发workflow
web development是一个创建和实施一个新的互联网展示的过程,web网站可以是个非常成熟包罗万象的网站,也可以只是一个blog或者一两个页面.如果未做好充分的准备,web开发将是一个非常复杂 ...
- bzoj4026
直接按照欧拉函数的计算方式来即可 φ=区间积*区间出现(质数-1)的积/区间出现过的质数的积 区间积是满足类似区间减法的操作的(利用逆元) 由于强制在线,上主席树就可以了(维护每个质数上次出现的位置p ...
- R2的版本由来
给人一杯水,自己先有一桶水.上课.备课,那么备课中就常有一些稀奇古怪的问题. 学生问:SP2和R2是一样的吗? 老师答:不一样,一个是补丁程序,另一个是服务器操作系统. 学生不解:R2如果是操作系统, ...
- 菜鸟学习笔记2,$(document).ready()使用讨论
$(document).ready()使用讨论 $(document).ready() 一.先为说说 $(document).ready() 的功能: 1. JQuery API对 $(docume ...
- 【解题报告】[动态规划] RQNOJ PID5 / 能量项链
原题地址:http://www.rqnoj.cn/problem/5 解题思路: 今天刚刚才知道了区间DP..Orz..本来以为是状态压缩DP,后来看到数据量才发现原来不是.后来参考了别人的题解.自己 ...