2016-02-18 118 views
3

有沒有辦法從Android項目的build.gradle文件中讀取值versionName以在bash中使用它?在bash中從build.gradle中讀取versionName

更確切地說:如何從文件中讀取該值並將其用於Travis-CI腳本中?我會使用它像

# ANDROID_VERSION=??? 
export GIT_TAG=build-$ANDROID_VERSION 

我設置了一個特拉維斯-CI想在這個崗位https://stackoverflow.com/a/28230711/1700776描述。

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

+5

grep「versionName」build.gradle | awk'{print $ 2}' – alnet

+1

謝謝 - 它的工作原理!實際上這個文件位於''.app/build.gradle''中,所以''.travis.yml''就是''export VERSION = $(grep「versionName」./app/build.gradle | awk '{print $ 2}')'' – Vadammt

+0

這不適用於所有情況。如果存在具有不同版本名稱的構建變體會怎麼樣?如果build.gradle使用versionNameSuffix來修改每種風格的版本名稱會怎樣? –

回答

1

擴展在Khozzy的回答,找回您的Android包從的build.gradle中的versionName,加這個自定義任務:

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

並調用它這樣:

gradle -q printVersionName 
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獲得版本

+0

不知何故[alnets'](http://stackoverflow.com/questions/35475432/read-versionname-from-build-gradle-in-bash/35475826#comment58645220_35475432)非常短的解決方案的作品。 – Vadammt

4

感謝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 
5

您可以在Bash中定義一個自定義任務,即

task printVersion { 
    doLast { 
     println project.version 
    } 
} 

並執行它:

$ gradle -q pV 
1.8.5 
+1

這會在我的項目中打印「未指定」。 – dan

+0

@dan將「project.version」替換爲「android.defaultConfig.versionName」 – iamreptar

+0

我不明白這個答案。如何調用任務? – Jim

1

這個怎麼樣?

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

-o選項使的grep只打印匹配的部分,所以你要保證你傳遞給awk的僅僅模式versionCode NUMBER