Androidアプリで使っているライブラリの依存関係を調べる

2017/01/15

しょっちゅう忘れるので備忘メモ。

Androidのアプリを開発しているとライブラリ間の依存関係をチェックしたくなることがあります。 よくあるのがバージョン不一致ですね。意図的に古いバージョンのSupport Libraryを使っているつもりが、他のライブラリの依存関係で上書きされちゃってた、とか。

Android Studioで依存関係を調べる方法もあると思うのですが、コマンドラインでさくっと

> ./gradlew app:dependencies

を実行するのが手っ取り早いです。

とあるアプリで実行した結果を一部抜粋。依存関係がツリー状に表示されます。

compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:25.1.0
|    +--- com.android.support:support-annotations:25.1.0
|    +--- com.android.support:support-v4:25.1.0
|    |    +--- com.android.support:support-compat:25.1.0
|    |    |    \--- com.android.support:support-annotations:25.1.0
|    |    +--- com.android.support:support-media-compat:25.1.0
|    |    |    +--- com.android.support:support-annotations:25.1.0
|    |    |    \--- com.android.support:support-compat:25.1.0 (*)
|    |    +--- com.android.support:support-core-utils:25.1.0
|    |    |    +--- com.android.support:support-annotations:25.1.0
|    |    |    \--- com.android.support:support-compat:25.1.0 (*)
|    |    +--- com.android.support:support-core-ui:25.1.0
|    |    |    +--- com.android.support:support-annotations:25.1.0
|    |    |    \--- com.android.support:support-compat:25.1.0 (*)
|    |    \--- com.android.support:support-fragment:25.1.0
|    |         +--- com.android.support:support-compat:25.1.0 (*)
|    |         +--- com.android.support:support-media-compat:25.1.0 (*)
|    |         +--- com.android.support:support-core-ui:25.1.0 (*)
|    |         \--- com.android.support:support-core-utils:25.1.0 (*)
|    +--- com.android.support:support-vector-drawable:25.1.0
|    |    +--- com.android.support:support-annotations:25.1.0
|    |    \--- com.android.support:support-compat:25.1.0 (*)
|    \--- com.android.support:animated-vector-drawable:25.1.0
|         \--- com.android.support:support-vector-drawable:25.1.0 (*)
+--- com.afollestad.material-dialogs:core:0.9.2.1
|    +--- com.android.support:support-v13:25.1.0
|    |    +--- com.android.support:support-annotations:25.1.0
|    |    \--- com.android.support:support-v4:25.1.0 (*)
|    +--- com.android.support:appcompat-v7:25.1.0 (*)
|    +--- com.android.support:recyclerview-v7:25.1.0
|    |    +--- com.android.support:support-annotations:25.1.0
|    |    +--- com.android.support:support-compat:25.1.0 (*)
|    |    \--- com.android.support:support-core-ui:25.1.0 (*)
|    +--- com.android.support:support-annotations:25.1.0
|    \--- me.zhanghai.android.materialprogressbar:library:1.3.0
|         +--- com.android.support:appcompat-v7:25.0.0 -> 25.1.0 (*)
|         \--- com.android.support:support-annotations:25.0.0 -> 25.1.0
\--- com.afollestad.material-dialogs:commons:0.9.2.1
     +--- com.android.support:appcompat-v7:25.1.0 (*)
     \--- com.afollestad.material-dialogs:core:0.9.2.1 (*)

(*)は以下省略の意(だと思う。ちと自信なし)。他の枝に出てきているからそっちを見てね、と。

は依存関係が上書きされたことを意味します。

|         \--- com.android.support:support-annotations:25.0.0 -> 25.1.0

だったら、「依存元は25.0.0を指定していたけど、他で25.1.0が使われているから25.1.0を採用したよ」という意味。 Gradleは依存関係全体を見渡して一番新しいバージョンを採用するようになってるのでこうなるんですね。




関連(するかもしれない)記事


おススメ