見出し画像

【Flutter】「Execution failed for task ':app:checkDebugDuplicateClasses'.」発生時の対処法


概要

先日、「Macbook Air」2024年モデルを購入した記事を書いた。

これでAndroidエミュレーターも動かせるぞ〜、とウキウキしながらビルドするも、いきなりエラーが発生したので備忘録を記す。

●環境
Flutter 3.22.3
Android Studio Koala

エラー内容

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 kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.10 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10)
……

こんな感じで、真っ赤っか。
まるで地獄のような光景である👹

解決策

Flutterプロジェクト内にはandroid、ios、linux、web、windows、macosと各プラットフォーム用のディレクトリが用意されている。

android/app/build.gradle を開き、以下を追記する

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }
}

※ ここでの「android/app/build.gradle」とは、Flutter SDKを使用している方(VSCodeなど)のファイルです

再度、デバッグを走らせると

ビルドが通ったぜ👍

いい感じでリストが出る。
ちなみにアイテムはカード形式で表示している。

解説

パッケージの依存関係は2種類がある。
直接的依存関係:依存関係として直接必要なもの
推移的依存関係:別の依存関係として必要なもの
この内「推移的依存関係」だが、他の依存と複雑に絡み合い、いわゆる「競合」を起こしてしまう場合がある。
その為、「重複しているクラスがある」と言うエラーが発生する。

もちろん「重複クラス」エラーはAndroidネイティブ開発においても発生はする。
今回のケースでは、Androidネイティブ(Android Studioから直接)でのビルドでは発生しなかったので、Flutterとの絡みでの発生と思われる。

先のコードでは、constraints句で制約する事により、エラーを回避している訳です。

ちなみに、下記参考サイトの2つ目の方は「React Native」という単語も目にする。
「Flutter」だけでなく「React Native」と言う単語も含めると解決策の選択肢が増えるかも知れませんね💡

【参考】

著書

プログラマーにおくるFlutterアプリ開発の入門書
2024年11月時点での最新技術をぎっしりと詰め込んであるので、アプリ開発に参画するエンジニアの人は、是非ともご覧になって頂ければと思います📱

いいなと思ったら応援しよう!