Build Analyzer でビルド パフォーマンスをトラブルシューティングする

Build Analyzer を使用して、プロジェクトのビルド パフォーマンスを検査する。Build Analyzer は、ビルドを実行するたびに重要な情報を表示しようとします。これにより、ビルド パフォーマンスの低下をすばやく特定して解決できます。

ビルド パフォーマンスを向上させるためのその他の戦略については、ビルド速度を最適化するをご覧ください。

始める

アプリをビルドするたびに Build Analyzer によってレポートが作成され、最新のレポートのデータが [Build] ウィンドウに表示されます。

最初に、次の手順を実施します。

  1. まだアプリをビルドしていない場合は、次のいずれかの方法でビルドします。
    • メニューバーで [Build] > [Make Project] をクリックします。
    • Android App Bundle または APK をビルドするには、メニューバーで [Build] > [Build Bundle(s) / APK(s)] > [Build Bundle(s)] または [Build] > [Build Bundle(s) / APK(s)] > [Build APK(s)] をクリックします。
  2. [Build] ウィンドウを開くには、メニューバーから [View] > [Tool Windows] > [Build] を選択します。
  3. Build Analyzer でビルドレポートを表示するには、[Build] ウィンドウの [Build Analyzer] タブをクリックします。

Build Analyzer が表示するデータはビルドによって異なる可能性があるため、プロジェクトを複数回ビルドし、データを比較してパターンを特定すると便利です。

ビルド時間に影響しているタスクを含むプラグインを表示する

ビルドの完了後に初めて Build Analyzer を開くと、図 1 に示すように、ビルド分析の概要がウィンドウに表示されます。

図 1. Build Analyzer の概要ページに検出結果の概要が表示されます。

ビルド時間に影響しているタスクを含むプラグインの内訳を表示するには、概要ページで [Plugins with tasks impacting build duration] をクリックします。また、プルダウンから [Tasks] を選択すると、プラグイン別にグループ化されていることを確認できます。グラフでは、プラグインとその関連タスクが、完了までの合計時間順に並べ替えられます。

図 2. Build Analyzer に、ビルド時間に影響しているプラグインの内訳が表示されます。

ビルド時間に影響しているタスクを表示する

ビルド時間に影響しているタスクの内訳を表示するには、概要ページで [Tasks impacting build duration] をクリックするか、プルダウンから [Tasks] を選択します。プロジェクトで AGP 8.0 以降を使用している場合、タスクはデフォルトでカテゴリ別にグループ化されるため、ビルド時間に影響を与える領域を簡単に特定できます。それぞれの子タスクをクリックすると、その実行の詳細が表示されます。

図 3. Build Analyzer に、ビルド時間に大きく影響しているタスクの内訳が表示されます。

警告を調べる

より効率的に実行するように構成できるタスクがあることを Build Analyzer が検出すると、警告が表示されます。Build Analyzer がビルドで検出したすべての警告を確認するには、概要ページで [All warnings] をクリックするか、プルダウンから [Warnings] を選択します。

図 4 に示すように、一部の警告には [レポートを生成] リンクが表示されます。[Generate report] をクリックすると、プラグインのデベロッパーが新しいバージョンのプラグインで問題を解決するために役立つ追加情報がダイアログに表示されます。[Copy] をクリックすると、テキストがクリップボードに保存されるので、プラグインのデベロッパーに送るバグレポートに簡単に貼り付けることができます。

図 4. Build Analyzer の警告に関する詳細情報。

警告の種類

Build Analyzer が報告する警告の種類は次のとおりです。

  • Always run tasks: 常に実行されるタスクは、ビルドのたびに他のタスクの実行を引き起こしますが、これは不要です。この警告が表示される主な理由には、以下の 2 つがあります。

    • (よくあるケース)タスクの入力と出力を正しく宣言していなかった。この場合は、タスクの入力と出力を正しく宣言する必要があります。つまり、可能な場合は手動で入力と出力を宣言し、サードパーティ プラグインからのタスクが警告をトリガーしている場合はプラグインのバージョンを変更します。

    • (それほど一般的でないケース)タスクで upToDateWhen が false に設定されている。このような設定は避ける必要があります。なんらかのロジックで false と判定しているか、upToDateWhen が false にハードコードされている可能性があります。ロジックで false と判定している場合は、その結果は意図どおりであり、警告を無視できます。upToDateWhen が false にハードコードされている場合は、コードからそれを削除する必要があります。

  • Task setup issues: この警告は、タスクにおいて出力と同じディレクトリが宣言されている場合に生成されます。このようなタスク出力はビルド間で保持されない可能性が高く、そうしたタスクは変更がなくても常に実行されます。この警告に対処するには、タスクごとに異なる出力ディレクトリを宣言する必要があります。つまり、可能な場合は手動で別の出力ディレクトリを宣言し、サードパーティ プラグインからのタスクが警告をトリガーしている場合はプラグインのバージョンを変更します。

  • Non-incremental annotation processor: この警告は、アノテーション プロセッサが非増分で、そのために JavaCompile タスクが常に非増分実行される場合に生成されます。この警告に対処するには、増分アノテーション プロセッサに切り替えます

  • Configuration cache: この警告は、プロジェクトで構成キャッシュが有効になっていない場合に表示されます。Build Analyzer は、ビルドを 1 つずつ調べて、プロジェクトに構成キャッシュとの互換性があるかどうかを確認します。互換性があることが確認できた場合は、Build Analyzer から構成キャッシュを有効にできます。

  • Check Jetifier: この警告は、enableJetifier フラグが存在し、プロジェクトで有効になっている場合(つまり、gradle.properties ファイルに android.enableJetifier=true が含まれている場合)に表示されます。Build Analyzer により、プロジェクトのビルド パフォーマンスを改善するためにこのフラグを安全に削除できるかどうかと、保守されていない Android サポート ライブラリから移行できるかどうかを確認できます。

ダウンロードの影響を確認する

Build Analyzer を使用すると、依存関係のダウンロードに要した時間の概要と、リポジトリごとのダウンロードの詳細を確認できます。ダウンロードの影響を確認するには、プルダウンから [Downloads] を選択します。この情報は、[Sync] ウィンドウでも確認できます。

この情報を使用して、予期せぬ依存関係のダウンロードがビルドのパフォーマンスに悪影響を与えているかどうかを確認できます。これは、アーティファクトを一貫してダウンロードしない増分ビルドで特に重要です。

特に重要な点として、この情報を使用し、予期せぬダウンロードを引き起こす依存関係の動的バージョンの使用など、構成の問題を特定できます。また、特定のリポジトリで多数のリクエストが失敗している場合は、リポジトリを削除するか、リポジトリ構成の下位に移動する必要があることを示している可能性があります。

図 5. Build Analyzer により、ダウンロードがビルド時間に与える影響が示されている。

[Windows のみ] ウイルス対策ソフトウェアの影響を確認する

Build Analyzer は、ウイルス対策ソフトウェアがビルドのパフォーマンスに影響を与えている可能性がある場合は通知します。これは、Windows Defender などのウイルス対策ソフトウェアが Gradle で使用されるディレクトリをリアルタイムでスキャンしている場合に発生することがあります。Build Analyzer では、アクティブ スキャンから除外するディレクトリ リストが推奨されます。また、可能であれば、それらを Windows Defender フォルダ除外リストに追加するためのリンクも提供されます。