MultiDexに関する投稿はたくさんあります。私は、build.gradleのセクションを含め、時々解決さmultiDexEnabled true
れたエラーを経験しましたdefaultConfig
。
しかし、この機能は正確には何ですか?それを使用するシナリオは何ですか?
MultiDexに関する投稿はたくさんあります。私は、build.gradleのセクションを含め、時々解決さmultiDexEnabled true
れたエラーを経験しましたdefaultConfig
。
しかし、この機能は正確には何ですか?それを使用するシナリオは何ですか?
回答:
ドキュメントの引用:
Androidアプリケーション(APK)ファイルには、Dalvik Executable(DEX)ファイルの形式で実行可能なバイトコードファイルが含まれています。このファイルには、アプリの実行に使用されるコンパイル済みコードが含まれています。Dalvik実行可能ファイルの仕様では、Androidフレームワークメソッド、ライブラリメソッド、独自のコード内のメソッドなど、1つのDEXファイル内で参照できるメソッドの総数を65,536に制限しています。この制限を超えるには、アプリのビルドプロセスを構成して、multidex構成と呼ばれる複数のDEXファイルを生成する必要があります。
したがって、機能は次のとおりです。これにより、複雑なアプリをコンパイルできます。これを使用するシナリオは、64K DEXメソッドの参照制限に達したためにアプリがコンパイルに失敗した場合です。これは、次のようなビルドエラーとして表示されます。
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
1つの.dexファイルに65,536のメソッド(参照)を含めることができるため、参照の数が65,536を超える場合はmultidexを使用します。
Androidアプリケーションプログラムは.dexファイルにコンパイルされ、次に1つの.apkファイルに圧縮されます。
DVM(ダルビック仮想マシン)は、.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方法単一DEX方法の限界を横断します
DexはDalvik Executableの略で、Googleの仮想マシンプロセッサ(Dalvik)がAndroidアプリケーションを処理するために使用します。Androidは小さくてシンプルなアプリを念頭に置いて構築されており、単一のDalvik実行可能ファイルに対する制約により、65,536のメソッドでコード参照の屋根が固定されました。この問題とDalvikマシンがコード実行を処理する方法が原因で、Monkey PatchまたはMultiDexの統合まで、コンパイルと呼び出しの問題がいくつかありました。Android StudioのMultiDex統合により、Android開発者は65,536を超えるメソッドを使用してコードベースをコンパイルおよび実行できます。
どんどんAndroid開発者公式サイト。
If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.