1.compile'com.android.support:multidex:1.0.1' 引入
2.增加配置
dexOptions {
incremental true
javaMaxHeapSize "4g"//specify the heap size for the dex process
preDexLibraries=true//delete the already predexed libraries
}
3.ApplicationextendsMultiDexApplication
//MemberIdsSection.java
if(items().size() > DexFormat.MAX_MEMBER_IDX +1) {
thrownewDexIndexOverflowException(getTooManyMembersMessage());
}
/*
Maximum addressable field or method index.
The largest addressable member is 0xffff, in the "instruction formats" spec as field@CCCC or meth@CCCC.
*/
publicstaticfinalintMAX_MEMBER_IDX =0xFFFF;
通过查阅dalvik-bytecode可知,@CCCC 的范围必须在 0~65535 之间。
所以归根结底,65k 问题是因为 dalvik bytecode 中的指令格式使用了 16 位来放 @CCCC 导致的;所以,不仅 Method 数目不能超过 65k, Field 和 Class 数目也不能超过 65k。