在引用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://www.jianshu.com/p/cddfc89ce947
在引入Application类的时候,有些工程时多module模块的,子module也会有Application,编译过程中也会出现一些问题,详细描述请看https://blog.csdn.net/ALee_130158/article/details/100725780