Google Play servicesとFirebaseは今年の5月からSemVerに移行しました1。それで早速困ったプロジェクトがあったので、「とりあえず全部最新版にアップグレードするだろう常考」以外の手段を提示したいと思います。
エラーの内容
今回問題になった設定は、Google Play servicesとFirebaseに対し下記のようなdependenciesとなっています:
dependencies {
...
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-messaging:15.0.2'
implementation 'com.google.android.gms:play-services-analytics:16.0.1'
}
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:4.0.1'
}
}
上記の設定でGradle Syncすると、下記のエラーが出ます:
The library com.google.android.gms:play-services-measurement-base is being requested by various other libraries at [[15.0.2,15.0.2], [16.0.0,16.0.0]], but resolves to 16.0.0. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
./gradlew :app:dependencies
でコンフリクト箇所を確認
まず、エラー内容の指示通りにapply plugin: 'com.google.gms.google-services'
をコメントアウトし、コマンドラインで./gradlew :app:dependencies
の結果を確認します:
+--- com.google.firebase:firebase-core:15.0.2
| +--- com.google.firebase:firebase-analytics:[15.0.2,16.0.0) -> 15.0.2
| | +--- com.google.android.gms:play-services-basement:[15.0.1,16.0.0) -> 15.0.1
| | | \--- com.android.support:support-v4:26.1.0 (*)
| | +--- com.google.android.gms:play-services-measurement-base:[15.0.2] -> 16.0.0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コンフリクト
...
+--- com.google.android.gms:play-services-analytics:16.0.1
| +--- com.google.android.gms:play-services-analytics-impl:[16.0.1] -> 16.0.1
| | +--- com.google.android.gms:play-services-ads-identifier:15.0.1 (*)
| | +--- com.google.android.gms:play-services-base:15.0.1 (*)
| | +--- com.google.android.gms:play-services-basement:15.0.1 (*)
| | +--- com.google.android.gms:play-services-measurement-base:[16.0.0] -> 16.0.0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
play-services-measurement-baseの16.0.0を要求する元凶
つまり、
-
com.google.firebase:firebase-core
を上げるか -
com.google.android.gms:play-services-analytics
を下げるか
のどちらかを取れば解決するかもしれません。
実際、firebase-coreを上げると今度はcom.google.firebase:firebase-iid
のバージョン依存でコンフリクトが発生します。上記と同じ方法で見ると原因はfirebase-messaging
のバージョンだと分かります。
最終的に解決策は下記の2パターンになります:
-
com.google.firebase:firebase-core
を16.0.1
、com.google.firebase:firebase-messaging
を17.0.0
に上げる -
com.google.android.gms:play-services-analytics
を15.0.2
に下げる