[英]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.