错误:任务 ':app:clean' 执行失败。无法删除文件

新手上路,请多包涵

我正在尝试重建我的 Android Studio Gradle 项目(主要包含 Kotlin 代码),但它在清理/重建过程中开始抛出 UnableToDeleteFileException

 Execution failed for task ':app:clean'.
> Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar

这在我尝试更改项目的包结构后开始发生。不幸的是,我是通过重命名和移动源文件夹而不是通过 Android Studio 重构来实现的,这是一个坏主意。

我整天都在寻找解决这个问题的方法,这些是我尝试过但无济于事的方法:

  • 进行 Gradle 同步;
  • 重新安装 Java JRE 和 Java SDK;
  • 重新安装最新版本的 Android Studio (1.4);
  • 回滚到之前的 AS 版本(1.3);
  • 使AS缓存失效并重启;
  • 删除项目目录下的 gradle.gradle 目录;
  • 删除我的用户目录中的 .gradle 目录;
  • 从 AS 终端运行 gradlew clean
  • 手动将源代码复制到一个新项目(奇怪的是它以某种方式在项目中持续存在……)

我尝试过的事情取得了一些成功,但只让我在错误再次发生之前再执行一次清理和重建:

  • 关闭AS,手动删除build文件,重新打开;
  • 在 AS 运行时杀死 java.exe 进程(这在技术上可以每次都完成,但它很乏味并且会减慢构建过程)

所以看起来编译 Java 过程可能会出于某种原因锁定构建文件,但它也可能与 Kotlin 有关。我有一个正在处理的(更成熟的)Java Android 项目,但在清理它时我无法重现此错误。它似乎只发生在我的 Kotlin 项目中。

更新:

我发现问题是由 Kotlin Android 插件引起的。当我从模块的 build.gradle 文件中删除 apply plugin: 'kotlin-android' 文件并在我重新插入它时问题又回来了。随时提供对此的任何见解。

更新 2:

上次更新不是原因。我发现如果项目包含 Kotlin 文件,则重建和清理会失败。它继续失败,即使所有 Kotlin 文件都被删除,直到后台 Java 进程被终止,这意味着它对构建文件有某种锁定。我在这里提交了一个错误,其中包含更多详细信息和重现该错误的步骤: KT-9440

原文由 Bryony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 957
2 个回答

在我向 Kotlin 错误跟踪器发布错误报告后,我在 AOSP 跟踪器上收到了 Issue 61300 的通知。好像是这个原因。由于目前我无能为力,我会将此问题标记为已回答,如果错误已修复,我会更新答案。

同时,如果您运行的是 Windows,我相信我已经找到了解决方法。您需要下载 LockHunter (当然风险自负),然后将以下内容添加到模块的 gradle.build 文件中,将 lockhunter 变量替换为 LockHunter.exe 的路径:

 task clean(type: Exec) {
    ext.lockhunter = '\"C:\\LockHunter.exe\"'
    def buildDir = file(new File("build"))
    commandLine 'cmd', "$lockhunter", '/delete', '/silent', buildDir
}

这会导致 LockHunter 在 app:clean 任务运行时强制且静默地解锁和删除构建文件。

原文由 Bryony 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在任务管理器中杀死了所有 java TM 进程,它让我重建

原文由 Andres Suarez 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题