使用Multidex解决方法数越界

在android中单个dex文件所能包含的最大方法数为65536,这包含android FrameWork、依赖的jar包及应用本身代码的所有方法。当方法数达到65536后,编译器无法完成编译并抛出异常:

UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)

还有一种情况是,方法数并没有达到65536,编译器也能正常的完成编译,但是应用在低版本手机安装时失败,并抛出异常。这种可能给是低版本的手机缓存区只有5M,虽然方法数没有达到,但是存储空间已经超了。现在3.0以上的系统,一般都是8M或16M。
对于以上问题,google给出了Multidex解决方案,本文只针对android Studio环境配置实现:
1、通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.

defaultConfig { 
   ... 
multiDexEnabled true 
... 
}

2、在项目的build.gradle文件的dependencies 节中添加分包设置:

dependencies { 
... 
   compile 'com.android.support:multidex:1.0.0' 
   ... 
}

3、代码中加入支持Multidex的功能,有三种方案实现:

3.1 在manifest文件中指定Application为MultiDexApplication,如下:

android:name="android.support.multidex.MultiDexApplication"

3.2 应用的Application继承MultiDexApplication,如:

public class ApplicationManager extends MultiDexApplication {
       ......
}

3.3 不想继承MultiDexApplication,重写Application的attachBaseContext方法,如下:

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

重写编译即可成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值