五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

AS或IDEA報(bào)Android Support插件版本不匹配問(wèn)題分析及解決

2021-05-26 23:40 作者:GCC醬_0ff1c1a1  | 我要投稿

在 IDEA 中打開(kāi) Android 項(xiàng)目的時(shí)候,有時(shí)候會(huì)報(bào)這個(gè)錯(cuò)

報(bào)錯(cuò)堆棧如下

我們來(lái)分析一下源碼,找 Android Gradle Plugin 源碼來(lái)分析
此處使用 4.2.0 版本

那我們就去對(duì)應(yīng)的文件位置里看看

agp-version-detect

那么我們應(yīng)該去了解一下這個(gè)版本是如何解析的.
此時(shí)關(guān)注?parseVersion()?方法

0x00 IDEA 插件版本解析

根據(jù)調(diào)試器可以得知這里輸入的版本號(hào)就是 Android 插件的版本號(hào)

android-plugin-ver-idea

對(duì)于 IDEA 來(lái)說(shuō)是?10.4.1.1.211.7142.45
首先是這么一段

在這一行代碼里,主版本號(hào)被解析為 10

接下來(lái),因?yàn)闅v史原因,這個(gè) 10 不應(yīng)該被解析為主要版本號(hào),所以進(jìn)入這個(gè) if 塊
這里把主版本號(hào)設(shè)定為第二個(gè)部分,也就是 4 年份為 10

在這里取第三部分作為次要版本號(hào),這里是 1
下面兩個(gè)都是給歷史版本處理用的,不管他

精彩的部分是這里,由于年份為 10 不匹配大于 2000 的條件,所以走了最下面的處理

然后使用 Kotlin 的命名函數(shù),在創(chuàng)建對(duì)象的時(shí)候砍掉了年份,只留下主要和次要版本
所以得到的插件版本是 0.4.1


0x01 AGP 版本解析

再來(lái)看看 AGP 自己的版本號(hào)是如何操作的,已知傳入為?4.2.0

主版本為 4

那些邏輯都沒(méi)有被觸發(fā),所以次要版本是 2
年份為 0
走一遍會(huì)變成 0.4.2

0x02 AS 插件版本解析

AS 里面插件版本跟 IDEA 不一樣,拆開(kāi)插件 jar 之后可以得到
文件在?android/adnroid.jar/META-INF/plugin.xml
部分內(nèi)容如下

由于B站編輯器代碼塊過(guò)于奇葩,這里就截圖了

plugin.xml

這個(gè)版本號(hào)解析出來(lái)是 202.7660 走一遍就是 0.202.7660

0x03 版本號(hào)比較

此處重寫了 compareTo 函數(shù)來(lái)實(shí)現(xiàn).邏輯如下

首先判斷年份是否相同
然后判斷主要版本
再判斷次要版本
都是按照數(shù)字大小匹配

那你 0.4.1 肯定比 0.4.2 小,所以這里炸了

agp-debug-version-diff

0x04 解決方案

手工關(guān)閉檢查

在最開(kāi)始?verifyIDEIsNotOld()?中有這么一段

去看看這個(gè)?BooleanOption.ENABLE_STUDIO_VERSION_CHECK
發(fā)現(xiàn)他的選項(xiàng)是這個(gè)?android.injected.studio.version.check
也就是我們?cè)?properties 文件里設(shè)定這個(gè) Key 為 false 即可跳過(guò)檢測(cè)

等待 IDEA 版本更新

根據(jù) IDEA 官方的 YouTrack 下面的討論.這個(gè)插件版本將會(huì)在 IDEA 2021.2 中升級(jí).各位可以等待高版本
下面是一些參考

https://youtrack.jetbrains.com/issue/IDEA-264255
https://youtrack.jetbrains.com/issue/IDEA-268850
https://youtrack.jetbrains.com/issue/IDEA-252823

使用 AGP7+

另外還可以嘗試一下 AGP7+ 版本
在 AGP7+ 中獲取最小要求版本的邏輯有變化

可以看到這里不再是用 AGP 版本號(hào)了,而是定義了一個(gè)年份開(kāi)頭的版本
在這個(gè)情況下比較的時(shí)候,年份設(shè)定為 2020
出來(lái)的版本號(hào)是 2020.3.1
在比較的時(shí)候 2020 一定是比 0 大的,這就直接結(jié)束了比較.


AS或IDEA報(bào)Android Support插件版本不匹配問(wèn)題分析及解決的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
韶山市| 虎林市| 台中市| 仙居县| 永清县| 黔江区| 库伦旗| 克东县| 凤城市| 新蔡县| 新绛县| 金华市| 务川| 宾阳县| 博野县| 芒康县| 盐亭县| 咸阳市| 湖口县| 黄浦区| 西城区| 镇沅| 邮箱| 鄂托克旗| 安图县| 河曲县| 塔河县| 安阳市| 临夏县| 西和县| 汝南县| 馆陶县| 璧山县| 塔河县| 尚志市| 宁夏| 楚雄市| 洛隆县| 沙湾县| 正蓝旗| 景东|