2019-07-21

2019-07-21  本文已影响0人  芝林_e8cf

           在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文件中的类。

上一篇 下一篇

猜你喜欢

热点阅读