Help us understand the problem. What is going on with this article?

Google Play servicesとFirebaseの依存コンフリクト解決

More than 1 year has passed since last update.

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-core16.0.1com.google.firebase:firebase-messaging17.0.0に上げる
  • com.google.android.gms:play-services-analytics15.0.2に下げる
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away