Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

ビルドのパフォーマンスのトラブルシューティング

Android Studio 4.0 以降で Android Gradle プラグイン 4.0.0 以降を使用している場合、Build Analyzer を使用してプロジェクトのビルド パフォーマンスを調査できます。ビルドのパフォーマンスは、さまざまな要因によって影響を受ける可能性があり、それらの要因はビルドによって異なります。Build Analyzer では、ビルドを実行するたびに各ビルドの重要な情報を表示するため、ビルドのパフォーマンスが低下している場合でも、すばやく特定して解決できます。

このページでは、Build Analyzer の概要と、Build Analyzer を使用してプロジェクトのビルド パフォーマンスを向上させる方法について説明します。まだ Build Analyzer を使用していない場合は、ビルド速度を最適化するをご覧になって、ビルドのパフォーマンスを高める戦略をお試しください。

Build Analyzer で表示されるデータは、ビルドごとに異なります。特に、大規模で複雑なビルドでは多くの要因がビルドに影響を与え、重要な要因も異なります。Build Analyzer では、各ビルドのビルド時間に影響を与える重要な要因に応じてデータを表示します。そのため、プロジェクトのビルドを複数回繰り返して Build Analyzer のデータを比較し、それぞれのパターンを特定することが有効です。

始める

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

  1. Android Studio の最新バージョンと Android Gradle プラグイン 4.0.0 を使用していることを確認します。
  2. まだアプリをビルドしていない場合は、次のいずれかの方法でアプリをビルドします。
    • メニューバーで [Build] > [Make Project] をクリックします。
    • メニューバーから [Build] > [Build Bundle(s) / APK(s)] > [Build Bundle(s)] または [Build] > [Build Bundle(s) / APK(s)] > [Build APK(s)] をクリックして、Android App Bundle または APK をビルドします。
  3. メニューバーから [View] > [Tool Windows] > [Build] を選択して [Build] ウィンドウを開きます。
  4. [Build] ウィンドウで [Build Analyzer] タブをクリックして、[Build Analyzer] タブのビルドレポートを表示します。

図 1. Build Analyzer は、ビルド時間に最も影響を与えるプラグインの詳細情報を表示します。

[Build Analyzer] タブを開くと、ビルド時間に最も影響を与えたプラグインの詳細情報と、ビルドに関するその他の有用なデータを簡単に確認できるツリーが表示されます(図 1 を参照)。

Build Analyzer では、ビルド内のすべてのタスクのデータが表示されるわけではありません。全体のビルド時間に影響を与えたタスクのデータのみが表示されます。

ビルド時間に影響を与えているタスクはどれか

Gradle は、タスクの相互依存、プロジェクト構造、CPU 負荷によってタスクの実行を決定し、タスクを順次または並列に実行します。特定のビルドの Build Analyzer には、順次実行され、現在のビルド時間に影響を与えたタスクセットがハイライト表示されます。このようにハイライト表示されたタスクの非効率性に対処することが、全体のビルド時間を短縮するうえで最適な出発点であると言えます。

ビルド時間に影響を与えるタスクセットは、ビルドを実行するたびに異なる場合がありますのでご注意ください。たとえば、ビルド構成に変更を加える場合、異なるタスクセットでビルド(増分ビルドなど)を実行する場合、さまざまな制約(重い CPU 負荷など)下でビルドを実行する場合には、[Build Speed] ウィンドウでハイライト表示されるタスクセット(ビルド時間に最も影響を与えたタスクセット)が異なることがあります。このように、表示されるタスクが異なることがあるため、複数のビルドで [Build Speed] ウィンドウを使用してビルド時間を確実に短縮することをおすすめします。

ビルド時間に影響を与えているタスクを含むプラグイン

ビルド完了後に初めて Build Analyzer を開くと、ビルド時間に影響を与えたタスクを導入しているプラグインに関してデータが表示されます(図 1 を参照)。右側のウィンドウには、ビルド時間に影響を与えたプラグインと、相対的な影響度がグラフで表示されます。これにより、調査が必要なプラグインをすばやく特定できます。

左側のペインで、[Plugins with tasks determining the build’s duration] の横にあるノードを展開すると、各プラグインについて Build Analyzer が収集したデータが詳細に表示されます。たとえば、各プラグインには子ノードが含まれ、前回のビルド時に Gradle が実行し、Build Analyzer が全体のビルド時間に著しく影響を与えたとみなしたタスクがグループ化されています。各ノードには、そのノードの直接の子の実行に要した合計時間が表示されます。これらの時間を知ることで、ビルド時間に最も影響を与えたタスクの調査に集中できます。

いくつかのタスクをさらに効率的に構成できると Build Analyzer が判断した場合、それらのタスクは [Warnings] というラベルのノードにグループ化されます。左側のペインの下にあるトップレベルの [Warnings] ノードを展開して、ビルドのすべての警告を確認することもできます。

ビルド時間に影響を与えているタスク

ツリーから [Tasks determining this build’s duration] ノードを選択すると、ビルド時間に著しく影響を与えたタスクの詳細が Build Analyzer にグラフで表示されます。このノードでは、各タスクはプラグイン別にグループ化されるのではなく、実行に要した時間でランク付けされます。

各タスクは次のように色分けされます。

  • ピンク: Android Gradle プラグイン、Java Gradle プラグイン、Kotlin Gradle プラグインのいずれかに属するタスク。
  • 青: サードパーティ プラグインまたはカスタム プラグインに属するタスク。たとえば、Android Studio を使用して新しいプロジェクトを作成した後に適用したプラグインなどがこれらに含まれます。
  • 紫: プラグインに属していないタスク。実行時にプロジェクトのプロパティを動的に変更するために使用されています。たとえば、build.gradle ファイル内で定義するタスクがこれらに含まれます。
  • 水色: Build Analyzer でハイライト表示されている他のタスクと比較して、ビルド時間への影響が小さいタスク。

[Tasks determining this build’s duration] ノードを展開した後、各子タスクをクリックすることで、実行の詳細を確認できます。Build Analyzer では、たとえば、親プラグイン、タスクタイプ、このタスクの実行の要因となった他のタスク、タスクが段階的に実行されたかどうかなど、さらに詳細な情報も提供されます(図 2 を参照)。Build Analyzer では警告を表示することもあります。警告を調査することで、タスクの実行効率を向上できます。

図 2. 特定のタスクの実行に関する詳細を表示する Build Analyzer。

警告の調査

Build Analyzer では、効率的に動作するように構成されていない可能性があるタスクが検出されると、警告が表示されます。たとえば、適切な Gradle API を使用して入力と出力が指定されていないタスクがある場合、増分ビルドのメリットを活用できません。タスクの入力が変更されたかどうかにかかわらず、そのようなタスクはすべてのビルドで実行されるため、ビルドにそのようなタスクが含まれている場合、Build Analyzer では Always-run 警告にそのようなビルドを表示します。

Build Analyzer がビルドで検出したすべての警告を表示するには、最上位の [Warnings] ノードを展開します。ノードを展開すると、カテゴリ別に警告が表示されます。たとえば、[Always-run] ノードには、増分ビルド用に適切に構成されていないと Build Analyzer によって判断されたタスクがグループ化されます。

子ノードをクリックすると、警告の内容と、問題を解決するために必要と思われる手順が表示されます。また、プロジェクトに適用したプラグインにタスクが属している場合は、[Generate report] リンクが表示されます(図 3 を参照)。

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

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