2016-03-25 7 views
4

私が作業しているCIのビルドプロセスを自動化しようとしています。 curlに電話して、バージョンコードや名前などの変数を割り当てることができます。その後CI(私の場合はBitrise CI)がそれをキャッチし、リリースビルドを開始します。 しかし、その前に、curlによって渡されたものに基づいてバージョンコードとバージョン名をbuild.gradleファイルに設定してから、プロセスを開始します。Androidのバージョンコードと名前をGradleタスクで設定することはできますか?

だから、コマンドラインからバージョンコード/名前を取得してbuild.gradleファイルに挿入するプラグイン/タスクを書くことができると思っています。 ./gradlew setVersion 1 1.0のようなコマンドです。

私はこのコマンドをスクリプトから実行することで、このgradleタスクを実行することができ、グロブ内のどこからでも誰でもリリースビルドを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のビルドシステムを自動化するのかについての投稿を書いた。あなたが興味を持っているなら、この記事を見てください。あなたの答えはありがとうございます。https://medium.com/@hesam.kamalan/how-to-automate-android-build-process-on-bitrise-ci-part-2-b3f8124c29ee#.dnia5gg6t – Hesam

答えて

7
あなたは、コマンドラインからversionCodeとversionNameを更新するためのメソッドを作成することができ

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 
} 

が続いてアンドロイドのブロックに:

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のバージョンコードと名前を渡さなければなりません。私は他の開発者が不平を言うと信じています:)私はバージョンコードと名前を変更しないことを好みますが、それらのメソッドはバージョンコードと名前をデフォルトのConfigブロックに挿入します。それはまだ可能ですか?ありがとう – Hesam

+1

あなたはこのテクニックを試すことができますが、あなたが望んだものより少し複雑です:http://www.jayway.com/2015/03/11/automatic-versioncode-generation-in-android-gradle/ – brwngrldev

+0

私は実装しました私のオートメーションは#brwngrldevの提案に基づいています。私はその記事を読んだが、それが私の場合には役に立たないと思った。彼女の提案の利点は、コマンドをスクリプトに入れて簡単に実行できるということです。私は後で他のプログラマーのためにそれを文書化します。再度、感謝します。 – Hesam

関連する問題