TL;DR

プログラム全体をビルドするのではなく、変更があった箇所だけをビルドする手法。

なぜ必要か

コンパイルのような処理は時間がかかる。Gradle のドキュメントによると、関係する部分に変更がなければその処理を飛ばせるので、ビルドの時間を大きく減らせる。

仕組み

Gradle では、各タスクに入力(結果に影響する値やファイル)と出力(作るファイルやディレクトリ)を宣言する。Gradle は実行の前後に入力と出力のフィンガープリントを取って保存する。次の実行でフィンガープリントが一致すれば、そのタスクは最新(UP-TO-DATE)として実行されない。タスクの実装そのものも入力として扱うので、タスクのコードが変われば再実行される。

注意点

Gradle のドキュメントでは、次の点に注意するよう書かれている。

出力のないタスクは、インクリメンタルビルドの対象にならない。結果に影響する値を入力に登録し忘れると、古い結果が使われてしまう。逆に、結果に影響しない値を入力にすると、不要な再実行が起きる。同じ入力から違う出力を作る非決定的なタスクは、インクリメンタルビルドに向かない。

出典