繁体   English   中英

Git Rev列表在Android Studio build.gradle中不起作用

[英]Git rev-list not working in Android Studio build.gradle

我已经设置了Android Studio项目以与Github一起使用。 这是我的清单

apply plugin: 'com.android.application'


def gitVersion() {
    def counter = 0
    def process = "git rev-list master --first-parent --count".execute()
    counter = process.text.toInteger()
    return counter
}

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    def versionMajor = 0
    def versionMinor = 1
    def versionPatch = 0

    defaultConfig {
        applicationId "com.my.packagename"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode gitVersion()
        versionName "${versionMajor}.${versionMinor}.${versionPatch}"
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

但是,当我使用gitVersion()时,出现以下错误,

Error:(7, 0) For input string: ""

对我来说,这意味着该进程正在返回一个空字符串。 但是,我可以从命令行运行它并获得预期的结果。

为什么仅在Android Studio中会发生这种情况?

我发现了问题。 默认情况下,Android Studio在项目文件夹中执行命令行操作。 我将项目制作为使git repo驻留在我的应用程序目录中而不是我的项目目录中,因此项目级别的任何git命令都会出错,因为它不知道git repo所在的目录。

我的解决方案是将git repo从app目录移到项目目录 一旦这样做,脚本就可以完美运行。

我编写并测试了该脚本以用于OSX Mavericks。 您使用哪种OS平台进行构建? 另外,您是否尝试了不带“ .text”的尝试? 您可能必须在该行上尝试不同的组合,才能看到有效的方法。

此方法将帮助您获取修订号:

int extractVersionCode() {
    def stdout = new ByteArrayOutputStream()
    exec {
        workingDir projectDir
        executable 'git'
        args 'rev-list', '--count', 'HEAD'
        standardOutput = stdout
    }
    return stdout.toString().trim().toInteger()
}

用法:

versionCode extractVersionCode()

尝试这个:

def gitCommitCount = Integer.parseInt(['sh', '-c', 'git rev-list HEAD | wc -l | tr -d " "'].execute([], project.rootDir).text.trim())

defaultConfig {
  ...
  versionCode gitCommitCount
  ...
}

只需为execute()指定工作目录即可:

.execute([], project.rootDir)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM