Android 发布自动版本号方案 ( gradle + git )/ git rev-list HEAD/git describe --tags
Posted Mars-xq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 发布自动版本号方案 ( gradle + git )/ git rev-list HEAD/git describe --tags相关的知识,希望对你有一定的参考价值。
常用:
# 获取当前分支的提交总次数:
> git rev-list HEAD --count
1042
# 使用commit的哈希值作为版本号也是可以的,获取最新的一次提交的哈希值的前七个字符
> git rev-list HEAD --abbrev-commit --max-count=1
cc450c1de
# 获取最新的一个tag信息
> git describe --tags
v1.9.0-4-gcc450c1de
# v1.9.0 : tag名
# 4 : 打tag之后又有四次提交
# gcc450c1de :开头 g 为git的缩写,在多种管理工具并存的环境中很有用处
# cc450c1de : 当前分支最新的commitID前几位
demo :
def gitVersionCode() {
def cmd = 'git rev-list HEAD --first-parent --count'
cmd.execute().text.trim().toInteger()
}
def gitVersionTag() {
def cmd = 'git describe --tags'
def version = cmd.execute().text.trim()
def pattern = "-(\\\\d+)-g"
def matcher = version =~ pattern
if (matcher) {
version = version.substring(0, matcher.start()) + "." + matcher[0][1]
} else {
version = version + ".0"
}
return version
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.race604.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName '1.0'
}
buildTypes {
debug {
// 为了不和 release 版本冲突
applicationIdSuffix ".debug"
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
applicationVariants.all { variant ->
if (variant.buildType.name.equals('release')) {
variant.mergedFlavor.versionCode = gitVersionCode()
variant.mergedFlavor.versionName = gitVersionTag()
}
}
}
以上是关于Android 发布自动版本号方案 ( gradle + git )/ git rev-list HEAD/git describe --tags的主要内容,如果未能解决你的问题,请参考以下文章
使用gradle构建Android时 版本号versionName中嵌入git提交信息
使用 Artifactory 和/或 Gradle 自动化版本号
Android Studio 打包apk,自动追加版本号和版本名称
Android Studio 打包apk,自动追加版本号和版本名称