java.lang.NoClassDefFoundError:Android5.0以下錯誤

隨着廠裏的業務越來越多,需求也越來越多,導致開發的項目也會隨之變大。因我廠的項目是類似於電商這種的,前段時間項目有個新需求,加移動客服功能(類似淘寶客服)。在網上找到一些第三方平臺,如環信,融雲都是不錯的選擇。結合開發者的比較,最後選定了環信作爲這次需求的主力軍。一星期後需求按計劃完成,也按時上線給客戶使用。 但是剛上線不久,工作羣中很多客戶反應不能安裝,這可是個很嚴重的問題。當時我很納悶,但奇怪的是也沒有Bug Reporter,而且開發過程中也一直沒問題,測試那邊也是通過的。根據上報的幾個用戶的機型,我初步推斷都是5.0以下的設備無法啓動App,通過優測雲測的真機模擬打印出Log後得出判斷,錯誤異常居然是這個:


工作羣反應手機不能安裝app

java.lang.NoClassDefFoundError:

09-30 15:21:59.889 17700-17700/?E/AndroidRuntime: FATAL EXCEPTION: main

Process: your package,PID: 17700

java.lang.NoClassDefFoundError: com.easemob.chat.EMChatConfig

at com.easemob.chat.EMChat.setAppkey(Unknown Source)

at com.easemob.chat.KefuChat.setAppkey(KefuChat.java:126)

at your package.UI.config.BayeApp.initEMChat(BayeApp.java:98)

at your package.UI.config.BayeApp.onCreate(BayeApp.java:51)

atandroid.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)

atandroid.app.ActivityThread.handleBindApplication(ActivityThread.java:4440)

at android.app.ActivityThread.access$1500(ActivityThread.java:141)

atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:136)

at android.app.ActivityThread.main(ActivityThread.java:5113)

at java.lang.reflect.Method.invokeNative(Native Method)

atjava.lang.reflect.Method.invoke(Method.java:515)

atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)

at dalvik.system.NativeStart.main(Native Method)

折騰了我好久,因爲Log打印的是某個類沒有找到,開始以爲是該類的代碼問題,仔細檢查後發現根本不應該是這個類引發的問題。而分別打的兩個正式包(5.0以上的手以,和5.0以下的手機)設備報錯都不是同一個類。剛開始Google的時候,關鍵字是NoClassDefFoundError Android,StackoverFlow上網友遇到的是Eclipse的路徑配置問題,和我遇到的不是同一個Bug,還有就是導入第三方依賴module,的時候出現的問題。我反反覆覆檢查好好幾遍,也按官方的文檔配製還是沒有解決。爲此我還特意的的去請教了第三方的技術之持,但是他們直接說你不是我們正式用戶有問題自行解決,就在希望快崩潰的時候,再次Google NoClassDefFoundError Android Studio發現該問題描述和我遇到的一模一樣,回想在起平安科技時遇到過Configure Apps with Over 64K Methods該問題,檢查後發現Application並沒繼承MultiDexApplication


解決方法:

一、配置build.gradle (app)

android {

        compileSdkVersion 22

         buildToolsVersion "23.3.0"

defaultConfig {

          minSdkVersion 15

          targetSdkVersion 22

          // Enabling multidex support. 開關

              multiDexEnabledtrue

}

dependencies {

       // 添加依賴

          compile 'com.android.support:multidex:1.0.0'

}

二、使用自定義的Application繼承MultiDexApplication這個類,或者重寫Application的方法attachBaseContext(),並調用MultiDex.install();

@Override

protected voidattachBaseContext(Context base) {

super.attachBaseContext(base);

MultiDex.install(base);

}

三、到項目的根目錄下執行  ./gradlew clean build


總結:

隨着互聯網發展的越來越快,公司迭代項目也會越來越快,用到第三方的框架也越來越多。因此,遇到的問題也會各種奇葩。Android 5.0以下出現 java.lang.NoClassDefFoundError:這個問題糾結了我快兩天,試了各種方法,也請教了朋友。在此把它分享出來,希望在開發的過程中有遇到如此情況的朋友給予幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章