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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/e85b931d-b7b2-65ba-afd9-a0a907fa07d1.png)

とりあえず、「更新できるよ」と言われたものは全て更新した状態にしました。
（play-services-locationとplay-services-mapsが重複してますが、これを書きながら気づきました。これが原因ではないですｗ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/e3047bf5-8122-2421-8e56-565c22333ef7.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-ＸＸＸ」が関係してそうです。
更新されたものは、下記の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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/37941f04-03c0-0ad6-95d4-c5f7c5126ff3.png)

さっき見た、リリースノートでは「30.1.0」になってますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/fc35bbf1-a8f6-ed64-a717-cdaa9f27ad21.png)

というわけで、「30.1.0」にしてみます。
うむ。無事ビルドは通りましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/150c76d4-a78a-efee-5523-5e4e16a9c5de.png)

こっちで行きましょう。