方法数超过65535

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容