Androidアプリを開発していて「なぜかビルドが通らない」「依存関係のバージョン衝突が起きている」という場面に遭遇したことはありませんか。
build.gradleに書いたライブラリが、裏で別のライブラリをこっそり引っ張ってきていて、それがバージョン衝突の原因になっている……というのは意外と多いパターンなんです。「どのライブラリがどのライブラリに依存しているんだ?」がわからないと調査もしようがなくて困りますよね。
そんなときはGradleのdependenciesタスクを使うと、依存関係をツリー形式で一発可視化できます。この記事ではそのコマンドの使い方と、結果の読み方を解説します。
依存関係を正しく把握するには、ターゲットにしているAPIレベルとOSバージョンの対応関係を理解しておくことも重要です。どのAPIレベルが何のOSに対応するか、以下の記事でまとめています。

この記事でわかること
- Androidプロジェクトの依存関係を調べるGradleコマンド
- macOS・Linux・Windows別の実行方法
- 実行結果の読み方(ツリー構造・
->・(*)の意味) - バージョン衝突の確認方法
--configurationの指定方法とビルドバリアントの関係
依存関係を調べるGradleコマンド
実行前の準備
Android StudioのTerminalウィンドウを開いてください。Android StudioのTerminalを使えば、プロジェクトのルートディレクトリが自動的にカレントディレクトリになるので便利です。
コマンドラインから実行する場合は、プロジェクトのルートディレクトリに移動してから実行してください。
実行コマンド
コマンドのパターンは次のとおりです。:appの部分は対象モジュール名に合わせて変更してください。
gradlew.bat :app:dependencies --configuration releaseRuntimeClasspath–configurationの指定について
--configurationにはビルドバリアント(Build Type + Product Flavor)に応じた設定名を指定します。
| ビルド構成 | 指定する設定名 |
|---|---|
| リリースビルド | releaseRuntimeClasspath |
| デバッグビルド | debugRuntimeClasspath |
Product Flavorがdevでデバッグ | devDebugRuntimeClasspath |
実行結果の見方
コマンドを実行すると以下のような依存関係ツリーが表示されます。
releaseRuntimeClasspath - Resolved configuration for runtime for variant: release
+--- com.android.support:support-v4:24.2.0
| +--- com.android.support:support-compat:24.2.0
| | \--- com.android.support:support-annotations:24.2.0
| +--- com.android.support:support-core-utils:24.2.0
| | \--- com.android.support:support-compat:24.2.0 (*)
| \--- com.android.support:support-fragment:24.2.0
| +--- com.android.support:support-compat:24.2.0 (*)
| \--- com.android.support:support-core-ui:24.2.0 (*)
+--- com.google.code.gson:gson:2.2.4
+--- com.android.support:multidex:1.0.1 -> 1.0.2
+--- com.journeyapps:zxing-android-embedded:3.3.0
| +--- com.google.zxing:core:3.2.1
| \--- com.android.support:support-v4:23.1.0 -> 24.2.0 (*)
\--- com.android.support:multidex:1.0.2
(*) - dependencies omitted (listed previously)各記号の意味
- インデントなしの
+---または\---行build.gradleにimplementationやapiで直接指定したライブラリです。 - インデントされている行
上位ライブラリが依存している「推移的依存関係(transitive dependency)」です。プロジェクトで直接指定していないけれど自動的に取り込まれているものです。 ->記号
バージョンが自動解決・変更されたことを示します。1.0.1 -> 1.0.2であれば「1.0.1を指定したが最終的に1.0.2が採用された」という意味です。(*)マーク
すでに上位で表示済みの依存関係が省略されていることを示します。
バージョン衝突を確認するときのポイント
出力結果の中で->が表示されているライブラリはバージョンが自動解決されています。複数のライブラリが異なるバージョンを要求している場合、Gradleは基本的に最も高いバージョンを採用します。
特定のバージョンに固定したい場合はbuild.gradleで明示的にバージョンを指定するかresolutionStrategyでバージョンを強制する方法もあります。
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:24.2.0'
}
}Q&A
まとめ
Androidプロジェクトでライブラリの依存関係を調べたいときはGradleのdependenciesタスクが便利だよ。ポイントをまとめておきますね。
- macOS / Linuxなら
./gradlew :app:dependencies --configuration releaseRuntimeClasspathを実行するだよ。 - Windowsなら
gradlew.bat :app:dependencies --configuration releaseRuntimeClasspathを使うだよ。 --configurationにはビルドバリアントに応じた設定名(例:debugRuntimeClasspath)を指定するだよ。- 出力ツリーを読めばどのライブラリがどのライブラリに依存しているかが一目瞭然だよ。
->が出ていたらバージョンが自動解決されているサインだよ。バージョン衝突の調査に役立ててね。
ビルドが通らないときや「なんでこのライブラリが入ってるの?」と疑問に思ったときにぜひ試してみてください。





