前言
只有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
插件分包的優(yōu)勢在于:將指定使用通配符包名分包到第二個dex中螟够。
無論在google分包還是插件分包,自定義Application都會默認(rèn)加入到首包漱贱,但是LauncherAcitivity并不一定會加入首包槐雾,執(zhí)行MultiDex.install(this)
會將分dex加入到DexClassLoader。如果在執(zhí)行MultiDex.install(this)
前就進(jìn)入首頁LauncherAcitivity幅狮,而LauncherAcitivity并未加入首包募强,則會出現(xiàn)ClassNotFoundException
。
自定義Application初始化中的所有類必須加入首包中崇摄,即使是在MultiDex.install(this)
之后調(diào)用也不行
例如bean.getId在Application的onCreate調(diào)用擎值,那么這個bean會被加入首包,如果強(qiáng)行將bean移除首包逐抑,那么首包中也會有這個bean和getId這一個方法鸠儿,但是調(diào)用會報ClassNotFoundException
。