Android Studio でアプリビルドしてたとき。
こんなエラーに遭遇してしまいました。
1 |
uplicate class android.support.customtabs.ICustomTabsCallback found in modules classes.jar (androidx.browser:browser:1.0.0) and classes.jar (com.github.GoogleChrome.custom-tabs-client:customtabs:d08e93fce3fb3e1f22214ee2f23fddc4f4e92634) |
Duplicate class adnroid.support・・・
なんか長ったらしいエラーが出てます。
このエラーを解決するのに試した対処法をまとめました。
このページの目次
この Duplicate class エラーに遭遇した経緯
まずこのエラーに遭遇した経緯について
それは公開済みアプリをビルドしたとき起こりました。
そのアプリでは次の2つを導入してたんです。
▼ アプリレベルの build.gradle の内容抜粋
1 2 3 4 5 |
/// CustomTabClient implementation 'com.github.GoogleChrome.custom-tabs-client:customtabs:d08e93fce3fb3e1f22214ee2f23fddc4f4e92634' /// AdMob implementation 'com.google.android.gms:play-services-ads:18.3.0' |
▼ ビルドしたときに出たエラー
1 2 |
Cause 1: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class android.support.customtabs.ICustomTabsCallback found in modules classes.jar (androidx.browser:browser:1.0.0) and classes.jar (com.github.GoogleChrome.custom-tabs-client:customtabs:d08e93fce3fb3e1f22214ee2f23fddc4f4e92634) Duplicate class android.support.customtabs.ICustomTabsCallback$Stub found in modules classes.jar (androidx.browser:browser:1.0.0) and classes.jar (com.github.GoogleChrome.custom-tabs-client:customtabs:d08e93fce3fb3e1f22214ee2f23fddc4f4e92634) |
どうやら両ライブラリで重複クラスがある模様
まずはどういう状況なのか確認してみます。
まず左のエクスプローラーから【Porject】を選択
そしたら【External Libraries】のディレクトリに注目
今回の場合、次の2つが競合していました。
- android.support.customtabs
- androidx.browser.customtabs
▼ 1つめ
▼ 2つめ
両者とも ICustomTabsCallback とか全く同じのを含んでます。
これなら Duplidate class とか出るのも納得。
こういう風に androidX のせいで Duplicate class が出ることが多いですね。
対策1.build.propertiesの設定見直し
困ったのでいろいろ解決策を探します。
すると出てきたのが gradle.properties に以下を追加すること
1 2 |
android.useAndroidX=true android.enableJetifier=true |
でも自分のプロジェクトでは既に設定済みでした。
この解決策では対処できないトラブルみたいです。
対策2.競合モジュール(classes.jar)を除外
2つめに試したのが競合ライブラリの除外
アプリレベルの build.gradle に次を書いてみました。
1 2 3 4 5 6 |
android { configurations { all*.exclude group:'android.support.customtabs', module:"classes.jar" all*.exclude group:'androidx.browser.customtabs', module:"classes.jar" } } |
が、これもダメ、、、
やはりビルド失敗してしまいました。
対策3.implementationから競合モジュールを除外
最後に試したのがこれ
1 2 3 4 |
/// AdMob implementation ('com.google.android.gms:play-services-ads:18.3.0') { exclude group: 'androidx.browser', module: 'browser' } |
implementationの内部で競合モジュールを除外してみました。
そして【Build】=>【Make project】してみると・・・
無事ビルド成功!!
とりあえずビルドできてよかったです。
以上、Duplicate classes エラーの対処法でした。ではまた