【Android】Cannot fit requested classes in a single dex file (# methods: 〇〇 > 65536) 対処法
絶賛個人開発中のアプリで RxKotlin
をインストールし、ビルドすると下記のようなエラーが発生しました👀
Cannot fit requested classes in a single dex file (# methods: 74679 > 65536)
調べてみると割とgeneralな問題らしく、「64K 参照制限」なんて呼ばれているみたいです。この制限は Android のビルドアーキテクチャにより制限されているらしく、制限をとくためには multindex
を有効にする必要があるみたいです。
※ より具体的には Dalvik Executable
という Android で以前に採用されていたレジスタベースの仮想マシンの仕様で、単一の DEX
ファイル内で参照できるメソッドの総数が 65,536
に制限されていることが原因です。
解決法
前述の通り、アプリの multindex
を有効にすることで実質 65,536
以上のメソッドをアプリ内で参照できるようになるみたいです。ちなみに multindex
はその名の通り、アプリ内で使用できる Dex
ファイルを複数にすることを指しています。Dex
ファイルは、Java/Kotlin などのコードを Android プラットフォーム上で実行できるように、圧縮されたファイルのことみたいです。
ということで下記のようにアプリレベルの Gradle
ファイルに multiDexEnabled true
と implementation "androidx.multidex:multidex:2.0.1"
の行を追加して同期します。
android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 28 multiDexEnabled true } ... } dependencies { implementation "androidx.multidex:multidex:2.0.1" }
※ minSdkVersion
が 21
以上の場合はデフォルトで multindex
が有効になっているみたいです。
という感じで本日も以上になります🍺
参考
- https://developer.android.com/studio/build/multidex?hl=ja
- https://qiita.com/KeithYokoma/items/385a94988beb2d7d8043
- https://qiita.com/nichiyoshi/items/46f44001358fbafd85a5