美文网首页
2019-07-21

2019-07-21

作者: 芝林_e8cf | 来源:发表于2019-07-21 00:48 被阅读0次

           在Android应用里怎么解决爆棚问题


引言:

如果App引用的库太多,方法数超过65536后无法编译。这是因为单个dex里面不能有超过65536个方法。为什么有最大的限制呢, 因为android会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的, short占两个字节(保存-2的15次方到2的15次方-1,即-32768~32767),最大保存的数量就是65536。新版本的Android系统中修复了这个问题, 但是我们仍然需要对低版本的Android系统做兼容。

解决方法有如下几个:

 1.精简方法数量,删除没用到的类、方法、第三方库。

 2.使用ProGuard去掉一些未使用的代码

 3.复杂模块采用jni的方式实现,也可以对边缘模块采用本地插件化的方式。 

4.分割Dex。本文介绍最后一种方法

配置操作:

dex文件拆成两个或多个,为此谷歌官方推出了multidex兼容包,配合AndroidStudio实现了一个APK包含多个dex的功能。 Android 的 Gradle插件在 Android Build Tool 21.1开始就支持使用multidex了。

1.修改Gradle的配置,支持multidex:


2.第二步分三种情况:

a.如果没有重写Application,在manifest文件中,在application标签下添加MultidexApplication Class的引用,看配置:

b.如果重写了Application,可以让自定义Applicationd继承android.support.multidex.MultiDexApplication。

c.如果重写了Application并且已经继承了其他Application类,可以重写attachBaseContext()方法,并添加语句MultiDex.install(this);看代码:

没什么特别问题,到这里就可以了,你的分包就完成了。

注意事项:Application 中的静态全局变量会比MutiDex的 install()方法优先加载,所以建议避免在Application类中使用静态变量引用 main classes.dex文件以外dex文件中的类。

相关文章

  • 2019-07-15

    2019-07-15——2019-07-21 第三周

  • DALS001-数据准备(Getting Started)

    title: DALS001-数据准备(Getting Started)date: 2019-07-21 12:0...

  • Lan的ScalersTalk第四轮新概念朗读持续力训练Day

    练习材料: [Day 1759 2019-07-21] Lesson 24-1 Beauty A young ma...

  • 2019-07-23

    2019-07-21 毛雅亭 字数 554 · 阅读 7 2019-06-02 18:39 ...

  • 2019-07-22

    day187/365 每日复盘//交流 A小雨_7982 字数 595 · 阅读 0 2019-07-21 07:...

  • Git安装和配置

    作者:vwFisher时间:2019-07-21 目录 1 git1.1 Mac1.2 Windows1.3 Li...

  • 两个“小钱"的奉献

    黄平生 已关注 字数 3942 · 阅读 5 2019-07-21 10:34 两个“小钱”的奉...

  • 卖韭菜

    时间:2019-07-21 16:20 周日 地点:南宁邕江大桥 天气:凉凉的 状态:活力 关键字:奔跑 ...

  • 纹先森的日常

    日精进打卡第354天 姓名:李文杰 (四爷); 公司:中国太平人寿; 日期:2019-07-21 【知~学习】 ...

  • 亲爱的大姐

    时间:2019-07-21 15:04 周日 地点:广西南宁 邓颖超纪念馆 天气:好热 状态:以后 关键字:爱情 ...

网友评论

      本文标题:2019-07-21

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