記一次Android Studio智慧功能失靈問題的排查
本文記錄了一次對Android+Studio/">Android Studio智慧感知功能失效問題的排查
背景
前些時日,為了增進自己在Android領域的技能,建立了一個試驗性質的專案——ofollow,noindex">Scavenger 。
這個專案的特點有:
- 使用最新的AS(目前的版本號是3.3 Canary 12)進行開發
- 整個專案只使用Kotlin語言
- 依賴各種最新的功能庫(例如:AndroidX等等)
在一次對依賴庫的版本進行升級之後,AS竟然成了純文字編輯器,宣告跳轉、智慧程式碼提示等等IDE標配功能都失效了,於是開始了漫漫修復路。
過程
猜測1: AS專案配置混亂?
由於在日常工作中,時有發生AS中無法識別到Android SDK的方法、類,進而導致無法跳轉到相應的程式碼,同時代碼中充斥大量的紅色波浪線。通常遇到這種情況,我們會
- Invalidate and Restart
- 刪除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版本,不然風險不可控。像這種試驗性質的專案可以嘗試,但是也需慎重,否則可能會浪費自己寶貴的時間。
參考資料: