Androidプロジェクトの依存関係をGradleで確認する方法|結果の見方と競合調査

当ページのリンクには広告が含まれています。
Android開発におけるプロジェクト依存関係の仕組みやGradle設定、モジュール連携の考え方を初心者にもわかりやすく解説

Androidプロジェクトの依存関係はプロジェクトのルートディレクトリでGradleのdependenciesタスクを実行すると確認できます。macOS・Linuxでは次のコマンドを実行します。

./gradlew :app:dependencies --configuration debugRuntimeClasspath

Windowsではgradlew.batに置き換えてください。この記事ではconfigurationの選び方、結果に表示される->(*)の意味、バージョン競合の原因を絞り込む方法まで解説します。

依存関係を正しく把握するには、ターゲットにしているAPIレベルとOSバージョンの対応関係を理解しておくことも重要です。どのAPIレベルが何のOSに対応するか、以下の記事でまとめています。

目次

この記事でわかること

  • Androidプロジェクトの依存関係を調べるGradleコマンド
  • macOS・Linux・Windows別の実行方法
  • 実行結果の読み方(ツリー構造・->(*)の意味)
  • バージョン衝突の確認方法
  • --configurationの指定方法とビルドバリアントの関係

targetSdkVersionを更新する前にAndroid 17(API level 37)で変わる仕様も確認しておくと、ビルド後の動作検証がしやすくなります。

依存関係を調べるGradleコマンド

実行前の準備

Android StudioのTerminalウィンドウを開いてください。Android StudioのTerminalを使えば、プロジェクトのルートディレクトリが自動的にカレントディレクトリになるので便利です。

コマンドラインから実行する場合は、プロジェクトのルートディレクトリに移動してから実行してください。コマンドのパターンは次のとおりです。:appの部分は対象モジュール名に合わせて変更してください。

Windowsで実行する

ターミナル
gradlew.bat :app:dependencies --configuration releaseRuntimeClasspath

macOS / Linuxで実行する

ターミナル
./gradlew :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.gradleimplementationapiで直接指定したライブラリです。
  • インデントされている行
    上位のライブラリから自動的に取り込まれた「推移的依存関係(transitive dependency)」です。build.gradleで直接指定していなくても依存先としてプロジェクトに追加されます。
  • ->記号
    バージョンが自動解決・変更されたことを示します。1.0.1 -> 1.0.2であれば「1.0.1を指定したが最終的に1.0.2が採用された」という意味です。
  • (*)マーク
    すでに上位で表示済みの依存関係が省略されていることを示します。

特定のライブラリの依存元をdependencyInsightで調べる

dependenciesタスクではプロジェクト全体の依存関係をツリー形式で確認できます。ただ、ツリーが大きいと「このライブラリをどこから取り込んでいるのか」が分かりにくいことがあります。特定のライブラリだけを詳しく調べたい場合は、GradleのdependencyInsightタスクを使います。

Windowsの場合

ターミナル
gradlew.bat :app:dependencyInsight --dependency androidx.core:core-ktx --configuration debugRuntimeClasspath

macOS・Linuxの場合

ターミナル
./gradlew :app:dependencyInsight --dependency androidx.core:core-ktx --configuration debugRuntimeClasspath

--dependencyには調べたいライブラリ名を指定します。上記のandroidx.core:core-ktxは例なので、実際に調べたいライブラリへ置き換えてください。

--configurationには調査するビルドバリアントに対応した設定名を指定します。リリースビルドを調べる場合はdebugRuntimeClasspathreleaseRuntimeClasspathに変更します。

コマンドを実行するとそのライブラリを要求している依存元と、最終的なバージョンが選ばれた理由を確認できます。依存関係ツリーだけではバージョン衝突の原因を特定できないときに便利です。

依存関係を調査するときは最初にdependenciesで全体を確認し、気になるライブラリをdependencyInsightで絞り込むと原因を追いやすくなります。

バージョン衝突を確認するときのポイント

出力結果の中で->が表示されているライブラリはバージョンが自動解決されています。複数のライブラリが異なるバージョンを要求している場合、Gradleは基本的に最も高いバージョンを採用します。

特定のバージョンに固定したい場合はbuild.gradleで明示的にバージョンを指定するかresolutionStrategyでバージョンを強制する方法もあります。

build.gradle – resolutionStrategyでバージョンを強制する例
configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:24.2.0'
    }
}

よくある質問

コマンドを実行しても何も表示されない

--configurationで指定したビルドバリアント名が間違っている可能性があります。プロジェクトの build.gradleに定義されているビルドタイプとフレーバーを確認して、正しい組み合わせを指定してください。

Android Studio上でGUIで確認する方法はない?

Android Studioには依存関係をグラフィカルに表示する機能もあります。

View → Tool Windows → Gradle → AppName → Tasks → android → androidDependencies

:app以外のモジュールも調べられる?

調べられますよ。マルチモジュール構成のプロジェクトであれば:feature:loginのようにモジュール名を変えれば各モジュールの依存関係を個別に確認できます。

releaseRuntimeClasspathが見つからない場合は?

プロジェクトのビルドタイプやProduct Flavorによって利用できるconfiguration名は変わります。debugRuntimeClasspathなど、実際のビルドバリアントに対応する名前を指定してください。

特定のライブラリだけ調べるには?

dependencyInsightタスクを使います。--dependencyにライブラリ名、--configurationに調査するクラスパスを指定すると依存元と採用理由を確認できます。

まとめ

Androidプロジェクトでライブラリの依存関係を調べたいときはGradleのdependenciesタスクが便利だよ。ポイントをまとめておきますね。

  • macOS / Linuxなら./gradlew :app:dependencies --configuration releaseRuntimeClasspathを実行だよ。
  • Windowsならgradlew.bat :app:dependencies --configuration releaseRuntimeClasspathを使うだよ。
  • --configurationにはビルドバリアントに応じた設定名(例:debugRuntimeClasspath)を指定だよ。
  • 出力ツリーを読めばどのライブラリがどのライブラリに依存しているかが一目瞭然だよ。
  • ->が出ていたらバージョンが自動解決されているサインだよ。バージョン衝突の調査に役立ててね。

ビルドが通らないときや「なんでこのライブラリが入ってるの?」と疑問に思ったときにぜひ試してみてください。

Android Studio・ADB・GradleなどAndroid開発でよく使う情報は以下のまとめページから確認できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次