我通常设置versionCode& version git info的项目名称。 即versionCode描述git存储库中的最新标记,而versionName代表从头开始的提交总数。
/app/build.gradle将如下所示。
// ...
defaultConfig {
// ...
versionCode evalVersionCode()
versionName evalVersionName()
// ...
}
这两个函数定义如下。
/**
* Generates versionName by latest tag in GIT
*/
project.ext.evalVersionName = {
// git describe --tags $(git rev-list --tags --max-count=1)
def p = Runtime.getRuntime().exec("git describe --abbrev=0 --tags")
def result = p.waitFor() // returns 1
def versionName = "undefined"
if (result == 0) {
versionName = p.getInputStream().readLines().get(0)
}
project.logger.debug("versionName: git describe --abbrev=0 --tags => $versionName")
return versionName // I expect "v0.8.3" here.
}
/**
* Generates versionCode by number of commits in GIT
*/
project.ext.evalVersionCode = {
def p = Runtime.getRuntime().exec("git rev-list --all --count")
def result = p.waitFor() // returns 1
def versionCode = 0
if (result == 0) {
versionCode = p.getInputStream().readLines().get(0).toInteger()
}
project.logger.debug("versionCode: git rev-list --all --count => $versionCode")
return versionCode // I expect 639 here.
}
这个机制运行良好,直到我在我的BitBucket帐户中设置2FA,该帐户具有此项目的存储库。 设置后,此代码不起作用,2个函数只返回硬编码结果,即" undefined" &安培; 0
这是因为git
命令无法在构建阶段正常运行,即p.waitFor()
返回非零值。
P.S。即使在2FA设置之后,git命令也能在终端中正常工作。