2017-01-27 7 views
0

Gradleの2.14 私は "実行"Gradle、1つのタスクで何が実行されていますか?

task run() { 
    def allVariantList = []; 
    android.applicationVariants.all { variant -> 
     allVariantList.add(variant.getName()) 
     println "Current allVariantList = " + allVariantList 
    } 
    println "Result allVariantList = " + allVariantList 
} 
は私のタスクを起動

私のカスタムタスクを記述します。gradlew実行

結果:

結果allVariantList = []

現在のallVariantList = [prod_no_check]

現在allVariantList = [prod_no_check、PROD]

現在allVariantList = [prod_no_check、PROD、ステージ]

現在allVariantList = [prod_no_check、PROD、ステージ、DEV]

現在allVariantList = [prod_no_check、 PROD、ステージ、DEV、リリース]

現在allVariantList = [prod_no_check、PROD、ステージ、DEV、放出、dev_no_check]

質問:

  1. のprintlnがprintlnの前に+ allVariantList実行 "allVariantList =の結果" なぜ "現在allVariantList =" + allVariantList私はのprintlnに必要

  2. + allVariantList AFTER実行 "allVariantListは=結果" println "Current allVariantList =" + allVariantListです。どのように私はこれを行うことができますか?

+0

ビルドライフサイクルを調べましたか? https://docs.gradle.org/current/userguide/build_lifecycle.html – mumair

答えて

0

私はこの問題は、あなたのタスクが設定された時間(コンフィギュレーション時に、すべてのものを行う、ない実行時に、applicationVariantsはまだAndroidのプラグインで構成されていないこと、だと思います。すべてのapplicationVariants.all実行すでに追加されているバリアントと、追加されるとすぐに将来追加されるすべてのバリアントにも適用されます。

出力が設定されている場合、バリアントはまだ設定されていません。バリアントが作成された後に他のものが来ます。

everythigあなたがあなたの仕事を実行していなくても、あなたは構成時にそれを行います。 gradlew helpまたは何か他のものに電話すると、同じ出力が得られます。

実行フェーズですべてのコードを実行するか(doLast { }クロージャーでラップする)、または少なくとも実行フェーズで結果の印刷を行います。実行段階の前に自分のものを実行する必要がある場合や、タスクが実際に実行されているかどうかにかかわらず、プロジェクトが評価された後も実行されるafterEvaluate { }クロージャで結果印刷をラップするかもしれません。

+0

@Alexeiあなたはhttp://stackoverflow.com/help/someone-answersを読んで従ってください:-) – Vampire

0

よろしくお願いいたします。これは仕事です:

task run() { 
    description "Install and run app on device/emulator" 
    def allVariantList = []; 
    android.applicationVariants.all { variant -> 
    allVariantList.add(variant.getName()) 
    println "Current allVariantList = " + allVariantList 
    } 
    doLast { 
    println "Result allVariantList = " + allVariantList 
    } 
} 

これは説明です。 https://docs.gradle.org/current/userguide/build_lifecycle.html

例22.1。単一のプロジェクトビルド

関連する問題