Android アプリ開発時のライブラリバージョン競合対策

Android Studio で開発をしていて気になる警告が出たので解決策を備忘録として記載していきます。 &…

Android Studio で開発をしていて気になる警告が出たので解決策を備忘録として記載していきます。
 

複数ライブラリ使用時のバージョン競合


開発となるとライブラリを多用することになりますが、そうなるとライブラリ内で使用されているモジュールのバージョンが競合する場合があります。その際、以下のような警告が出ます。
 

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 25.3.1, 24.0.0. Examples include com.android.support:animated-vector-drawable:25.3.1 and com.android.support:mediarouter-v7:24.0.0 less… (Ctrl+F1)
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion.)

今回の場合、 com.google.android.gms:play-services ライブラリ内で使用されている com.android.support:mediarouter-v7 がアプリで使用されているものとバージョンが異なるために発生しています。
 
次のコマンドを叩くと具体的に確認ができます。

$ ./gradlew -q dependencies app:dependencies --configuration compile

ライブラリの依存関係がリストされますので、それを追っていくと問題となっている箇所が見つかります。
今問題となっているのは次の箇所です。
 

 
com.android.support:mediarouter-v7 のバージョン 24.0.0 となっていますが、 25.3.1 を利用するように変更すれば良いので、 build.gradle の dependencies に以下の 1 文を追加すれば解決できます。

compile 'com.android.support:mediarouter-v7:25.3.1'

 
これをやった上で再度、ライブラリ依存関係をリストしてみると
 

 
com.android.support:mediarouter-v7 は 25.3.1 が利用されるようになり、 Android Studio 側の警告が消えていることが分かります。
 
 
Android アプリを開発していて初めてお目にかかった警告でしたので珍しい事象でしょうが、ライブラリ内部のお話ですと警告だからといって放置するのも怖いところはありますので解決するのが望ましいかと思います。