2015-05-28 16 views
14

Ich habe versucht, jumboMode in gradle für mein Projekt zu setzen, scheint es möglich, die folgende DexIndexOverflowException zu lösen:DexIndexOverflowException: Kann den neuen Index 65772 nicht in einen Nicht-Jumbo-Befehl zusammenführen !: Jumbo-Modus? und/oder Multi-Dex? Was ist hinter der Szene?

com.android.dex.DexException: Kann nicht fusionieren neuen Index 65536 in eine Nicht-Jumbo Anweisung!

DexIndexOverflowException: Der neue Index 65772 kann nicht in eine Nicht-Jumbo-Anweisung zusammengeführt werden!

1) Was macht die Option jumboMode tatsächlich hinter der Szene?

android { 
    ... 
    dexOptions { 
     jumboMode true 
    } 

} 

2) Ich bemerke auch, dass die Aktivierung Multi-dex kann auch das gleiche Problem lösen, was die richtige Wahl zwischen diesen beiden Ansätzen ist?

android { 
    ... 
    defaultConfig { 
     ... 
     multiDexEnabled true 
    } 
} 
+2

Einige Hintergrundinformationen hier: http://stackoverflow.com/questions/21490382/does-the- android-art-runtime-haben-die-gleiche-methode-limit-limits-as-dalvik / – fadden

Antwort

2

"Jumbo" bedeutet "gleich wie vorher, aber mit großer Nummer als Referenz".

Fast alles in DEX-Dateien referenziert mit 16-Bit-Werten (gerade Bytecode vorhanden als 16-Bit "Units"), also hier nur 65536 Objekte (Methoden oder Strings) adressieren, nicht mehr.

Aber Anwendung kann viel mehr Zeichenfolgen enthalten! Wie löst man dieses Limit? Entwickler von Android haben gerade neue Opcodes mit "Jumbo" -Suffix hinzugefügt, so dass Sie mit "const-string 16_bit_addr" oder "const-string 32_bit_addr" auf 2^32 Elemente verweisen können. Derzeit https://source.android.com/devices/tech/dalvik/dalvik-bytecode "Jumbo" Suffix existiert nur für Strings (const-string/Jumbo), aber bei älteren Dokumenten enthalten:

# 
# Extended-width opcodes 
# 

op 00ff const-class/jumbo   41c y type-ref  continue|throw 
op 01ff check-cast/jumbo   41c n type-ref  continue|throw 
op 02ff instance-of/jumbo   52c y type-ref  continue|throw 
op 03ff new-instance/jumbo   41c y type-ref  continue|throw 
op 04ff new-array/jumbo    52c y type-ref  continue|throw 
op 05ff filled-new-array/jumbo  5rc n type-ref  continue|throw 
op 06ff iget/jumbo     52c y field-ref  continue|throw 
op 07ff iget-wide/jumbo    52c y field-ref  continue|throw 
op 08ff iget-object/jumbo   52c y field-ref  continue|throw 
op 09ff iget-boolean/jumbo   52c y field-ref  continue|throw 
op 0aff iget-byte/jumbo    52c y field-ref  continue|throw 
op 0bff iget-char/jumbo    52c y field-ref  continue|throw 
op 0cff iget-short/jumbo   52c y field-ref  continue|throw 
op 0dff iput/jumbo     52c n field-ref  continue|throw 
op 0eff iput-wide/jumbo    52c n field-ref  continue|throw 
op 0fff iput-object/jumbo   52c n field-ref  continue|throw 
op 10ff iput-boolean/jumbo   52c n field-ref  continue|throw 
op 11ff iput-byte/jumbo    52c n field-ref  continue|throw 
op 12ff iput-char/jumbo    52c n field-ref  continue|throw 
op 13ff iput-short/jumbo   52c n field-ref  continue|throw 
op 14ff sget/jumbo     41c y field-ref  continue|throw 
op 15ff sget-wide/jumbo    41c y field-ref  continue|throw 
op 16ff sget-object/jumbo   41c y field-ref  continue|throw 
op 17ff sget-boolean/jumbo   41c y field-ref  continue|throw 
op 18ff sget-byte/jumbo    41c y field-ref  continue|throw 
op 19ff sget-char/jumbo    41c y field-ref  continue|throw 
op 1aff sget-short/jumbo   41c y field-ref  continue|throw 
op 1bff sput/jumbo     41c n field-ref  continue|throw 
op 1cff sput-wide/jumbo    41c n field-ref  continue|throw 
op 1dff sput-object/jumbo   41c n field-ref  continue|throw 
op 1eff sput-boolean/jumbo   41c n field-ref  continue|throw 
op 1fff sput-byte/jumbo    41c n field-ref  continue|throw 
op 20ff sput-char/jumbo    41c n field-ref  continue|throw 
op 21ff sput-short/jumbo   41c n field-ref  continue|throw 
op 22ff invoke-virtual/jumbo  5rc n method-ref continue|throw|invoke 
op 23ff invoke-super/jumbo   5rc n method-ref continue|throw|invoke 
op 24ff invoke-direct/jumbo   5rc n method-ref continue|throw|invoke 
op 25ff invoke-static/jumbo   5rc n method-ref continue|throw|invoke 
op 26ff invoke-interface/jumbo  5rc n method-ref continue|throw|invoke