MultiDex

原理

image

Android5.0以下MultiDex下启动丝般柔滑 Android5.0及以上的设备在安装apk的时候就优化好了Multidex,所以在首次打开的时候执行,Multidex.install(this);并不会占用多少时间

当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。 但是在早期的Android系统中,DexOpt有一个问题,DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新版本的Android系统中,DexOpt修复了这个问题,但是我们仍然需要对低版本的Android系统做兼容。 比如:微信app经过分包后,我们解压其apk文件:

image

从中我们可以看到微信经过分包处理之后有3个dex文件

使用

(1)在App所属的build.gradle里面

android {
......
defaultConfig {
multiDexEnabled true
......
}
}

(2)在你自定义的Application(这个一般项目里面都有) MultiDex.install(this);//初始化


参考

美团Android DEX自动拆包及动态加载简介

http://allenfeng.com/2016/11/17/principle-analysis-on-multidex/

https://blog.csdn.net/dbs1215/article/details/79214565

https://developer.android.com/studio/build/multidex#multidexkeepfile-property