本文记录了一次对Android Studio智能感知功能失效问题的排查
背景
前些时日,为了增进自己在Android领域的技能,创建了一个试验性质的项目——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版本,不然风险不可控。像这种试验性质的项目可以尝试,但是也需慎重,否则可能会浪费自己宝贵的时间。
参考资料: