0
Help us understand the problem. What are the problem?

posted at

Android Studioでplay-services-adsをv21にしたら「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」で競合エラーになった

概要

Android Studioで使用しているライブラリを最新にしていったら、「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」の競合エラーが大量に出てきてビルドが通らない。
そこで、原因を調べて、解消してみた忘備録。

競合が起きるまで

下記のように、Android Studioでbuild.gradle(アプリ、モジュール)を開くと、ライブラリに更新があるものは、色が変わり、ライブラリにカーソルを持っていくと簡単に最新版へ変更することができます。
image.png

とりあえず、「更新できるよ」と言われたものは全て更新した状態にしました。
(play-services-locationとplay-services-mapsが重複してますが、これを書きながら気づきました。これが原因ではないですw)
image.png

この状態で、アプリを起動してみます。

ぎゃぁ!
「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.0.1」ですね。
image.png

さっき見た、リリースノートでは「30.1.0」になってますね。
image.png

というわけで、「30.1.0」にしてみます。
うむ。無事ビルドは通りましたね。
image.png

こっちで行きましょう。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?