【問題解決】AndroidJDK版本不匹配導(dǎo)致崩潰踩坑記錄-創(chuàng)新互聯(lián)

【問題解決】Android JDK版本不匹配導(dǎo)致崩潰踩坑記錄
      • 部分機(jī)型反饋崩潰問題
      • 谷歌回復(fù)與解決方案
      • Android打包脫糖操作
      • 對(duì)比與排查
      • 總結(jié)

前幾天同事遇到一個(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í)的解決方案有幾種:

  1. 將工程和模塊的JavaVersion設(shè)置為 Java7語言
  2. defalutConfig 里配置 jackOptions{ enable = true}
  3. 升級(jí)至Java8,可能遇到亂七八糟的問題可以通過一起升級(jí)gradle版本解決

但是想想也不對(duì),因?yàn)槲沂亲鳛镾DK的提供方,提供的應(yīng)該也是JDK7的字節(jié)碼,反編譯后查看字節(jié)碼也確實(shí)是JDK7的,雖然查看字節(jié)碼確實(shí)有KeySetView,但是提供給JD8的工程用應(yīng)該也不至于崩潰吧
在這里插入圖片描述

谷歌回復(fù)與解決方案
  1. 首先當(dāng)然要盡快解決客戶反饋的問題,因?yàn)楹芸炷軌蚨ㄎ坏絾栴},直接換種方式進(jìn)行遍歷/獲取就可以了,接下來研究下為啥會(huì)出現(xiàn)這種情況
  2. 部分系統(tǒng)上是沒有問題的,說明這個(gè)跟系統(tǒng)版本以及環(huán)境有關(guān),如果是較老的系統(tǒng)缺少相關(guān)的API確實(shí)會(huì)導(dǎo)致崩潰
  3. 查詢資料發(fā)現(xiàn):谷歌回復(fù)已解決
Android打包脫糖操作

回想起APK的打包流程,最后打包成dex文件的時(shí)候好像是沒看到有JDK版本的區(qū)別,并且JDK8的工程也是可以兼容老的機(jī)器的,這就想到了打包時(shí)的一個(gè)脫糖操作(對(duì)lambda表達(dá)式的處理也是如此),回顧一下相關(guān)的知識(shí)點(diǎn):

  • android打包的脫糖處理

在這里插入圖片描述

  • JDK8語法支持表

在這里插入圖片描述

  • DX、D8、R8
  • DX:class文件轉(zhuǎn)化為dex
  • D8:脫糖、class文件轉(zhuǎn)換為dex
  • R8:整合了Proguard和D8 ,減少了一個(gè)編譯步驟,同時(shí)保留了字節(jié)碼優(yōu)化能力
對(duì)比與排查

了解到上面的知識(shí),隨即仔細(xì)的看了下出SDK的分支,結(jié)果發(fā)現(xiàn)…
在這里插入圖片描述

這居然是還是個(gè)java工程!!!那自然沒有脫糖相關(guān)的操作了,再看下輸出的jar
在這里插入圖片描述

升級(jí)成android library 工程后打包的aar,輸出產(chǎn)物正常!撒花

在這里插入圖片描述

總結(jié)
  • 如果是java7的工程,需要引入java8的SDK,除了升級(jí)本地的工程的話,其實(shí)也可以去手動(dòng)去修改別人的SDK(不建議)
  • 如果是發(fā)現(xiàn)提供出去的SDK存在包含JDK8的字節(jié)碼的話,可以檢查一下當(dāng)前的編譯環(huán)境是否使用了OpenJDK或者是否是android工程

最后最后,如果覺得有幫助歡迎點(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)

網(wǎng)站優(yōu)化排名
主站蜘蛛池模板: 精品久久久无码中文字幕边打电话 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码的免费不卡毛片视频| 无码日韩精品一区二区免费| 色综合久久久无码中文字幕波多| 成人无码精品1区2区3区免费看| 亚洲av无码无在线观看红杏| 无码一区二区波多野结衣播放搜索| 久久99久久无码毛片一区二区| 无码国产精品一区二区免费模式| 免费无码又爽又高潮视频| 亚洲AV无码一区二区二三区软件| 狠狠久久精品中文字幕无码| 日韩欧精品无码视频无删节| 人妻无码久久中文字幕专区 | 无码GOGO大胆啪啪艺术| 成年无码av片在线| 国产精品无码无卡在线观看久| 无码一区二区三区在线观看 | 无码人妻黑人中文字幕| 人妻无码中文字幕| 国产精品亚洲а∨无码播放麻豆 | 无码福利一区二区三区| 中文字幕无码乱人伦| 日韩美无码五月天| 无码综合天天久久综合网| 精品欧洲av无码一区二区三区| 国产成人无码综合亚洲日韩| 亚洲精品无码久久久| 精品无码国产AV一区二区三区| 亚洲人成网亚洲欧洲无码| 久久久久无码精品国产| 无码成人一区二区| 中文无码一区二区不卡αv| 精品三级AV无码一区| 99久久人妻无码精品系列 | 久久久无码人妻精品无码| 国产AV一区二区三区无码野战| 久久久久无码精品亚洲日韩| 无码人妻精品中文字幕| 亚洲一区无码中文字幕乱码|