最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
星座| 邵东县| 阿克陶县| 密云县| 宾阳县| 肇东市| 青海省| 阿拉善右旗| 友谊县| 封开县| 莲花县| 临高县| 札达县| 明溪县| 信宜市| 南木林县| 专栏| 岳池县| 丽江市| 西乡县| 泽库县| 墨江| 沙田区| 昔阳县| 扎赉特旗| 林甸县| 望奎县| 宁海县| 靖安县| 三明市| 海安县| 土默特右旗| 印江| 镇坪县| 镇远县| 会同县| 休宁县| 阿巴嘎旗| 三亚市| 图木舒克市| 年辖:市辖区|