依存関係分析 Gradle プラグイン (DAGP、旧称依存関係分析 Android Gradle プラグイン) は、以下を検出します。
未使用の依存関係。
使用された推移的な依存関係 (直接宣言することもできます)。
依存関係が間違った構成で宣言されている ( api
対implementation
対compileOnly
など)。
副作用として、プラグインはプロジェクトの ABI を通知し、依存関係グラフのさまざまなビューなどを表すgraphviz ファイルを生成することもできます。これらの副作用は現在ほとんど文書化されていない内部動作ですが、一部の上級ユーザーにとっては興味深いものである可能性があります。
DAGP は、依存関係に関連したアドバイス (上記を参照) に加えて、「ビルドの健全性」を維持するのに役立つ他のアドバイスも提供します。これには以下の検出が含まれます。
不要なプラグイン (現在はkapt
のみ)。
サブプロジェクト (「モジュール」) は Android プラグインを不必要に使用し、代わりに「通常の」 JVM ライブラリを使用する可能性があります。
このプラグインが互換性のある Gradle のバージョン、Android Gradle プラグインなどの情報については、Wiki を参照してください。
詳細な手順については、wiki を参照してください。
最も簡単なアプローチは、以下を追加することです。
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
重要 | プロジェクトで Kotlin または Android (あるいはその両方) を使用している場合、それらのプラグインも設定スクリプトのクラスローダー (または親) にロードする必要があります。詳細については wiki を参照してください |
簡単に開始するには、次のコマンドを実行するだけです。
./gradlew buildHealth
おそらく次のような出力が表示されるでしょう。
> タスク:buildHealth が失敗しました 失敗: ビルドは例外により失敗しました。 *何が問題だったのか: タスク「:buildHealth」の実行に失敗しました。 > 依存関係違反がありました。 file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt でレポートを参照してください。
この (非常に長い可能性がある) レポートをコンソールに出力したい場合は、これをgradle.properties
ファイルに追加します。
dependency.analysis.print.build.health=true
設定スクリプトを介してこのプラグインをすべてのプロジェクトに適用する必要はありません。特定のサブプロジェクトのみに適用することもできます。この場合、ルート ビルド スクリプトにも適用する必要があります。
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
重要 | プロジェクトで Kotlin または Android (あるいはその両方) を使用している場合、それらのプラグインもルート ビルド スクリプト クラスローダー (または親) にロードする必要があります。詳細については wiki を参照してください |
分析は、 projectHealth
タスクを使用して個々のモジュールに対して実行できます。例えば:
./gradlew app:projectHealth
プラグインがプロジェクトの依存関係宣言に関する多くの問題を報告するのは一般的です。手動で修正するのは面倒な場合があるため、プラグインはすべての問題を自動修正するタスクも提供します。
./gradlew fix依存関係
fixDependencies
タスクは、プラグインが適用される各プロジェクトに登録されます。上記のように実行すると、各サブプロジェクトでタスクが実行されます。ワンクリック依存関係の修正も参照してください。
状況によっては、すべての問題を 1 回のパスで解決するのは不可能であると考えられる場合があります。おそらく、非常に大規模なプロジェクトがあるか、ライブラリを公開していて、依存関係の宣言を変更するとライブラリのメタデータも変更され、コンシューマーが破損する可能性があることがわかっているかもしれません。このユースケースをサポートするために、 fixDependencies
タスクはオプションのフラグを受け取り、基本的に「安全な」変更のみを行うように指示します。
./gradlew fixDependency --upgrade
このフラグを設定すると、 fixDependencies
タスクは依存関係宣言を削除したり「ダウングレード」したりしません。宣言を追加または「アップグレード」するだけです (たとえば、 implementation
からapi
へ)。
増分ロールアウト シナリオでは、 --upgrade
フラグを使用し、次にすべてのコンシューマーを更新し、最後にフラグを削除して未使用の依存関係をすべて削除することを想像できます。
解析にバグがある場合、依存関係の宣言を修正するとビルドが中断されます (ただし、これは手動修正の場合にも当てはまります)。これに遭遇した場合は、問題を報告してください。
さらに、書き換え機能は簡略化された Gradle Groovy/Kotlin DSL 文法に基づいており、複雑なビルド スクリプトが存在すると失敗します。 Gradle Kotlin DSL 文法はデフォルトのビルド スクリプト言語であるため、近いうちに拡張する予定ですが、Gradle Groovy DSL に対して同様のことを行う予定は現在のところありません。
プラグインが依存関係に関するアドバイスを発行する (または発行しない) 理由に興味があるかもしれません。その理由を尋ねることができます。
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > タスク:lib:reason -------------------------------------- 依存関係「com.squareup.okio:okio:2.2.2」について質問しました。 この依存関係に関するアドバイスはありません。 -------------------------------------- :lib から com.squareup.okio:okio:2.2.2 への最短パス: :lib --- com.squareup.okio:okio:2.2.2 ソース: メイン ------------ * クラス okio.BufferedSource を公開します (API を暗黙的に示します)。
バージョン文字列はオプションです。
プラグインの設定方法の詳細については、wiki を参照してください。
プラグインを構成するには、 dependencyAnalysis
拡張機能を使用します。
dependencyAnalysis {
// configuration goes here
}
以下は、このプラグインについて説明する公開された記事/ブログ投稿のリストです。
Gradle ビルドの適切なケアとフィード
依存関係分析 Gradle プラグイン: バイトコード分析を使用して未使用の依存関係を見つける
依存関係分析 Gradle プラグイン: ABI とは何ですか?
Gradle プラグインが構成時間に与える影響を軽減する: 旅
ワンクリックで依存関係を修正
…まだまだ続きます:)
このプラグインは次のニュースレターでも紹介されています。
グラドル、2024 年 10 月
グラドル、2022 年 5 月
グラドル、2020 年 9 月
グラドル、2020 年 8 月
Android Weekly、第 423 号
グラドル、2020 年 7 月
グラドル、2020 年 6 月
このプラグインに関するポッドキャスト エピソードは次の場所にあります。
開発者のベーカリー、エピソード #31
このプラグインに関する YouTube ビデオ:
Gradle を理解する #28 – 依存関係分析プラグインを使用したクリーン コンパイル クラスパス