Android 5.0以下出現(xiàn) java.lang.NoClassDefFoundError:

前言

隨著廠里的業(yè)務(wù)越來越多,需求也越來越多,導(dǎo)致開發(fā)的項(xiàng)目也會(huì)隨之變大。因我廠的項(xiàng)目是類似于電商這種的,前段時(shí)間項(xiàng)目有個(gè)新需求,加移動(dòng)客服功能(類似淘寶客服)。在網(wǎng)上找到一些第三方平臺(tái),如環(huán)信,融云都是不錯(cuò)的選擇。結(jié)合開發(fā)者的比較,最后選定了環(huán)信作為這次需求的主力軍。一星期后需求按計(jì)劃完成,也按時(shí)上線給客戶使用。 但是剛上線不久,工作群中很多客戶反應(yīng)不能安裝,這可是個(gè)很嚴(yán)重的問題。當(dāng)時(shí)我很納悶,但奇怪的是也沒有Bug Reporter,而且開發(fā)過程中也一直沒問題,測(cè)試那邊也是通過的。根據(jù)上報(bào)的幾個(gè)用戶的機(jī)型,我初步推斷都是5.0以下的設(shè)備無法啟動(dòng)App,通過優(yōu)測(cè)云測(cè)的真機(jī)模擬打印出Log后得出判斷,錯(cuò)誤異常居然是這個(gè):

工作群反應(yīng)手機(jī)不能安裝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)

折騰了我好久,因?yàn)長(zhǎng)og打印的是某個(gè)類沒有找到,開始以為是該類的代碼問題,仔細(xì)檢查后發(fā)現(xiàn)根本不應(yīng)該是這個(gè)類引發(fā)的問題。而分別打的兩個(gè)正式包(5.0以上的手以,和5.0以下的手機(jī))設(shè)備報(bào)錯(cuò)都不是同一個(gè)類。剛開始Google的時(shí)候,關(guān)鍵字是NoClassDefFoundError Android,StackoverFlow上網(wǎng)友遇到的是Eclipse的路徑配置問題,和我遇到的不是同一個(gè)Bug,還有就是導(dǎo)入第三方依賴module,的時(shí)候出現(xiàn)的問題。我反反復(fù)復(fù)檢查好好幾遍,也按官方的文檔配制還是沒有解決。為此我還特意的的去請(qǐng)教了第三方的技術(shù)之持,但是他們直接說你不是我們正式用戶有問題自行解決,就在希望快崩潰的時(shí)候,再次Google NoClassDefFoundError Android Studio發(fā)現(xiàn)該問題描述和我遇到的一模一樣,回想在起平安科技時(shí)遇到過Configure Apps with Over 64K Methods該問題,檢查后發(fā)現(xiàn)Application并沒繼承MultiDexApplication。


解決方法:

一、配置build.gradle (app)

android {

??????? compileSdkVersion 22

???????? buildToolsVersion "23.3.0"

defaultConfig {

????????? minSdkVersion 15

????????? targetSdkVersion 22

????????? // Enabling multidex support. 開關(guān)

????????????? multiDexEnabled true

}

dependencies {

?????? // 添加依賴

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

}

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

@Override

protected voidattachBaseContext(Context base) {

super.attachBaseContext(base);

MultiDex.install(base);

}

三、到項(xiàng)目的根目錄下執(zhí)行? ./gradlew clean build


總結(jié):

隨著互聯(lián)網(wǎng)發(fā)展的越來越快,公司迭代項(xiàng)目也會(huì)越來越快,用到第三方的框架也越來越多。因此,遇到的問題也會(huì)各種奇葩。Android 5.0以下出現(xiàn) java.lang.NoClassDefFoundError:這個(gè)問題糾結(jié)了我快兩天,試了各種方法,也請(qǐng)教了朋友。在此把它分享出來,希望在開發(fā)的過程中有遇到如此情況的朋友給予幫助。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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