升级Gradle 4.4与Build Tools 3.1.2后代码报红但编译正常
我之前也碰到过一模一样的情况——升级Gradle和Build Tools后,代码全飘红提示cannot resolve symbol,但编译、打包完全正常,Clean/Rebuild、Invalidate Cache这些常规操作都不管用。结合你的情况(新建项目正常,旧项目出问题),大概率是旧项目的本地配置残留、索引异常或者版本不兼容导致的,试试下面这些方案:
1. 彻底清除AS本地配置文件
关闭Android Studio,手动删除项目根目录下的.idea文件夹,以及所有模块目录里的.iml文件。这些是AS生成的本地索引和配置文件,升级Gradle后很容易残留旧的无效信息。重新打开项目后,AS会自动重新生成这些文件,很多时候红标问题就直接解决了。
2. 检查Gradle与Android插件的版本兼容性
你提到升级到了Gradle 4.9,但Android Build Tools是3.1.2——这里要注意:Android Gradle Plugin(也就是build.gradle里的com.android.tools.build:gradle版本)和Gradle版本有严格的对应关系:
- Android Plugin 3.1.2 要求 Gradle 版本在 4.4~4.7 之间
- Gradle 4.9 需要搭配 Android Plugin 3.3.0 及以上版本
版本不兼容会导致AS的索引服务混乱,虽然编译可能侥幸通过,但代码识别会彻底失效。建议根据Gradle版本调整插件版本,比如用Gradle 4.9的话,把项目根目录build.gradle里的插件版本改成3.3.2,然后重新同步。
3. 强制刷新依赖并重建索引
在AS右侧的Gradle面板,点击顶部的「Refresh all Gradle projects」按钮(那个圆形箭头图标);或者直接在项目根目录的Terminal里执行命令:
# Mac/Linux ./gradlew clean build --refresh-dependencies # Windows gradlew clean build --refresh-dependencies
这个命令会强制刷新所有远程依赖,同时清理旧的构建缓存,让AS重新生成完整的代码索引。
4. 检查AS的索引与SDK配置
- 打开「File → Settings → Editor → File Types」,检查「Ignored Files and Folders」列表里有没有误加你的Java/Kotlin源码文件,要是有的话移除掉;
- 打开「File → Project Structure → SDKs」,确认Android SDK的路径正确,且安装的SDK版本和项目中
compileSdkVersion一致; - 检查「File → Settings → Build, Execution, Deployment → Compiler → Gradle」,尝试切换「Use Gradle from」的选项(比如从本地Gradle切换到项目的wrapper,或者反之),然后重新同步。
5. 关闭Gradle离线模式
如果你的gradle.properties里开启了org.gradle.offline=true,AS会无法下载新的依赖索引信息,导致代码识别失败。打开项目根目录的gradle.properties,把这个配置改成false,然后同步项目。
如果以上方案都试过还是不行,那可能是旧项目里有一些遗留的废弃配置(比如旧的插件写法、自定义的编译脚本),可以尝试把旧项目的代码和配置逐步迁移到新建的项目中,排查具体是哪个配置导致的问题。
内容的提问来源于stack exchange,提问作者Paras Khanagwal

