概要
Android Studioで使用しているライブラリを最新にしていったら、「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」の競合エラーが大量に出てきてビルドが通らない。
そこで、原因を調べて、解消してみた忘備録。
競合が起きるまで
下記のように、Android Studioでbuild.gradle(アプリ、モジュール)を開くと、ライブラリに更新があるものは、色が変わり、ライブラリにカーソルを持っていくと簡単に最新版へ変更することができます。
とりあえず、「更新できるよ」と言われたものは全て更新した状態にしました。
(play-services-locationとplay-services-mapsが重複してますが、これを書きながら気づきました。これが原因ではないですw)
この状態で、アプリを起動してみます。
ぎゃぁ!
「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」が大量に出てきます。
Duplicate class com.google.android.gms.internal.measurement.zzhx found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.internal.measurement.zzna found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.internal.measurement.zznb found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.internal.measurement.zznc found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.internal.measurement.zznd found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzga found in modules jetified-play-services-measurement-19.0.1-runtime (com.google.android.gms:play-services-measurement:19.0.1) and jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2)
Duplicate class com.google.android.gms.measurement.internal.zzhe found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzhf found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzhg found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzhh found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzhi found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzhj found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzio found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Duplicate class com.google.android.gms.measurement.internal.zzit found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
Go to the documentation to learn how to Fix dependency resolution errors.
原因を探る
状況からすると、「com.google.android.gms:play-services-XXX」が関係してそうです。
更新されたものは、下記の2つが怪しそうです。
- com.google.android.gms:play-services-location
- com.google.android.gms:play-services-ads
とりあえず、Google Play Serviceのリリースノートを見てみます。
https://developers.google.com/android/guides/releases
気づいた感じだと3点。
- Locationはつい先日の更新だが、関係なさそう。
- adsは、メジャーバージョンアップしてる。移行ガイドまであるので怪しい(https://developers.google.com/admob/android/rel-notes#21.0.0 )
- 頻繁に「com.google.firebase:firebase-bom」が更新されてるんだが、build.gradleに更新の表示されないのはなぜだ?
adsから試してみる
仮に、競合の原因がadsだった場合、単純にメジャーアップグレードの直前(20.0系)にすれば良いんじゃない?
implementation 'com.google.android.gms:play-services-ads:21.0.0'
↓
implementation 'com.google.android.gms:play-services-ads:20.6.0'
結果、はい、普通に動きますね。
まぁ、これでも良いんですが・・・・
「com.google.firebase:firebase-bom」を最新にしてみる
adsを20.0系にしても、build.gradleを開くたびに「更新あるよ」と出てくるのはイヤですね・・・
なので、なぜか「更新」対象にならない「com.google.firebase:firebase-bom」のバージョンを上げてみます。
FirebaseのAndroidで使うドキュメントを見てみます。
https://firebase.google.com/docs/android/setup?authuser=0&%3Bhl=ja&hl=ja
さっき見た、リリースノートでは「30.1.0」になってますね。
というわけで、「30.1.0」にしてみます。
うむ。無事ビルドは通りましたね。
こっちで行きましょう。