關于安卓multiDex后classNotFound的坑

不得不說,安卓開發(fā)中的坑太多了!!!!!!!!
新進的公司以前的項目都是在Eclipse上開發(fā)的,這幾天項目不太緊,所以就嘗試著重構項目到Studio上,并將項目組件化,順便引入了Rxjava,ButterKnife,Retrofit,等第三方開源庫,項目的代碼方法數(shù)暴增,超過了65535,沒辦法只有開啟MultiDex分包了,然而..卻給自己挖了一個大坑.
在開啟Multidex后,發(fā)現(xiàn)Log4j總是抱classNotFound的錯誤,原先以為是組件化開發(fā)的鍋,經(jīng)過各種折騰后發(fā)現(xiàn)并不是,奇怪的是將一些第三方庫拿掉以后該問題就解決了.于是我靈機一動,是不是分包以后沒有將Log4j的包放在第一個dex中,于是開始著手制定log4j相關的包放在第一個dex文件中,按照這個方案嘗試:
將指定的類打包到主dex文件中
發(fā)現(xiàn)太麻煩而且暫時搞不定,于是擱置了下來,直到今天再來一次,發(fā)現(xiàn)了老羅(發(fā)現(xiàn)他的csdn關了,就指定微博吧)這篇文章:
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之前的設備上時,還需要配合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接口。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容