iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【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 を有効にする必要があるみたいです。

developer.android.com

※ より具体的には Dalvik Executable という Android で以前に採用されていたレジスタベースの仮想マシンの仕様で、単一の DEX ファイル内で参照できるメソッドの総数が 65,536 に制限されていることが原因です。

解決法

前述の通り、アプリの multindex を有効にすることで実質 65,536 以上のメソッドをアプリ内で参照できるようになるみたいです。ちなみに multindex はその名の通り、アプリ内で使用できる Dex ファイルを複数にすることを指しています。Dex ファイルは、Java/Kotlin などのコードを Android プラットフォーム上で実行できるように、圧縮されたファイルのことみたいです。

ということで下記のようにアプリレベルの Gradle ファイルに multiDexEnabled trueimplementation "androidx.multidex:multidex:2.0.1" の行を追加して同期します。

android {
    defaultConfig {
        ...
        minSdkVersion 15
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

dependencies {
  implementation "androidx.multidex:multidex:2.0.1"
}

minSdkVersion21 以上の場合はデフォルトで multindex が有効になっているみたいです。

という感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com