升级至Android Studio 3.1后遇到诡异编译Bug求助
解决Android Studio 3.1升级后编译抛出CompilationFailedException的问题
我之前也碰到过一模一样的情况——升级AS 3.1后,Gradle编译突然报错,看根目录Gradle文件啥问题都没有,就只抛出这个顶层异常。给你几个我亲测有效的排查和解决方向:
先揪出真正的错误根源
你看到的org.gradle.api.internal.tasks.compile.CompilationFailedException只是个“背锅”的顶层异常,真正的问题藏在日志细节里:- 打开AS底部的Build面板,切换到Build Output标签页,往下翻找带红色标识的具体报错(比如某类找不到、语法错误、依赖冲突)
- 或者直接在终端执行命令:
执行后会输出完整堆栈,直接定位到出错的模块、文件甚至代码行# Mac/Linux ./gradlew assembleDebug --stacktrace # Windows gradlew.bat assembleDebug --stacktrace
检查Gradle版本适配性
AS 3.1对Gradle插件和Gradle wrapper版本有明确要求:- 项目根目录
build.gradle里的插件版本要对应com.android.tools.build:gradle:3.1.0(上下小版本也可,比如3.1.4) gradle/wrapper/gradle-wrapper.properties里的distributionUrl要对应Gradle 4.4及以上版本,比如:distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
- 项目根目录
清理缓存强制重建
升级AS后缓存大概率会出问题,直接清掉重来:- 点击AS顶部菜单栏
File > Invalidate Caches...,勾选Invalidate and Restart,重启后重新编译 - 也可以手动删除项目根目录的
.gradle、build文件夹,以及用户目录下的~/.gradle/caches缓存文件夹,再同步项目
- 点击AS顶部菜单栏
排查第三方依赖兼容性
很多旧依赖没适配AS 3.1的编译工具链:- 检查是否有用过时的注解处理器,或者依赖没有适配Java 8(如果你的项目启用了Java 8)
- 尝试逐个注释掉近期新增的依赖,排查是否是某个依赖导致的编译冲突
检查模块编译配置一致性
个别模块的build.gradle可能有隐藏问题:- 确认
compileSdkVersion、buildToolsVersion是否适配AS 3.1(至少要27.0.3以上的buildTools版本) - 检查所有模块的
sourceCompatibility和targetCompatibility是否统一,比如不要有的模块设成1.7有的设成1.8
- 确认
我当时踩坑的例子:项目里一个旧图片加载库的注解处理器和AS 3.1的编译插件冲突,日志只抛出顶层异常,翻到最底部才发现是注解处理器的类找不到,换掉那个依赖就正常了。
内容的提问来源于stack exchange,提问作者Sébastien Bémelmans
相关产品推荐
相关产品推荐

