从bash中的build.gradle中读取versionName

Vad*_*mmt 8 bash android gradle travis-ci

有没有办法versionNamebuild.gradleAndroid项目的文件中读取值以在bash中使用它?

更准确地说:如何从文件中读取该值并在Travis-CI脚本中使用它?我会像使用它一样

# ANDROID_VERSION=???
export GIT_TAG=build-$ANDROID_VERSION
Run Code Online (Sandbox Code Playgroud)

我设置了一个Travis-CI,就像这篇文章中描述的那样/sf/answers/1976149801/.

我的build.gradle:http://pastebin.com/uiJ0LCSk

eba*_*aud 10

我喜欢这个衬垫只获取不带引号的版本名称:

grep "versionName" app/build.gradle | awk '{print $2}' | tr -d \''"\'
Run Code Online (Sandbox Code Playgroud)


Kho*_*zzy 9

您可以定义自定义任务,即

task printVersion {
    doLast {
        println project.version
    }
}
Run Code Online (Sandbox Code Playgroud)

并在Bash中执行它:

$ gradle -q pV
1.8.5
Run Code Online (Sandbox Code Playgroud)

  • @dan 将“project.version”替换为“android.defaultConfig.versionName” (2认同)

Vad*_*mmt 8

感谢alnet的评论,我提出了这个解决方案(请注意Doug Stevenson的反对意见):

# variables
export GRADLE_PATH=./app/build.gradle   # path to the gradle file
export GRADLE_FIELD="versionName"   # field name
# logic
export VERSION_TMP=$(grep $GRADLE_FIELD $GRADLE_PATH | awk '{print $2}')    # get value versionName"0.1.0"
export VERSION=$(echo $VERSION_TMP | sed -e 's/^"//'  -e 's/"$//')  # remove quotes 0.1.0
export GIT_TAG=$TRAVIS_BRANCH-$VERSION.$TRAVIS_BUILD_NUMBER
# result
echo gradle version: $VERSION
echo release tag: $GIT_TAG
Run Code Online (Sandbox Code Playgroud)

  • 当不同的构建变体有很少的风格或不同的版本时,它不起作用。 (2认同)

Ale*_*uki 8

扩展Khozzy的答案,从build.gradle中检索Android包的versionName,添加以下自定义任务:

task printVersionName {
    doLast {
        println android.defaultConfig.versionName
    }
}
Run Code Online (Sandbox Code Playgroud)

并调用它:

gradle -q printVersionName
Run Code Online (Sandbox Code Playgroud)


has*_*sen 6

这个怎么样?

grep -o "versionCode\s\+\d\+" app/build.gradle | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

-o选项使grep只打印匹配的部分,因此可以确保传递给awk的只是模式versionCode NUMBER