Multidexを有効化している時にNoClassDefFoundError
が出てきてハマったのでメモ。
何かの参考になれば幸いです。
結論:multiDexKeepFile or multiDexKeepProguardを使ってみよう
公式のドキュメントに詳しく書いてありました(が、完全に見落としていました)。
プライマリ DEX ファイルで必要なクラスの宣言
https://developer.android.com/studio/build/multidex#keep
Multidex アプリ用に各 DEX ファイルを作成するときに、ビルドツールでは複雑な判断基準に基づいて、アプリを正常に起動するためにプライマリ DEX ファイルで必要となるクラスを決定します。起動時に必要ないずれかのクラスがプライマリ DEX ファイルで提供されていない場合、アプリはエラー java.lang.NoClassDefFoundError でクラッシュします。
まんま書いてありました。
プライマリDEXファイルで必要となるクラスを宣言しとかないといけないということですね。
multiDexKeepFile
と multiDexKeepProguard
は同じようなことをしていますが、
-
multiDexKeepFile
=> ファイルで指定可能 -
multiDexKeepProguard
=> ProGuardの文法で指定可能
という違いがあるようです。
NoClassDefFoundError
で困っている方は、是非一度 multiDexKeepFile or multiDexKeepProguard を試してみるといいかもしれません。