问题描述
我不完全确定将dex选项jumbomode设置为true与添加multidex支持之间的区别。
将jumbo模式设置为true或multidex真正似乎解决了以下问题
AGPBI:{kind:SIMPLE,text:UNEXPECTED TOP- LEVEL EXCEPTION:,position:{},original:意外顶级例外:}
,const-string / jumbo是字符串的巨型模式。它是关于操作码,使得op vAA,string @ BBBBBBBB与op vAA,string @ BBBB,32位与16位。
AGPBI:{kind:SIMPLE,text:com.android.dex .DexIndexOverflowException:无法将新的索引65772合并到非巨型指令!,position:{},original:com.android.dex.DexIndexOverflowException:无法合并新的索引65772到非巨型指令! }
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.acces s $ 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:{},原始:\ 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:\ 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:{},o riginal:\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)}
...
Multi Dex 允许从多个dex文件加载类。主classes.dex必须包含调用此类方法所需的类。在第一次调用MultiDex.install(Context)
后,应用程序apk中找到的次要dex文件将被添加到类加载器中I'm not totally sure what the difference is between setting dex option "jumbomode" to true vs adding multidex support.
Setting jumbo mode to true or multidex to true seems to fix the problem below
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)"} ...
解决方案Jumbo Mode, when readinghttps://source.android.com/devices/tech/dalvik/dalvik-bytecode.html, the const-string/jumbo is the jumbo mode for string. It is about the opcode such that "op vAA, string@BBBBBBBB" versus "op vAA, string@BBBB", 32 bits versus 16 bit.
Multi Dex is to allow to load classes from more than one dex file. The primary classes.dex must contain the classes necessary for calling this class methods. Secondary dex files found in the application apk will be added to the classloader after first call to MultiDex.install(Context)see https://developer.android.com/reference/android/support/multidex/MultiDex.html
这篇关于Android:巨型模式与Multidex的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!