記一次Android Studio智能功能失靈問題的排查

本文記錄了一次對Android Studio智能感知功能失效問題的排查

背景

前些時日,為了增進自己在Android領域的技能,創建了一個試驗性質的項目——Scavenger

這個項目的特點有:

  • 使用最新的AS(目前的版本號是3.3 Canary 12)進行開發
  • 整個項目只使用Kotlin語言
  • 依賴各種最新的功能庫(例如:AndroidX等等)

在一次對依賴庫的版本進行升級之后,AS竟然成了純文本編輯器,聲明跳轉、智能代碼提示等等IDE標配功能都失效了,于是開始了漫漫修復路。

過程

猜測1: AS項目配置混亂?

由于在日常工作中,時有發生AS中無法識別到Android SDK的方法、類,進而導致無法跳轉到相應的代碼,同時代碼中充斥大量的紅色波浪線。通常遇到這種情況,我們會

  1. Invalidate and Restart
  2. 刪除Project的Idea配置,重新初始化項目

因此,當遇到這次的問題之后,第一時間使用上述2種方法進行嘗試,嘗試多次之后發現問題依舊

猜測2: Android Gradle插件兼容性問題

由于在出現這個問題之前,有對各種插件、依賴庫、Kotlin的版本號進行升級,因此在排除了項目配置問題之后,開始考慮是否是因為Android Gradle插件出現兼容性問題,于是將它從3.3.0-alpha12降回3.3.0-alpha11。

問題依舊

猜測3: kotlin版本兼容性問題

將kotlin版本從1.2.71降回1.2.61

問題依舊

猜測4: 修改SourceSet導致

在出現問題前的多次代碼修改中,其中有一次是將代碼從src//java遷移至src//kotlin,然后在build.gradle中配置SourceSet使AS能識別到kotlin目錄下的代碼。
因此,當發現這個問題后,理所當然的重新遷移到java目錄下。

然,問題依舊

猜測5: 嘗試各種關鍵詞去google上搜索

在嘗試了各種能想到的情況之后,開始嘗試各種關鍵詞去google,看看有沒有類似的問題被網友提出。由于這種智能感知問題通常和AS的Indexing有關,所以關鍵詞都和它有關。
然而,很可惜的是,無論是中文、還是英文關鍵詞,搜索出的結果都和現狀不符。

Finally

最后,在嘗試了以上種種猜測之后,偶然間點開AS右下角的IDE Fatal Errors,發現了一條疑似和代碼有關的錯誤。

In file: file:///Users/wankey/Documents/GitHub/Scavenger/android/app/src/main/java/io/github/wankey/scavenger/App.kt

com.google.common.util.concurrent.UncheckedExecutionException: java.io.IOException: File format error reading /Users/wankey/.gradle/caches/transforms-1/files-1.1/constraintlayout-2.0.0-alpha2.aar/7abcd58f437e1b16ae4458788cc6387d/R.txt line 1743: 'int[] styleable GradientColor { 0x0101020b, 0x010101a2, 0x010101a3, 0x0101019e, 0x01010512, 0x01010513, 0x010101a4, 0x0101019d, 0x01010510, 0x01010511, 0x01010201, 0x010101a1 }'
Caused by: java.io.IOException: File format error reading /Users/wankey/.gradle/caches/transforms-1/files-1.1/constraintlayout-2.0.0-alpha2.aar/7abcd58f437e1b16ae4458788cc6387d/R.txt line 1743: 'int[] styleable GradientColor { 0x0101020b, 0x010101a2, 0x010101a3, 0x0101019e, 0x01010512, 0x01010513, 0x010101a4, 0x0101019d, 0x01010510, 0x01010511, 0x01010201, 0x010101a1 }'
Caused by: java.io.IOException: Values string { 0x01010532, 0x0101053f, 0x01010533, 0x7f04009c, 0x7f0400a4, 0x7f0400a5, 0x7f0400a6, 0x7f040189 } should have 10 item(s).

在無計可施的情況下,以其中的Exception信息作為關鍵詞google搜索

com.google.common.util.concurrent.UncheckedExecutionException: java.io.IOException: File format error reading 

驚喜地發現在5日前,萬能的stackoverflow上有人提過這個問題,于是根據他的描述將引起問題的ContraintLayout降回到1.1.3版本,AS的智能感知功能終于復活了。

結論

無論是AS、還是依賴的Library,切勿在線上項目中使用Alpha、Beta版本,不然風險不可控。像這種試驗性質的項目可以嘗試,但是也需慎重,否則可能會浪費自己寶貴的時間。

參考資料:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容