Avatar ·

Ошибка Unable to delete file при clean в Android/Kotlin проекте

Привет! Я новичок в Android-разработке на Kotlin, использую Android Studio. Когда я запускаю задачу `clean` в Gradle (через терминал или кнопкой в IDE), у меня постоянно вылетает ошибка: ``` Execution failed for task ':app:clean'. > Unable to delete file: D:\Projects\MyApp\app\build\intermediates\...\some_file.dex ``` Иногда ошибка возникает для разных файлов — то для `.class`, то для `.jar`. Пробовал перезагружать компьютер, делать `Invalidate Caches / Restart`, но ничего не помогает. Вот мой `build.gradle.kts` (упрощённо): ```kotlin plugins { id("com.android.application") version "8.2.0" id("org.jetbrains.kotlin.android") version "1.9.20" } android { compileSdk = 34 defaultConfig { applicationId = "com.example.myapp" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" } buildTypes { release { isMinifyEnabled = false } } } ``` Ошибка появляется не каждый раз, но часто. Подскажите, как её исправить? Может, это из-за антивируса? Или из-за того, что файлы заняты Windows? <<>>

Причина ошибки

Ошибка Unable to delete file при выполнении clean в Gradle возникает, когда система не может удалить файлы из папки build/. Основные причины:

  • Файлы заблокированы Windows: ОС (особенно Windows) может блокировать файлы, если они открыты в другом процессе (например, в проводнике, антивирусе или даже в самой Android Studio).
  • Антивирус или защитник Windows: Некоторые антивирусы сканируют файлы в реальном времени и временно блокируют их удаление.
  • Долгие пути (path length issue): В Windows есть ограничение на длину пути (260 символов), и файлы в build/ часто имеют очень длинные имена.
  • Индексация или поиск: Службы индексации (например, Windows Search) могут удерживать файлы.

Решение: пошаговая инструкция

Вот проверенные способы, которые помогают в 95% случаев:

1. Закройте все внешние программы

Перед выполнением clean закройте:

  • Проводник Windows, открытый в папке проекта
  • Любые IDE (кроме Android Studio, которая выполняет clean)
  • Антивирус временно отключите (или добавьте папку проекта в исключения)

2. Используйте терминал с правами администратора

Откройте терминал Android Studio или командную строку от имени администратора и выполните:

cd "D:\Projects\MyApp"
gradlew clean --no-daemon

Флаг --no-daemon гарантирует, что Gradle-демон не будет мешать удалению файлов.

3. Включите поддержку длинных путей в Windows (рекомендуется)

Откройте Редактор реестра (regedit) и перейдите к:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

Найдите параметр LongPathsEnabled и установите его значение в 1. Если его нет — создайте DWORD (32 бита) с таким именем. После этого перезагрузите компьютер.

4. Добавьте исключение в антивирус

Добавьте папку D:\Projects\MyApp в исключения вашего антивируса. Для Защитника Windows:

  • Настройки → Конфиденциальность и безопасность → Защита от вирусов и угроз → Управление настройками → Исключения
  • Добавьте папку проекта

5. Ручное удаление в крайнем случае

Если ничего не помогает, закройте Android Studio и вручную удалите папку build через командную строку (администратор):

rmdir /s /q "D:\Projects\MyApp\app\build"

Или используйте Shift+Delete в проводнике (но сначала закройте все программы).

6. Измените настройки Gradle (профилактика)

Добавьте в gradle.properties (в корне проекта):

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -Djava.io.tmpdir=C:\Temp

Это перенаправит временные файлы Gradle в другую папку, уменьшив нагрузку на основную директорию.

Почему это происходит именно на Windows?

Android-проекты на Kotlin генерируют тысячи файлов с длинными именами (например, classes.dex, R.txt). Windows по умолчанию ограничивает длину пути 260 символами, а антивирусы часто блокируют операции удаления. На macOS и Linux эта проблема встречается гораздо реже.

После выполнения всех шагов ошибка должна исчезнуть. Если нет — проверьте, не используете ли вы сетевой диск или облачную синхронизацию (OneDrive, Dropbox) — они тоже могут блокировать файлы.

<<>>

Альтернативный подход: использование Gradle Wrapper с правами администратора

Если предыдущее решение не помогло, проблема может быть в том, что Gradle-демон удерживает файлы. Попробуйте следующий метод:

1. Остановите все Gradle-демоны

Выполните в терминале (от имени администратора):

gradlew --stop

Это завершит все работающие демоны Gradle, которые могли заблокировать файлы.

2. Очистите кеш Gradle

Иногда проблема в повреждённом кеше. Удалите папку .gradle в домашней директории пользователя (обычно C:\Users\ВашеИмя\.gradle) — но только папку, не файл gradle.properties. Затем перезапустите проект.

3. Используйте cleanBuildCache

Добавьте в build.gradle.kts проекта (не модуля) задачу:

tasks.register("cleanBuildCache") {
    delete(layout.buildDirectory)
}

Затем выполните gradlew cleanBuildCache — это удалит всю папку build одной командой, минуя стандартную задачу clean, которая часто спотыкается на отдельных файлах.

4. Проверьте права доступа

Убедитесь, что у вашего пользователя есть полные права на папку проекта. Кликните правой кнопкой по папке → Свойства → Безопасность → Изменить → дайте полный доступ для вашей учётной записи.

Этот метод особенно полезен, если вы работаете в корпоративной среде с ограничениями безопасности.