Androidのビルド管理がGradleになり、そのGradleタスクを使っていろいろと人手でやっていた箇所もビルドプロセスに手を加えて機械に任せていこうという段階になりました。
GradleタスクをRubyのRakeタスクのように簡単に扱えるようになりたいというのもあり、少し学んだことをメモ。
ここでは、taskのdependsOnの関係と、常に実行されるtask、されないtaskを区別することが目的。
task setUpParams {
println "setup setting !!!"
}
beforeEvaluate { project ->
setUpParams
}
afterEvaluate{ project ->
task reSetParams << {
println "reset parameters !!"
}
task reBuild(dependsOn: reSetParams) << {
println "start rebuild!!"
}
}
こんな感じで書いたGradleタスクを例えばAndroidのサンプルプロジェクト(hello worldレベル)に対して以下のように実行すると・・・
$ ./gradlew assembleDebug $ ./gradlew assembleDebug reBuild
- $ ./gradlew assembleDebug
- こちらでは、setUpParamsのみが常に実行されます
- $ ./gradlew assembleDebug reBuild
- こちらでは、setUpParams、ビルドのあるにreSetParams, reBuildの順で実行されます。
1つ、つまづいたのはtaskにある” << "の存在。
これがついている時は、引数に指定しないと評価されないが、ついていないときは常に評価される。
http://www.gradle.org/docs/current/userguide/build_lifecycle.html
のライフサイクルみつけて、なるほど、と思ったのでした。