Flutter: Execution failed for task ':app:checkDebugDuplicateClasses'.のエラー
結論:app/build.gradleのdependenciesに設定を追記する
2022/10/18 Flutter エラー・バグ日記
Android13対応を考慮して、AdMobのSDKを最新バージョンにすべく、「google_mobile_ads」パッケージを現時点最新の2.1.0に更新し、Androidエミュレーターでビルドしたところ、以下のエラーが発生した。
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > 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-20.0.2-runtime (com.google.android.gms:play-services-measurement-impl:20.0.2) ・・・(同じようなエラー文が続くので中略)・・・ Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 15s Exception: Gradle task assembleDebug failed with exit code 1
多少のダウングレードをしても解消せず
リンク先のドキュメントを見ると、依存関係に問題がありそうだという事と、エラーメッセージの最後を見ると、gradleファイルに問題がありそうだ、という事ぐらいしか分からない。
先日、「google_mobile_ads」を「2.0.1」に更新したアプリでは、このエラーは出なかったので、試しに「2.0.1」までダウングレードしてみるも、やはり同じエラーが出た。。
アプリレベルのbuild.gradleに追記が必要らしい
調べてみると、以下の記事に、ほぼ同じエラーが報告されており、解決方法が示されていた(ありがとうございます!)。
「build.gradle」(プロジェクトフォルダ直下ではなく、「app」フォルダ内にある方)に、以下の追記が必要とのこと。
dependencies { ・・・略・・・ // ↓これを追記する implementation platform('com.google.firebase:firebase-bom:30.1.0') }
これでビルドしてみると、確かにエラーが解消された。
FirebaseのAndroid設定時にスキップしていた記述だった
しかし、全くロジックがわからない。。
いったい何の記述なのかを調べると、Firebaseの設定時に、「Flutterの場合は、パッケージのインストール時にカバーされるから無視していいよ」ということで、スキップしていた記述だった。
スキップしていたので、きちんと読んでいなかったが、「Firebase BoM」というのをインポートする1文らしい。
そこで、「Firebase BoM」とは何なのか、調べてみると、こちらの公式サイトに説明があった。
どうやらFirebase関連のライブラリのバージョン管理をするものらしい。
今回は、AdMobのSDK更新で発生したが、Firebaseのパッケージと何らか関連があるらしい(AdMobのSDKは、元々「firebase_admob」パッケージで導入していたことが関係しているのだろうか、、?)。
Firebase関連のパッケージを更新すれば良かったかも(未検証)
試しに、「firebase:firebase-bom」というキーワードでプロジェクトフォルダ内を検索すると、Firebase関連のパッケージのコードに、上記と同じ1文が多く含まれていた。
例えば、「ios/.symlinks/plugins/firabase_core/android/build.gradle」には、
implementation platform("com.google.firebase:firebase-bom:${getRootProjectExtOrDefaultProperty("FirebaseSDKVersion")}")
のような1文があった。
さらに、上の1文の中にある「FirebaseSDKVersion」というキーワードでプロジェクトフォルダ内を検索すると、「ios/.symlinks/plugins/firebase_core/android/gradle.properties」のファイルに、
FirebaseSDKVersion=29.0.4
という記述があった。
iosフォルダ内の情報ではあるが、どうやらFirebaseSDKVersionが、古いことが理由と思われる(本日記時点のFirebaseの設定画面だと、最新は「31.0.1」。前述のエラーを解消できたコードだと「30.1.0」)。
ということは、単にFirebase関連のパッケージ(「firebase_core」や「firebase_analytics」)を更新するだけで、解消したのかもしれない。
試したいところだが、影響範囲が大きいので、後日また検証することにする。。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/