更新Android Studio至3.1后应用构建失败,求助解决Proguard相关异常
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesAndResourcesWithProguardForStageDebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter...
嘿,我之前更新到Android Studio 3.1时也碰到过一模一样的ProGuard构建失败问题,折腾了好一阵才解决,给你几个亲测有效的排查方向:
校验ProGuard规则的兼容性
Studio 3.1对ProGuard的规则校验比旧版本严格很多,之前能正常运行的规则可能现在会触发错误。建议你先逐个排查proguard-rules.pro里的规则:注释掉那些非必需的自定义规则,或者去你用到的第三方库官方文档里确认最新的ProGuard规则,确保每个依赖库的规则都适配新版本的构建工具。同步Gradle插件与Gradle版本
升级Studio后,Gradle插件和Gradle本体版本不匹配是常见坑。你可以在项目根目录的build.gradle里,把插件版本指定为Studio 3.1对应的com.android.tools.build:gradle:3.1.0,同时把Gradle wrapper版本更新到4.4(在gradle/wrapper/gradle-wrapper.properties里修改distributionUrl),同步后再尝试构建。清理缓存并重启Studio
缓存冲突大概率是幕后黑手,试试这两步:- 点击菜单栏
File -> Invalidate Caches / Restart,选择「Invalidate and Restart」 - 手动删除项目根目录的
.gradle文件夹、项目根目录的build文件夹,还有app模块下的build文件夹,然后重新构建
- 点击菜单栏
排查依赖冲突
有些第三方库在新构建工具下会出现依赖重复或冲突,导致ProGuard处理时崩溃。你可以在终端执行./gradlew app:dependencies(Windows用gradlew.bat app:dependencies)查看完整依赖树,找到重复的依赖后用exclude语法移除,比如:implementation('com.example:target-library:1.2.3') { exclude group: 'com.android.support', module: 'support-fragment' }临时关闭增量构建(应急用)
如果上面的方法都没见效,可以先关闭增量构建验证问题:在项目根目录的gradle.properties里添加一行:android.enableBuildCache=false不过这只是临时方案,还是建议找到根本原因解决。
内容的提问来源于stack exchange,提问作者Anbarasu Chinna

