问题:
相信大家在做项目中随着项目引入的依赖和库越来越多,就会遇到这个问题了:类数 + 方法数 +属性数 > 65536 。
今天,我们就来解决它!
原因:
要解决问题首先要弄明白问题为什么发生。65536是什么样的数?2的16次方或者说64KB。
原来,在Android中,一个APP的的代码都在baiDex文件中。当Android启动应用的时候,只会在第一次加载Dex时使用DexOpt的工具优化Dex。但是在Android系统中,DexOpt会把方法数,属性数和类数的id检索起来,存在一个链表结构里面。可是这个链表的长度是用一个short类型来保存的,这就使得方法数id不能超过65535。
MultiDex
为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex。
打包时,把一个应用分成多个dex,例:classes.dex、classes2.dex、classes3.dex…,加载的时候把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制。
Andorid 5.0之后,ART虚拟机天然支持MultiDex。
Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载。
解决方法
第一步:添加配置和依赖(mudule下build.gradle)
(1)配置
defaultConfig {
multiDexEnabled true
}
(2)依赖
//方法数+类数>65536解决办法
implementation 'com.android.support:multidex:1.0.3'
第二步:新建app包并自定义Application类
继承自:MultiDexApplication
/**
* @data on 2020/9/7 5:59 PM
* @auther ArmStrong
* @describe //解决项目 类+方法数>65536 的bug问题
*/
public class WanAdroidApplication extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
MultiDex.install(this); //必须
}
}
第三步:更改AndroidManifest.xml
将application下的name值更改为你刚自定义的app包下的application类。
<application
android:name=".app.WanAdroidApplication">
</application>
然后运行一下,又可以愉快的编码了!!!
网友评论