错误原因
编译时会出现此错误信息,并且通常是在同一时间大量的出现。
实际上就是所谓的“Android 64K方法数”的问题,当项目源码加上引入的包中的总方法数超过65536时,可能会报此错误。
Android5.0之前的Dalvik虚拟机,默认情况下只会为每个APP生成一个classs.dex,而单个.dex文件允许的最大方法数是65536,当总方法数超过此限制时,编译器就会报上述的异常。
解决方案(MultiDex)
既然知道是由于单.dex文件的方法数有限制,那么如果拆分成多个小一点的.dex文件,此问题不就解决了吗?
谷歌推出的MultiDex Support Library的函数库,正是基于这个方案,解决“64K方法数”问题的。
具体步骤
1、修改Gradle配置文件,添加MultiDex Support Library的依赖,并启用MultiDex支持
dependencies { implementation 'com.android.support:multidex:1.0.1' }
defaultConfig {
multiDexEnabled true
}
2、设置Application支持多Dex模式
在MultiDexApplication JavaDoc中描述了三种可选方法:
(1)在AndroidManifest.xml的application中声明android.support.multidex.MultiDexApplication;
(2)如果使用了自定义Application,让其继承MultiDexApplication;
(3)如果自定义Application已经继承自其它Application类,你不想或者不能修改它,那么可以重写attachBaseContext()方法:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base); MultiDex.install(this);
}
之后,再编译运行,上述问题就不会再出现了。