Android複数のモジュールを含むプロジェクトがあります。モジュールの1つからカスタムGradleタスクを実行しようとしていますが、タスクを実行するたびに、モジュール内の他のすべてのGradleタスクも実行しています他のモジュールと同様に、私のタスクは他のタスクに依存していません。タスク:
task helloTask{
println "Hello task"
}
このタスクは、スタジオのターミナルウィンドウとコマンドラインから実行してみました。
Gradleは、設定フェーズ中に<<
で宣言されていないすべてのタスクを実行します。タスクの実行を実行フェーズまで遅らせたい場合は、<<
を追加するだけです。
build.gradle
task helloConfiguration { task ->
println "Hello configuration phase task! $task.name"
}
/* Notice the `<<` this denotes to gradle to not execute
* the closure during the configuration phase. Instead
* delay closure's execution till the execution phase.
*/
task helloExecution << { task ->
println "Hello execution phase task! $task.name"
}
helloExecution.dependsOn helloConfiguration
次に、helloExecution
タスクを実行すると、両方が実行され、順序が保証されます。次に、ビルドを構成するタスクのみを実行したい場合は、必要に応じて個別に実行して、単一のタスクのみを実行できます。
$ gradle helloExecution
Hello configuration phase task! helloConfiguration
Hello execution phase task! helloExecution
:helloConfiguration UP-TO-DATE
:helloExecution UP-TO-DATE
BUILD SUCCESSFUL
Total time: 0.64 secs
$ gradle helloConfiguration
Hello configuration phase task! helloConfiguration
:helloConfiguration UP-TO-DATE
BUILD SUCCESSFUL
Total time: 0.784 secs
構成フェーズ中に実行されるタスクは、タスクが指定されていなくても常に実行されます。これは、私が見ている動作です。上記の例を考えてみましょう。構成タスクは実行されましたが、実行されなかったことに注意してください。
$ gradle
Hello configuration phase task! helloConfiguration
:help
Welcome to Gradle 2.10.
To run a build, run gradle <task> ...
To see a list of available tasks, run gradle tasks
To see a list of command-line options, run gradle --help
To see more detail about a task, run gradle help --task <task>
BUILD SUCCESSFUL
Total time: 0.651 secs
したがって、構成フェーズで実行される5つのタスクがある場合、コマンドライン引数が実行フェーズのターゲットに対して呼び出そうとしたタスクに関係なく、それらすべてが実行されることがわかります。
実行構成を使用して同じことを実現できます。参照: https://developer.Android.com/studio/run/rundebugconfig.html
[実行]-> [構成の編集]-> [+]をクリックして新しい構成を追加->表示されるリストから[Gradleを選択]に移動します。最後にアプリを選択し、実行するタスクを入力します。 Android Studioは、オートコンプリートも提供します。
後で、そのタスクの実行は、[実行]メニューのオプションとして直接利用できるようになります。
あなたは正しいコマンドを与えていませんか?
独立したタスクを実行するプロセス:
app/build.gradle
ファイルにタスクを追加します。例えば:task helloExecution { task ->
doLast {
println "Hello exececuted"
}
}
./gradlew taskName
と入力します./gradlew helloExecution