前言
只有android5.0之前需要解决分包问题,5.0之后dex在apk安装的时候汇总,启动时不存在分包问题。
google官方分包
地址:https://developer.android.com/studio/build/multidex?hl=zh-CN
插件分包
github地址:https://github.com/ceabie/DexKnifePlugin#dexknife%E4%B8%AD%E6%96%87
插件分包的优势在于:将指定使用通配符包名分包到第二个dex中。
无论在google分包还是插件分包,自定义Application都会默认加入到首包,但是LauncherAcitivity并不一定会加入首包,执行MultiDex.install(this)
会将分dex加入到DexClassLoader。如果在执行MultiDex.install(this)
前就进入首页LauncherAcitivity,而LauncherAcitivity并未加入首包,则会出现ClassNotFoundException
。
自定义Application初始化中的所有类必须加入首包中,即使是在MultiDex.install(this)
之后调用也不行
例如bean.getId在Application的onCreate调用,那么这个bean会被加入首包,如果强行将bean移除首包,那么首包中也会有这个bean和getId这一个方法,但是调用会报ClassNotFoundException
。
网友评论