前言:
一般开发项目的过程中,难免会引用第三方库,当项目越做越大,方法数越来越多的时候,会不可避免的遇到方法数超过64K的错误,这是因为单个dex文件索引的方法是由short类型来保存的。而short的长度范围是(-32768~32767),即总共65536个。那么如何解决这个问题呢。
解决方案有如下几个:
1.精简方法数量,删除无用的类、方法、第三方库。(治标不治本,业务代码增加,始终会达到临界值)
2.使用ProGuard去掉一些未使用的代码 (同解决方法1)
3.插件化方案
4.分割Dex
但是方案1和方案2都是有弊端的,这两种方式都是尽量压缩自身方法数来避免达到临界值,但是随着业务代码的增加,这个临界值始终会达到,所以说是一种治标不治本的方式。由于方案3本人没有使用过,这里不多做赘述。这里介绍一下方案4。
Multidex:
这里Google官方给出了一种解决方式,那就是Multidex。
首先使用Android SDK Manager升级到最新的Android SDK Build Tools和Android Support Library。然后进行以下两步操作:
android {
compileSdkVersion 23
buildToolsVersion"23.0.1"
defaultConfig{
...
minSdkVersion 19
targetSdkVersion 23
...
multiDexEnabled true
}
dependencies {
compile 'com.android.support:Multidex:1.0.1'
}
}
2.让应用支持多DEX文件。在官方文档中描述了三种可选方法:
在AndroidManifest.xml的application中声明android.support.MultiDex.MultiDexApplication;
如果你已经有自己的Application类,让其继承MultiDexApplication;
如果你的Application类已经继承自其它类,你不想/能修改它,那么可以重写attachBaseContext()方法:
@Override
protected voidattachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
如上,基本上就配置完了。
特别注意:
在进行如上配置后,可能出现内存溢出的问题。可以尝试在app的gradle下加入如下代码:
android {
dexOptions{
javaMaxHeapSize "4g"
}
}