MultiDexに関する多くの投稿があります。 build.gradleのdefaultConfig
セクションのmultiDexEnabled true
を含むエラーを解決したことがあります。
しかし、この機能は正確には何ですか?それを使用するシナリオは何ですか?
引用 ドキュメント :
Androidアプリケーション(APK)ファイルには、アプリの実行に使用されるコンパイル済みコードを含むDalvik実行可能(DEX)ファイル形式の実行可能バイトコードファイルが含まれます。 Dalvik実行可能仕様では、Androidフレームワークメソッド、ライブラリメソッド、独自のコード内のメソッドなど、単一のDEXファイル内で参照できるメソッドの総数を65,536に制限しています。この制限を超えるには、multidex構成と呼ばれる複数のDEXファイルを生成するようにアプリのビルドプロセスを構成する必要があります。
そのため、機能は次のとおりです。複雑なアプリをコンパイルできます。それを使用するシナリオは、64K DEXメソッド参照制限に達したためにアプリのコンパイルに失敗した場合です。これは、次のようなビルドエラーとして表示されます。
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
単一の.dexファイルには65,536個のメソッド(参照)を含めることができるため、参照の数が65,536を超える場合は、multidexを使用します。
Androidアプリケーションプログラムは.dexファイルにコンパイルされ、単一の.apkファイルに圧縮されます。
DVM(Dalvik Virtual Machine)は、.dexファイルを使用してバイトコードを実行します。
参照数が65,536の制限を超える原因は何ですか?
自分で作成したメソッド+ Androidフレームワークメソッド+サードパーティライブラリ(Volley、Retrofit、Facebook SDKなど)メソッド。
「どこか」を読んだことがあります
App Compat 24.2.1には16.5kのメソッドが含まれています
Google Play Services GCM 9.6.1には16.7kのメソッドが含まれています
したがって、App Compat 24.2.1を備えたシンプルなHello worldアプリケーションを作成した場合は、すでに1/4 wayで単一のdexメソッドの制限を超えています
DexはDalvik Executableの略で、Googleの仮想マシンプロセッサ(Dalvik)がAndroidアプリケーションの処理に使用するものです。 Androidは小型でシンプルなアプリを念頭に置いて構築されており、1つのDalvik実行可能ファイルに対する制約により、65,536メソッドでコード参照の屋根が固定されました。この問題とDalvikマシンがコード実行を処理する方法のために、Monkey PatchまたはMultiDex統合まで、いくつかのコンパイルおよび呼び出しの問題がありました。 Android StudioのMultiDex統合により、Android開発者はコードベースをコンパイルおよび実行できます。 65,536メソッド!