我试图让Gradle从Git中获取最后一个标记并将其用作versionName
。我定义了这个简单的任务:
def gitTag() {
def cmd = "git describe --abbrev=0 --tags"
def proc = cmd.execute()
return proc.text.trim()
}
然后像这样使用它:
defaultConfig {
// (...)
versionName gitTag() ?: "NO_VERSION"
}
问题是,这只能在从命令行构建时按预期工作。当我尝试从Android Studio运行应用程序时,我总是得到" NO_VERSION"。
编辑:经过一些测试后似乎失败了,因为运行Android Studio时的工作目录是~/.AndroidStudio/system/compile-server
,因此上面的命令失败,因为该目录不是git存储库。
EDIT2:在玩了一些之后,似乎只有一些命令失败了。如果我用git --version
或git status
替换命令,我得到预期的输出,但是如果我使用类似git rev-list HEAD --count
的东西,则stdout和stderr都是空的。使用git rev-list HEAD
也可以。 WAT
那么如何使用Gradle项目目录作为工作目录执行git命令?