FlutterのプロジェクトをAndroidの実機あるいはエミュレーターで動かした時に、こんな感じで、
D8: Cannot fit requested classes in a single dex file (# methods: 85467 > 65536)
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
というわけのわからないエラーが出てしまったときの対処法です。
(注)Flutter2.10以降は、エラーメッセージがわかりやすくなっています。
[!] App requires Multidex support ┌─ Flutter Fix ──────────────────────────────────────────────────────────────────────────────────┐ │ Flutter multidex handling is disabled. If you wish to let the tool configure multidex, use the │ │ --mutidex flag. │ └────────────────────────────────────────────────────────────────────────────────────────────────┘
Androidでは使っているライブラリも含めて65536メソッド以上使ってはいけない
実は、Androidでは65536個以上のメソッドを参照してはいけないという縛りがあります。
アプリ、およびアプリの参照するライブラリが 65,536 メソッドを超えると、ビルドエラーが発生し、Android ビルド アーキテクチャの制限に達したことが示されます。
と言われても、自分でメソッドを65536個以上も作った覚えなんかないですよね。
実は、この「65536」という数は、自分で作ったメソッドだけじゃなくて、使っている外部のライブラリに含まれているメソッドも対象に入っています。
ですので、ライブラリをたくさん使っている場合は、このエラーに遭遇する可能性が高くなるということなのです。
じゃあ、一体どうしたらええねん!?ということですよね。
minSdkVersionを21(Androidのバージョン5.0)に引き上げれば解決
この解消方法は2通りあって、
1)「minSdkVersion(アプリがインストールできる最低レベルのAndroidのOSのバージョン)」を21(Androidのバージョン5.0)以上に引き上げる
あるいは
2)minSdkVersion
を 20 以下に設定している場合は、multidex サポート ライブラリを使用してアプリのプロジェクトに以下のように変更を加える
の2通りがありますが、今の御時世ではAndroid5.0以上の端末が世界の9割以上を占めているので、個人的には1)でいいと考えています。
(詳しくは、下の動画で解説していますので、よろしければご覧ください)