Подтвердить что ты не робот

Android: Jumbo Mode vs Multidex

Я не совсем уверен, какая разница между установкой опции dex "jumbomode" в true и добавлением поддержки multidex.

Установка jumbo mode в 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)"}
...
4b9b3361

Ответ 1

Режим Jumbo, когда вы читаете https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html, const-string/jumbo - это режим jumbo для строки. Речь идет о коде операции так, что "op vAA, строка @BBBBBBBB" против "op vAA", строка @BBBB ", 32 бит против 16 бит.

Multi Dex позволяет загружать классы из более чем одного файла dex. Первичные классы .dex должны содержать классы, необходимые для вызова этих методов класса. Вторичные файлы dex, найденные в приложении apk, будут добавлены в загрузчик классов после первого вызова MultiDex.install(Context) см. https://developer.android.com/reference/android/support/multidex/MultiDex.html

Ответ 2

взгляните на это (поиск jumbo):

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

вкратце: - аналогично пределу счета метода Android (64K) - существует ограничение на количество строк (64K) - чтобы преодолеть этот предел - режим jumbo позволяет ссылаться на строки более 2 ^ 16, используя специальный opCode, который позволяет кодировать до 2 ^ 32 строк.

на практике: - по моему опыту оба (MultiDex и JumboMode) оказывают значительное влияние на время установки apk (намного медленнее).

надеюсь, что это поможет:)