安卓4.4玩java_Android4.4运行过程中闪退java.lang.NoClassDefFoundError
上周五項(xiàng)目測(cè)試時(shí)發(fā)現(xiàn)一個(gè)奇怪的Bug,項(xiàng)目中依賴(lài)了一個(gè)第三方框架,但是在android4.0-4.4.4之間的系統(tǒng)中運(yùn)行會(huì)直接閃退,拋出錯(cuò)誤異常為java.lang.NoClassDefFoundError。
第一次遇到這樣的問(wèn)題,google了好久找到了以下幾個(gè)原因:
該異常表示找不到類(lèi)定義,當(dāng)JVM或者ClassLoader實(shí)例嘗試裝載該類(lèi)的定義(這通常是一個(gè)方法調(diào)用或者new表達(dá)式創(chuàng)建一個(gè)實(shí)例過(guò)程的一部分)而這個(gè)類(lèi)定義并沒(méi)有找時(shí)所拋出的錯(cuò)誤。
[解決方案]:NoClassDefFoundError異常一般出現(xiàn)在編譯環(huán)境和運(yùn)行環(huán)境不一致的情況下,就是說(shuō)有可能在編譯過(guò)后更改了Classpath或者jar包所以導(dǎo)致在運(yùn)行的過(guò)程中JVM或者ClassLoader無(wú)法找到這個(gè)類(lèi)的定義。
1.分dex包編程,如果依賴(lài)的dex包刪除了指定的類(lèi),執(zhí)行初始化方法時(shí)將會(huì)報(bào)錯(cuò);
2.使用第三方SDK或插件化編程時(shí),動(dòng)態(tài)加載或?qū)嵗?lèi)失敗將會(huì)報(bào)錯(cuò);
3.系統(tǒng)資源緊張時(shí),當(dāng)大量class需要加載到內(nèi)存的時(shí)候,處于競(jìng)爭(zhēng)關(guān)系,部分calss競(jìng)爭(zhēng)失敗,導(dǎo)致加載不成功;
4.裝載并初始化一個(gè)類(lèi)時(shí)失敗(比如靜態(tài)塊拋 java.lang.ExceptionInInitializerError 異常),然后再次引用此類(lèi)也會(huì)提示NoClassDefFoundErr 錯(cuò)誤;
5.手機(jī)系統(tǒng)版本或硬件設(shè)備不匹配(如ble設(shè)備只支持18以上SDK),程序引用的class在低版本中不存在,導(dǎo)致NoClassDefFoundErr 錯(cuò)誤。
6.so文件找不到,設(shè)備平臺(tái)armeabi-v7a,但是我的so庫(kù)是放在armeabi中的,解決方法新建一個(gè)armeabi-v7a包,并且把a(bǔ)rmeabi的文件拷貝過(guò)來(lái).
但是,在實(shí)際的定位問(wèn)題的過(guò)程中發(fā)現(xiàn)并不是總的方法數(shù)超出65535,也并不是class競(jìng)爭(zhēng)失敗,最后的問(wèn)題出在解決方案5,引用的class在低版本中不存在或者說(shuō)實(shí)現(xiàn)可能不同了。
在這個(gè)第三方框架的webView里我調(diào)用了
webView1.png
但是發(fā)現(xiàn)它的最終實(shí)現(xiàn)是
webView2.png
我猜測(cè)找不到類(lèi)應(yīng)該是在4.4 -4.4.4運(yùn)行過(guò)程中沒(méi)有鏈接到View的實(shí)現(xiàn),從而導(dǎo)致類(lèi)加載失敗,所以解決方案如下
webView3.png
總結(jié)
以上是生活随笔為你收集整理的安卓4.4玩java_Android4.4运行过程中闪退java.lang.NoClassDefFoundError的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言ddos攻击源代码(ddos攻击v
- 下一篇: iPhone 13发布日期、价格版本配置