Android专题Android解决Bug篇

完美解决AndroidStudio中类和方法数大于65536

2020-09-13  本文已影响0人  千夜零一

问题:

  相信大家在做项目中随着项目引入的依赖和库越来越多,就会遇到这个问题了:类数 + 方法数 +属性数 > 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>

然后运行一下,又可以愉快的编码了!!!

大功告成!

上一篇下一篇

猜你喜欢

热点阅读