我正在尝试重建我的 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 许可协议
在我向 Kotlin 错误跟踪器发布错误报告后,我在 AOSP 跟踪器上收到了 Issue 61300 的通知。好像是这个原因。由于目前我无能为力,我会将此问题标记为已回答,如果错误已修复,我会更新答案。
同时,如果您运行的是 Windows,我相信我已经找到了解决方法。您需要下载 LockHunter (当然风险自负),然后将以下内容添加到模块的
gradle.build
文件中,将lockhunter
变量替换为 LockHunter.exe 的路径:这会导致 LockHunter 在 app:clean 任务运行时强制且静默地解锁和删除构建文件。