Androidライブラリの依存関係を調べる方法|Gradleコマンドで一発解決

Android開発におけるプロジェクト依存関係の仕組みやGradle設定、モジュール連携の考え方を初心者にもわかりやすく解説

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

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

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

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

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

Q&A

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

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

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

Android Studioには依存関係をグラフィカルに表示する機能もあります。プロジェクトウィンドウで build.gradleファイルを開き、右側に表示される「Dependencies」タブを確認してみてください。ただしコマンドラインのほうが詳細な情報が得られることが多いです。

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

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

まとめ

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

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

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

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