从bash中的build.gradle中读取versionName

时间:2016-02-18 07:34:43

标签: android bash gradle travis-ci

有没有办法从Android项目的versionName文件中读取值build.gradle,以便在bash中使用它?

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

一样使用它
# ANDROID_VERSION=???
export GIT_TAG=build-$ANDROID_VERSION

我设置了一篇Travis-CI,如本文https://stackoverflow.com/a/28230711/1700776中所述。

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

9 个答案:

答案 0 :(得分:9)

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

task printVersion {
    doLast {
        println project.version
    }
}

并在Bash中执行:

$ gradle -q pV
1.8.5

答案 1 :(得分:8)

感谢alnet's评论,我想出了这个解决方案(注意Doug Stevenson's objection):

# 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

答案 2 :(得分:7)

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

task printVersionName {
    doLast {
        println android.defaultConfig.versionName
    }
}

并调用它:

gradle -q printVersionName

答案 3 :(得分:5)

这个怎么样?

grep -o "versionCode\s\+\d\+" app/build.gradle | awk '{ print $2 }'

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

答案 4 :(得分:1)

<强>例如

android{
  android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        def fileName
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            if (!outputFile.name.contains('unaligned')) {
                fileName = "yourAppRootName_${variant.productFlavors[0].name}_${getVersionName()}_${variant.buildType.name}.apk"
                output.outputFile = new File(outputFile.parent + "/aligned", fileName)
            }
        }
    }
}
}

使用${getVersionName()}获取build.gradle中的版本

答案 5 :(得分:1)

如果您正在寻找Kotlin DSL的迁移版本,这就是我的想法:

tasks.create("printVersionName") {
    doLast { println(version) }
}

答案 6 :(得分:1)

如果您有多种口味,并在口味中设置了版本信息,则可以使用以下方式:

task printVersion{
doLast {
    android.productFlavors.all {
        flavor ->
            if (flavorName.matches(flavor.name)) {
                print flavor.versionName + "-" + flavor.versionCode
            }
    }
}
}

然后可以使用

调用它
./gradlew -q printVersion -PflavorName=MyFlavor

答案 7 :(得分:1)

我喜欢这种衬纸,只得到没有引号的版本名称:

grep "versionName" app/build.gradle | awk '{print $2}' | tr -d \''"\'

答案 8 :(得分:1)

grep versionName:

对于MAC

grep -o "versionName\s.*\d.\d.\d" app/build.gradle | awk '{ print $2 }' | tr -d \''"\'

对于Unbuntu

grep -o "versionName\s\+.*" app/build.gradle | awk '{ print $2 }' | tr -d \''"\'

因此build.gradle versionName "8.1.9"中的输入给了我8.1.9