2015-05-28 3 views
22

Ich bin mir nicht ganz sicher, was der Unterschied zwischen dem Setzen der Dex-Option "Jumbomode" auf True vs Hinzufügen von Multidex-Unterstützung ist.Android: Jumbo-Modus vs Multidex

Einstellung Jumbo-Modus auf true oder multidex zu wahren scheint das Problem unter

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)"} 
... 
+2

Mögliche Duplikat [DexIndexOverflowException: Es können keine neuen Index fusionieren 65772 in einen Nicht-Jumbo-Anweisung !: Jumbo-Modus? und/oder Multi-Dex? Was ist hinter der Szene?] (Https://stackoverflow.com/questions/30515209/indexindexoverflowexception-cannot-merge-new-index-65772-into-a-non-jumbo-instruc) –

Antwort

26

Jumbo-Modus, zu beheben, wenn https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html lesen, die const-string/Jumbo ist der Jumbo-Modus für String. Es geht um den Opcode, so dass "op vAA, string @ BBBBBBBB" gegen "op vAA, string @ BBBB", 32 Bit gegenüber 16 Bit.

Multi Dex ermöglicht es, Klassen aus mehr als einer Dex-Datei zu laden. Der primäre classes.dex muss die Klassen enthalten, die zum Aufruf dieser Klassenmethoden notwendig sind. Sekundäre dex Dateien in der Anwendung apk gefunden werden den Classloader nach dem ersten Aufruf zu MultiDex.install hinzugefügt werden (Context) siehe https://developer.android.com/reference/android/support/multidex/MultiDex.html

5

einen Blick in diesen nehmen (für Jumbo-Suche):

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

in Kürze: - ähnlich wie Android-Methode Zählgrenze (64K) - gibt es eine Grenze für String-Anzahl (64K) - um diese Grenze zu überwinden - Jumbo-Modus ermöglicht die Referenzierung mehr als 2^16 Zeichenfolgen mit speziellen opCode, die Codierung aktiviert zu 2^32 Saiten.

in der Praxis: - aus meiner Erfahrung haben beide (MultiDex & JumboMode) großen Einfluss auf die Installationszeit apk (viel langsamer).

hoffe, das hilft :)