不得不說,安卓開發(fā)中的坑太多了!!!!!!!!
新進(jìn)的公司以前的項目都是在Eclipse上開發(fā)的,這幾天項目不太緊,所以就嘗試著重構(gòu)項目到Studio上,并將項目組件化,順便引入了Rxjava,ButterKnife,Retrofit,等第三方開源庫,項目的代碼方法數(shù)暴增,超過了65535,沒辦法只有開啟MultiDex分包了,然而..卻給自己挖了一個大坑.
在開啟Multidex后,發(fā)現(xiàn)Log4j總是抱classNotFound的錯誤,原先以為是組件化開發(fā)的鍋,經(jīng)過各種折騰后發(fā)現(xiàn)并不是,奇怪的是將一些第三方庫拿掉以后該問題就解決了.于是我靈機(jī)一動,是不是分包以后沒有將Log4j的包放在第一個dex中,于是開始著手制定log4j相關(guān)的包放在第一個dex文件中,按照這個方案嘗試:
將指定的類打包到主dex文件中
發(fā)現(xiàn)太麻煩而且暫時搞不定,于是擱置了下來,直到今天再來一次,發(fā)現(xiàn)了老羅(發(fā)現(xiàn)他的csdn關(guān)了,就指定微博吧)這篇文章:
Building Apps with Over 65K Methods -- 你可能會遇到的Class Not Found問題,真的解決了問題,原理我也不多說了,就將他講的三個解決辦法貼出來吧,哎,發(fā)現(xiàn)真的是懶得打字寫文章呀:
官方提供了Multidex方案,即將APK的方法打包在不同的Dex文件中,具體方法可以參考官方文檔:https://developer.android.com/tools/building/multidex.html。其中,用于啟動APK的Dex稱為Main Dex哟旗,其余的Dex稱為AdditionalDex。
使用了Multidex的APK運行在Android5.0之前的設(shè)備上時,還需要配合support庫里面的MultiDex.install接口才行抗愁。有三種方法使用MultiDex.install接口:
1. 如果沒有自定義自己的Application,那么在AndroidManifest.xml將APK的Application指定為MultiDexApplication呵晚。
>
2. 如果自定義了自己的Application蜘腌,那么將自己的Application繼承于MultiDexApplication。
>
3. 如果不想繼承于MultiDexApplication饵隙,那么重寫父類Applicatio的成員函數(shù)attachBaseContext撮珠,并且在該成員函數(shù)中調(diào)用MultiDex.install接口。