好的,我已经在新的Android 构建系统上观看了 Xavier Ducrohet 的 YouTube 视频。我什至转而使用 Android Studio 并对此感到满意。现在我需要自定义构建规则以按照我想要的方式做事,其中之一是在清单文件中自动设置codeVersion
and 。codeName
Xavier 在他的一张幻灯片中展示了如何做到这一点:
def getVersionCode() {
def code = ...
return code
}
android {
defaultConfig {
versionCode getVersionCode()
}
}
那么有人会这么好心地指出我填写这些点的好资源吗?
更具体地说,我想运行一个脚本git describe --dirty | sed -e 's/^v//'
来确定versionName
和git tag | grep -c ^v
获取versionCode
.
谢谢
更新
我尝试了以下gradle.build
脚本但没有成功。它构建得很好,但我安装的应用程序的应用程序信息页面中的版本名称没有改变。
task getVersionName(type:Exec) {
commandLine '../scripts/version-name.sh'
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
//extension method stopTomcat.output() can be used to obtain the output:
ext.output = {
return standardOutput.toString()
}
}
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile project(':Common')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
versionName getVersionName()
}
}
如果我将配置替换为versionName getVersionName()
thenversionName 'Some Text'
它可以工作,并且构建名称将Some Text
出现在 App Info 中。那么为什么我的 getVersionName 函数不起作用呢?
更新 2
仍然不工作 - 但几乎!
外壳脚本:
#/bin/bash
NAME=`git describe --dirty | sed -e 's/^v//'`
COMMITS=`echo ${NAME} | sed -e 's/[0-9\.]*//'`
if [ "x${COMMITS}x" = "xx" ] ; then
VERSION="${NAME}"
else
BRANCH=" (`git branch | grep "^\*" | sed -e 's/^..//'`)"
VERSION="${NAME}${BRANCH}"
fi
logger "Build version: ${VERSION}"
echo ${VERSION}
这有效,并且日志行确认在制作项目时多次调用该脚本。但是 versionName 仍然是空白的。我怀疑是 Gradle 方面仍未获得标准输出。
task getVersionCode(type: Exec) {
exec { commandLine '../scripts/version-code.sh' }
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
task getVersionName(type: Exec) {
exec { commandLine '../scripts/grMobile/scripts/version-name.sh' }
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile project(':Common')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
versionCode getVersionCode()
versionName getVersionName.output()
}
}