升级Android Studio与Build Tools后编译报错,回退版本失败求助
NoClassDefFoundError: org/apache/commons/io/filefilter/TrueFileFilter 先还原你的场景:
之前用Android Studio 3.0、Gradle 3.1.0、build-tool 25.0.3和Kotlin 1.2.10开发完全正常,升级到AS 3.1.2后,按照编译提示把build-tool升到27.0.3、compileSdk/targetSdkVersion设为27,Gradle保持3.1.0,结果编译时碰到了这个棘手的错误:
Error:FAILURE: Build failed with an exception.
- 出错原因:任务':sdk:compileReleaseJavaWithJavac'执行失败。
java.lang.NoClassDefFoundError: org/apache/commons/io/filefilter/TrueFileFilter- 尝试方案:使用--stacktrace选项获取堆栈跟踪;使用--info或--debug选项获取更多日志输出;使用--scan选项获取完整分析信息。
- 获取更多帮助:https://help.gradle.org
BUILD FAILED in 1s
而且回退build-tool到25.0.3时,还会被AS强制使用27.0.3,因为Android Gradle Plugin(AGP)3.1.0要求最低build-tools版本是27.0.3,确实没法直接回退。
我帮你梳理下问题根源和解决步骤:
问题根源
这个错误本质是编译时找不到org.apache.commons.io.filefilter.TrueFileFilter类,这个类属于Apache Commons IO库。出现这个问题的核心原因可能有两个:
- AGP升级后,项目依赖关系发生变化,原本隐式依赖的Commons IO库不再被自动引入;
- 你当前使用的Gradle版本(3.1.0)和AGP 3.1.2版本不兼容,导致依赖解析异常。
分步解决方案
1. 显式添加Apache Commons IO依赖
在报错的:sdk模块的build.gradle文件中,添加Commons IO的依赖,让编译时能找到缺失的类:
dependencies { // 保留你原有的其他依赖... implementation 'commons-io:commons-io:2.11.0' // 这是稳定版,也可以用适配你项目的其他版本 }
添加完成后点击AS右上角的Sync Now同步项目,然后尝试重新编译。
2. 清理项目缓存并重建
缓存问题经常会导致各种编译异常,执行以下操作彻底清理:
- 点击AS菜单栏的
Build->Clean Project - 接着点击
Build->Rebuild Project - 如果还是不行,手动删除项目根目录下的
.gradle文件夹和:sdk模块下的build文件夹,再重新同步编译。
3. 修正Gradle版本与AGP的兼容性
AGP 3.1.x系列要求Gradle版本至少为4.4,你当前用的Gradle 3.1.0版本太低了,这是很多兼容性问题的源头。修改项目根目录下gradle/wrapper/gradle-wrapper.properties文件中的distributionUrl:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
这个版本是AGP 3.1.2官方推荐的Gradle版本,修改后同步项目。
4. 检查并适配Kotlin版本(可选)
你的Kotlin版本1.2.10和AGP 3.1.2理论上兼容,但如果前面的步骤都没解决问题,可以尝试升级Kotlin到兼容版本(比如1.2.71):
- 修改项目根目录
build.gradle中的Kotlin插件版本:
buildscript { dependencies { // 其他依赖... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71" } }
- 同时修改
:sdk模块中的Kotlin依赖:
dependencies { // 其他依赖... implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71" }
同步后重新编译。
按照这些步骤一步步操作,应该能解决你的编译问题。
内容的提问来源于stack exchange,提问作者Nguyen Minh Binh




