前幾天同事遇到一個(gè)非常詭異的報(bào)錯(cuò),緊急處理后,趁著周末仔細(xì)研究了一下原因,覺得還挺有意思的,所以記錄一下
成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元陸豐做網(wǎng)站,已為上家服務(wù),為陸豐各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220部分機(jī)型反饋崩潰問題問題背景:在一個(gè)SDK工程,前幾天客戶那邊報(bào)了一個(gè)崩潰問題,并且在API 28以上的系統(tǒng)才會(huì):No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView
查看調(diào)用棧后發(fā)現(xiàn)調(diào)用到了ConcurrentHashMap#keySet
,順著調(diào)用發(fā)現(xiàn)這是一個(gè)JDK1.8的API
這么看起來應(yīng)該是JDK7 和JDK8的一個(gè)兼容問題,具體的問題需要繼續(xù)往下看
第一反應(yīng)是是不是因?yàn)楫?dāng)前工程是JDK7的工程導(dǎo)致的?因?yàn)橹耙苍贘DK7的工程上集成過JDK8的三方庫,因?yàn)樽止?jié)碼不匹配導(dǎo)致崩潰,當(dāng)時(shí)的解決方案有幾種:
- 將工程和模塊的JavaVersion設(shè)置為 Java7語言
- defalutConfig 里配置 jackOptions{ enable = true}
- 升級(jí)至Java8,可能遇到亂七八糟的問題可以通過一起升級(jí)gradle版本解決
但是想想也不對(duì),因?yàn)槲沂亲鳛镾DK的提供方,提供的應(yīng)該也是JDK7的字節(jié)碼,反編譯后查看字節(jié)碼也確實(shí)是JDK7的,雖然查看字節(jié)碼確實(shí)有KeySetView,但是提供給JD8的工程用應(yīng)該也不至于崩潰吧
回想起APK的打包流程,最后打包成dex文件的時(shí)候好像是沒看到有JDK版本的區(qū)別,并且JDK8的工程也是可以兼容老的機(jī)器的,這就想到了打包時(shí)的一個(gè)脫糖操作(對(duì)lambda表達(dá)式的處理也是如此),回顧一下相關(guān)的知識(shí)點(diǎn):
對(duì)比與排查
- DX:class文件轉(zhuǎn)化為dex
- D8:脫糖、class文件轉(zhuǎn)換為dex
- R8:整合了Proguard和D8 ,減少了一個(gè)編譯步驟,同時(shí)保留了字節(jié)碼優(yōu)化能力
了解到上面的知識(shí),隨即仔細(xì)的看了下出SDK的分支,結(jié)果發(fā)現(xiàn)…
這居然是還是個(gè)java工程!!!那自然沒有脫糖相關(guān)的操作了,再看下輸出的jar
升級(jí)成android library 工程后打包的aar,輸出產(chǎn)物正常!撒花
最后最后,如果覺得有幫助歡迎點(diǎn)個(gè)👍或關(guān)注~
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:【問題解決】AndroidJDK版本不匹配導(dǎo)致崩潰踩坑記錄-創(chuàng)新互聯(lián)
分享鏈接:http://m.kartarina.com/article40/cdciho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、定制開發(fā)、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)