2016-03-25 74 views
4

我正在嘗試自動化與我合作的CI上的構建過程。我可以調用curl併爲其分配一些變量,如版本代碼和名稱。然後CI(在我的情況下Bitrise CI)抓住它並啓動Release build。 但是,在此之前,我想根據已將curl傳遞給build.gradle文件的內容設置版本代碼和版本名稱,然後構建過程開始。是否可以通過Gradle任務設置Android版本代碼和名稱?

所以,我想我可以寫一個插件/任務,從命令行獲取版本代碼/名稱,然後將其注入build.gradle文件。像./gradlew setVersion 1 1.0這樣的命令。因此,通過從我將編寫的腳本運行此命令,我將能夠運行此gradle任務,並且glob中的任何人都可以通過curl創建發佈版本。很有意思:)

我可以寫一個類似於以下代碼的任務,將它放到我的主build.gradle文件中。

task setVersion << { 
    println versionCode 
    println versionName 
} 

,並通過它通過命令行的一些參數:

./gradlew -PversionCode=483 -PversionName=v4.0.3 setVersion 

這是我的輸出:

:setVersion 
483 
v4.0.3 

BUILD SUCCESSFUL 

Total time: 6.346 secs 

到目前爲止好。我的問題是如何在build.gradle文件中設置它?感謝

+0

正如我評論@ brwngrldev的回答,我寫了一篇關於如何自動化Android Build系統的文章。如果你有興趣,請看看這篇文章。 https://medium.com/@hesam.kamalan/how-to-automate-android-build-process-on-bitrise-ci-part-2-b3f8124c29ee#.dnia5gg6t – Hesam

回答

7

您可以創建方法在命令行更新的versionCode和版本名稱:

def getMyVersionCode = { -> 
    def code = project.hasProperty('versionCode') ? versionCode.toInteger() : -1 
    println "VersionCode is set to $code" 
    return code 
} 

def getMyVersionName = { -> 
    def name = project.hasProperty('versionName') ? versionName : "1.0" 
    println "VersionName is set to $name" 
    return name 
} 

然後在android塊:

defaultConfig { 
     applicationId "your.app.id" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode getMyVersionCode() 
     versionName getMyVersionName() 

     archivesBaseName = "YourApp-${android.defaultConfig.versionName}" 
    } 

然後,你可以調用任何任務,真正做到:

./gradlew assembleDebug -PversionCode=483 -PversionName=4.0.3 

閱讀更多關於它的地方:https://robertomurray.co.uk/blog/2013/gradle-android-inject-version-code-from-command-line-parameter/

+0

感謝您的回答。它唯一的問題 - 在我看來:) - 我必須爲每個gradle任務傳遞版本代碼和名稱,特別是assembleDebug。我相信其他開發者抱怨:)我更喜歡版本代碼和名稱不變,但這些方法將版本代碼和名稱插入默認的配置塊。它仍然有可能嗎?謝謝 – Hesam

+1

你可以試試這個技術,它比你想要的要複雜一點:http://www.jayway.com/2015/03/11/automatic-versioncode-generation-in-android-gradle/ – brwngrldev

+0

我實現了我的自動化基於#brwngrldev建議。我讀過那篇文章,但沒有發現它對我的情況有用。她的建議的好處是,我可以將命令放入腳本並輕鬆運行。稍後我會爲其他程序員記錄它。再次感謝。 – Hesam

相關問題