MultiDex分包跟版本有关?
来源:9-4 构建速度优化

she_says
2021-07-19
“minSdkVersion设置在21以下,获得更多的Android系统兼容性,导致构建过程中需要执行MultiDex分包,是一个很耗时的过程。在开发期间把这个值改为21及以上”
我的问题是MultiDex分包不是只要方法数超限就会分吗?版本在21以下要显示说明,在21及以上默认分。
1回答
-
你好,关于分包是否开启,你的理解是对的。
视频中表述的不够详尽,这里针对做minSdkVersion<21时候的分包耗时问题做进一步的说明:
在5.0及更高版本的手机上,系统会在应用安装时执行预编译,扫描查找所有classesN.dex 文件合并成一个。后续应用启动时直接加载这个合成后的产物就可以一次性把所有类加载进来满足运行过程中的使用。
反观低于5.0版本的手机上,并没有上述机制。应用启动后,系统默认只能识别classes.dex,那么在使用Multidex加载所有Dex进来之前,我们是无法访问到所有类的。 这时候就要严格确保MultiDex加载完成之前的代码执行流程中要用到的所有类都放在主Dex中,以避免ClassNotFound异常。
所以,若是minSdkVersion<21,为了确定哪些类放在主Dex,哪些类放在其他Dex,编译过程就要额外进行复杂的计算, 进而加大整个编译耗时。
综上,要解决这个耗时问题,可以临时指定minSdkVersion>=21。
进一步的资料,可以参考:
https://developer.android.com/studio/build/multidex#dev-build
https://developer.android.com/studio/build/multidex#keep
122022-11-08
相似问题