小编典典

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

all

我正在尝试重建我的 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我的用户目录中的目录;
  • gradlew clean从 AS 终端运行;
  • 手动将源复制到一个新项目(奇怪的是它以某种方式在项目中持续存在......)

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

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

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

更新:

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

更新 2:

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


阅读 149

收藏
2022-08-03

共1个答案

小编典典

在我向 Kotlin 错误跟踪器发布错误报告后,我在 AOSP 跟踪器上收到了问题
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 任务运行时强制且静默地解锁和删除构建文件。

2022-08-03