web-dev-qa-db-fra.com

Android: Mode Jumbo vs Multidex

Je ne suis pas totalement sûr de la différence entre la définition de l'option dex "jumbomode" sur true et l'ajout du support multidex.

Définir le mode jumbo sur true ou multidex sur true semble résoudre le problème ci-dessous

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

Mode Jumbo , lors de la lecture https://source.Android.com/devices/tech/dalvik/dalvik-bytecode.html =, la chaîne const/jumbo est le mode jumbo pour la chaîne. Il s'agit de l'opcode tel que "op vAA, string @ BBBBBBBB" contre "op vAA, string @ BBBB", 32 bits contre 16 bits.

Multi Dex permet de charger des classes à partir de plusieurs fichiers dex. Le classes.dex primaire doit contenir les classes nécessaires pour appeler ces méthodes de classe. Les fichiers dex secondaires trouvés dans l'application apk seront ajoutés au chargeur de classe après le premier appel à MultiDex.install (Context) voir https://developer.Android.com/reference/Android/support/multidex/MultiDex.html

28

jetez un œil à ceci (recherche de jumbo):

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

en bref: - semblable à Android Limite du nombre de méthodes (64K) - il y a une limite sur le nombre de chaînes (64K) - pour dépasser cette limite - le mode jumbo permet de référencer plus de 2 ^ 16 chaînes en utilisant opCode spécial qui permet d'encoder jusqu'à 2 ^ 32 chaînes.

dans la pratique: - d'après mon expérience, les deux (MultiDex et JumboMode) ont un impact majeur sur le temps d'installation d'apk (beaucoup plus lent).

j'espère que cela t'aides:)

7
Sahar Weissman