Android: Gradle Build Scanで、マルチモジュール環境のビルド改善

GradleにはBuild Scanという機能があり、これを使うことで、プロジェクトのビルドの全体像を知ることが出来ます。

使い方は簡単で --scan を指定するだけです。

./gradlew assembleDebug --scan

これで、GradleのBuild Scanをしてくれます。 今回はこれをヒントにして、モジュール間の依存を見直すことで、ビルドの改善をしてみます。

左タブのTimelineから、全体的なビルドの確認をすることが出来ます。

Timelineでは、どのような順番でmoduleのビルドが行われたかを確認することが出来ます。 時間が掛かっているモジュール(クリティカルパス)を改善すれば、全体のビルドを改善することが期待できます。

Timelineでは、どのモジュールがクリティカルパスになっているかを検索することが出来ます。

クリティカルパス検索をすると、次の画像のように、クリティカルなタスク(モジュール)に色が付きます。

これで、クリティカルパスとなっているモジュールを知ることが出来ます。

次に、このクリティカルなモジュールの改善を考えます。大きく2つの方法があると思います。

  1. モジュール自体のサイズを小さくする → このモジュールで管理するクラス数を減らす
  2. ビルドするタイミングを早くする → 他のモジュールへの依存を減らす

1.に関しては、それはそうという感じなので、2について説明します。

例えば、A <- B <- C のような依存構成になっているときに、Bがクリティカルであるとします。 このときに、BがAに依存しないように変更することで、Bのビルドタイミングを早めることができ、全体のビルドが改善されることが期待できます。 「BがAに依存しないように変更できる」、また、「その変更によってモジュールの責務が崩れない」ことが前提となりますが、無駄な他モジュールへの依存を無くすだけでも、ビルドの改善が出来る場合があります。

まとめ

こんな感じで、Gradle Scanを使い、ちょこちょことTimelineのクリティカルパスを改善することで、ビルド時間の改善が期待出来ます。

Written by