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