Error: Cannot fit requested classes in a single dex file # methods: 97250 > 65536

在引用autobahn框架时遇到了multiDex的问题,找了相关的资料和浏览了网上的大神的讲解之后,解决了这个问题,在这里记录一下问题的解决过程。

首先,大致说一下为什么会出现这个问题,android工程在编译过程中会将java文件编译成class文件,再将class文件打包成dex文件,打包过程中默认是只打包成一个dex文件,但是单个dex文件中的方法数不能超过65536个,在我们引用了一堆依赖和第三方库的时候,方法数超过了之后,打包成单个dex文件就会编译报错,所以需要打包成多个dex文件,即multiDexEnable。

简单描述一下解决步骤:

1.引入multiDex的相关依赖

2.gradle配置新增multiDexEnable配置项

3.Application类继承MultiDexApplication 

下面详细说一下:

第一步 : 引入依赖

大部分博客写的依赖都是 com.android.support:multidex:1.0.3,我查了一下,这个依赖的最新版本已经从com.android.support移到了androidx.multidex这个目录下,新旧版本我都测试了一下,都可以,所以,在主工程的build.gradle文件中添加以下依赖

implementation 'com.android.support:multidex:1.0.3'
或者
implementation 'androidx.multidex:multidex:2.0.0'

两个二选一

第二步 : 增加配置项

在主工程的android-->defaultConfig下新增 multiDexEnabled true 这个配置项,如下图所示:

第三步.引入Application类

若原工程中没有Application类,则新建一个Application类继承MultiDexApplication类,然后在Manifest文件中引用这个Application就可以了。

若原工程中已有Application类,已经继承了其他类,由于java的单继承模式,无法再继承MultiDexApplication,可以通过重写attachBaseContext方法来解决

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

  有部分网友反映说经过上述步骤后在5.0版本以上运行没有报错,但是在4.4版本会崩溃,在这里记录一下相关的建议(仅记录,未测试,手边没有android4.4的设备)

在build.gradle文件中添加配置,与buildTypes和defaultConfig配置同级目录
 

dexOptions{
    preDexLibraries = false
}

参考资料 : 

https://stackoverflow.com/questions/48249633/errorcannot-fit-requested-classes-in-a-single-dex-file-try-supplying-a-main-dex

https://www.jianshu.com/p/cddfc89ce947

在引入Application类的时候,有些工程时多module模块的,子module也会有Application,编译过程中也会出现一些问题,详细描述请看https://blog.csdn.net/ALee_130158/article/details/100725780

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值