web-dev-qa-db-ja.com

Android:ジャンボモードとMultidex

Dexオプション "jumbomode"をtrueに設定することとmultidexサポートを追加することの違いが何なのか完全にはわかりません。

ジャンボモードをtrueまたはmultidexをtrueに設定すると、以下の問題が修正されるようです

AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"}
AGPBI: {"kind":"SIMPLE","text":"com.Android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!","position":{},"original":"com.Android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.Java:109)","position":{},"original":"\tat com.Android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.Java:109)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.Java:26)","position":{},"original":"\tat com.Android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.Java:26)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.Java:72)","position":{},"original":"\tat com.Android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.Java:72)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.io.CodeReader.callVisit(CodeReader.Java:114)","position":{},"original":"\tat com.Android.dx.io.CodeReader.callVisit(CodeReader.Java:114)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.io.CodeReader.visitAll(CodeReader.Java:89)","position":{},"original":"\tat com.Android.dx.io.CodeReader.visitAll(CodeReader.Java:89)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.Android.dx.merge.InstructionTransformer.transform(InstructionTransformer.Java:49)","position":{},"original":"\tat com.Android.dx.merge.InstructionTransformer.transform(InstructionTransformer.Java:49)"}
...
24
Ivan Thai

ジャンボモード、読み取り時 https://source.Android.com/devices/tech/dalvik/dalvik-bytecode.html =、const-string/jumboはstringのジャンボモードです。 「op vAA、string @ BBBBBBBB」対「op vAA、string @ BBBB」、32ビット対16ビットなどのオペコードについてです。

Multi Dexは、複数のdexファイルからクラスをロードできるようにします。プライマリclasses.dexには、このクラスメソッドの呼び出しに必要なクラスが含まれている必要があります。アプリケーションapkで見つかったセカンダリdexファイルは、MultiDex.install(Context)への最初の呼び出し後にクラスローダーに追加されます https://developer.Android.com/reference/Android/support/multidex/MultiDex.htmlを参照してください

これを見てください(ジャンボを検索):

https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part-1

要するに:-Android Method count limit(64K)に似ています-文字列カウントに制限があります(64K)-この制限を克服するために-ジャンボモードでは、使用して2 ^ 16以上の文字列を参照できます最大2 ^ 32文字列のエンコードを可能にする特別なopCode。

実際には:-私の経験から、両方(MultiDexとJumboMode)はapkのインストール時間に大きな影響を及ぼします(非常に遅い)。

お役に立てれば:)

7
Sahar Weissman