AGPBI: {"kind":"error","text":"The number of method references in a .dex file cannot exceed 64K.\nLearn how to resolve this issue at https://developer.android.com/tools/building/multidex.html","sources":[{}],"original":"UNEXPECTED TOP-LEVEL EXCEPTION:\ncom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536\n\tat com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:495)\n\tat com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)\n\tat com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:504)\n\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)\n\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:188)\n\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)\n\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)\n\tat com.android.dx.command.dexer.Main.run(Main.java:277)\n\tat com.android.dx.command.dexer.Main.main(Main.java:245)\n\tat com.android.dx.command.Main.main(Main.java:106)\n","tool":"Dex"}
之前遇到过65535的问题,所以对这个数字格(以及Dex)格外外敏感。
今天code的时候加了几个依赖,编译完了就碰到了截图中的问题。
copy之后直接百度,找到了很多解决方案。
1.包冲突(存在重复的包)
2.gradle和jdk1.8不兼容。
3.分配的内存不够导致的oom
但是跟我的情况不一样。而且注意力一直集中在红框中的内容。
事实上博主被骗了,红框的内容对于解决问题一点用都没有。
上面提到的解决方案都试过之后,发现一点用都没有。有点烦躁(这个时候一定要冷静,离答案已经很近了)。
博主发现GradleConsole里面有一行长的“离谱”的输出信息(蓝色框)
滑动条一边移动一边看(其实也没太自信看),突然看到了65536。哇Surprising!!!!!
再往前看一点DexIndexOverflowException,看到这里已经知道问题出哪了。
这么多信息(最上面的)一行全部打印出来也是日了狗了。
吐槽归吐槽,毕竟给你打印出来了。
出了问题一定要仔细的看提示信息,一般都是有提示的。
下面是解决方法:
defaultConfig { applicationId "com.shtoone.shtw.jiaojian" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true//设置为支持多dex输出模式 }导入multiDex包
compile 'com.android.support:multidex:1.0.0'
Application继承
android.support.multidex.MultiDexApplication
如果已经继承了其它的类
可以用下面方法
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }重新编译项目就不会出现65535的问题了。