APP 要上google play,Android SDK 版本要升級(jí)到32;接了一個(gè)第三方SDK,不巧的是這個(gè)SDK引用appcompat是1.5.1,順手把a(bǔ)ppcompat 包升級(jí)到1.5.1,這草率的一升,帶來的不止一地雞毛,還有精神上被殘忍無情的蹂躪,心情上躁動(dòng)不安,以及快要上線的APP給心理上帶來的惴惴不安;再次吐槽android這種碎片化的詬病,當(dāng)時(shí)RN SDK升級(jí)的痛苦仿佛瞬間又要撲面而來,而且這一次來的貌似更猛烈些。
一時(shí)的心血來潮
androidx.appcompat 版本: 1.3.1 ---> 1.5.1
在https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=zh-cn查詢到 1.5.1 會(huì)有如下依賴:

好家伙,Lifecycle 版本也要升級(jí)到 2.5.1,再查:

同時(shí)修改項(xiàng)目依賴版本到 2.5.1:

可以在Maven上面繼續(xù)查詢一下,androidx.appcompat 的依賴如下:

把對(duì)應(yīng)的項(xiàng)目中依賴修改成對(duì)應(yīng)版本,例如我的:

場面逐漸失控
本以為版本升級(jí)到此結(jié)束,編譯輕輕click,起身打水,品一口我的西湖龍井;回來一看,我去!新的報(bào)錯(cuò):appcompat-1.5.1-api.jar!/META-INF/appcompat_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1;截圖如下:

頓時(shí)感覺不妙啊,這是要升級(jí)kotlin版本吶,思前想后一番糾結(jié)之后,都折騰到這份上了也不能停啊,于是開始了 kotlin 版本升級(jí): 1.5.20 ----> 1.7.10

Sync 之后果然果然代碼里出現(xiàn)各種語法錯(cuò)誤提示,查看kotlin 官方文檔:https://book.kotlincn.net/text/whatsnew17.html 看到了好多新語法特性,此時(shí)灰頭土臉的還來不及細(xì)品這些,此間不小心看到了看到Gradle的字眼,瞬間感覺不太妙,編譯報(bào)錯(cuò)gradle 版本過低,仔細(xì)一看:

好家伙,果然要升級(jí)Gradle,我的Android Studio好久沒更新了,既然要gradle 7.0,那我就升級(jí)到最新版本Android Studio,免得好多kotlin 代碼有語法高亮提示錯(cuò)誤,一頓操作猛如虎,升級(jí)到了最新版本Android Studio;在官網(wǎng):https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn#kts查了一下Grandle對(duì)應(yīng)插件版本:

于是把gradle版本升級(jí)到了:7.1.2,過程中還有g(shù)radle 要求運(yùn)行java版本為11,自行搜索修改了一下Studio 設(shè)置,至此 Kotlin、 Android Studio、Gradle 都做了升級(jí),語法錯(cuò)誤高亮提示少了許多,點(diǎn)擊運(yùn)行依舊會(huì)提示語法錯(cuò)誤,那就是苦力活了,各種when必須添加else分支、一些個(gè)判空操作的lamda表達(dá)式需要修改;
柳暗花明
看著幾十上百個(gè)kotlin語法錯(cuò)誤,無法編譯,when必須添加else分支、一些個(gè)判空操作的lamda表達(dá)式語法糖需要修改,剩下的就是苦力活了,不斷地修改語法錯(cuò)誤,編譯再修改,再編譯,花了半天功夫總算是可以順利編譯通過了,再次短期我的茶杯,此時(shí)那茶已然涼透了,倒掉再泡一杯。。。
總結(jié)
代碼雖然都修改完了,也能順利運(yùn)行起來,但如此大動(dòng)干戈的修改代碼,帶來的不只是架構(gòu)上的風(fēng)險(xiǎn),業(yè)務(wù)層代碼也進(jìn)行了很多修改,雖然都是些語法適配修改,但畢竟是動(dòng)了代碼,作為碼農(nóng)我們敢拍胸脯保證百分之百的正確嗎?我心里是惴惴不安的,這個(gè)樣的改動(dòng),測試同學(xué)是不是又能全部覆蓋呢,我想測試同學(xué)也是惶恐萬分,我們開發(fā)是不是能把每一處修改都覆蓋測試,以及交付測試時(shí)能夠準(zhǔn)確的告訴測試范圍呢?對(duì)于這樣的疑問我大底是要沉默了的。我想這樣的改動(dòng)若是最終引發(fā)了線上故障怕也只有開發(fā)去默默地背起這口鍋了。文章來源:http://www.zghlxwxcb.cn/news/detail-487077.html
Android 的碎片化,每過一段時(shí)間就會(huì)給我們帶來一次陣痛,也許一個(gè)簡單API升級(jí)就會(huì)引發(fā)一系列的升級(jí)改造,我想不只是Android、Kotlin、RN、Flutter、Swift; 其實(shí)這種升級(jí)的兼容性是難以避免的,因?yàn)檫@是思想的變化、技術(shù)的革新,我們能做的就是擁抱變化,追隨技術(shù)時(shí)代的步伐,不斷學(xué)習(xí)新的架構(gòu),不斷升級(jí)調(diào)整我們代碼,這樣我們才能始終守護(hù)住自己的那份麥田。That's All文章來源地址http://www.zghlxwxcb.cn/news/detail-487077.html
到了這里,關(guān)于androidx.appcompat 升級(jí)到1.5.1 趟過的坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!