You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级Android Studio与Build Tools后编译报错,回退版本失败求助

解决Android Studio升级后编译报错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库。出现这个问题的核心原因可能有两个:

  1. AGP升级后,项目依赖关系发生变化,原本隐式依赖的Commons IO库不再被自动引入;
  2. 你当前使用的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

火山引擎 最新活动