美文网首页Android专题Android解决Bug篇
完美解决AndroidStudio中类和方法数大于65536

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

作者: 千夜零一 | 来源:发表于2020-09-13 23:25 被阅读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>
    

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

    大功告成!

    相关文章

      网友评论

        本文标题:完美解决AndroidStudio中类和方法数大于65536

        本文链接:https://www.haomeiwen.com/subject/ssfaektx.html