Android 从最后一个git标记设置versionCode

Android 从最后一个git标记设置versionCode,android,git,gradle,Android,Git,Gradle,我试图让Gradle从Git中提取最后一个标记,并将其用作versionName。我定义了这个简单的任务: def gitTag() { def cmd = "git describe --abbrev=0 --tags" def proc = cmd.execute() return proc.text.trim() } 然后像这样使用它: defaultConfig { // (...) versionName gitTag() ?

我试图让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运行应用程序时,我总是得到“无版本”

编辑:在一些测试之后,它似乎失败了,因为运行Android Studio时的工作目录是
~/.AndroidStudio/system/compile server
,所以上面的命令失败了,因为该目录不是git存储库

EDIT2:在玩了更多的游戏之后,似乎只有一些命令失败了。如果我用
git--version
git status
替换命令,我会得到预期的输出,但是如果我使用类似于
git rev list HEAD--count的东西,那么stdout和stderr都是空的。使用
git rev list HEAD
也可以。沃特


那么,如何使用Gradle项目目录作为工作目录来执行git命令呢

您尝试过git命令行的完整路径吗?@Quanturium是的,结果是一样的。问题似乎与使用的工作目录有关。命令的输出是什么?这似乎与以下问题相同:Try
cd/path/to/working/directory&&git descripe--abbrev=0--tags