Erreur Gradle : Unable to delete file – solution pour Kotlin

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : La douleur familière de chaque développeur Android

\n

Vous lancez Build → Clean Project dans Android Studio, espérant une reconstruction rapide du projet, mais au lieu de cela, vous voyez un texte rouge dans la fenêtre Build :

\n
Error: Execution failed for task ':app:clean'.\n> Unable to delete file: C:\\Users\\User\\AndroidStudioProjects\\MyApp\\app\\build\\...\\some_file.dex
\n

Familier ? Si vous codez en Kotlin pour Android, cette erreur peut survenir avec une régularité effrayante, surtout sur Windows. Elle ralentit non seulement le développement, mais vous oblige également à chercher des solutions « magiques » comme redémarrer l'ordinateur.

\n

Dans cet article, nous allons analyser pourquoi l'erreur Unable to delete file se produit, comment la corriger définitivement, et montrer des exemples de code en Kotlin pour automatiser la solution. À la fin de l'article, vous serez capable non seulement de résoudre le problème, mais aussi de le prévenir.

\n

Commençons par les causes, puis passons aux solutions — des plus simples aux plus avancées.

\n\n

Pourquoi Gradle ne peut-il pas supprimer le fichier ?

\n

L'erreur Unable to delete file lors de l'exécution de la tâche :app:clean se produit lorsque Gradle tente de vider le dossier build/, mais ne peut pas supprimer un ou plusieurs fichiers. Les principales causes :

\n
    \n
  • Fichier verrouillé par un autre processus — le plus souvent l'antivirus, Windows Search Indexer, ou Android Studio elle-même.
  • \n
  • Chemins longs (Windows) — si le chemin du fichier dépasse 260 caractères, Windows peut refuser de le supprimer.
  • \n
  • Flux d'entrée-sortie non fermés — votre application ou bibliothèque peut maintenir le fichier ouvert.
  • \n
  • Conflit avec Instant Run / Apply Changes — les anciennes versions d'Android Studio pouvaient verrouiller les fichiers.
  • \n
\n

Le problème se manifeste le plus souvent sur Windows, mais peut également se produire sur macOS/Linux lors de l'utilisation d'un partage SMB ou de Docker.

\n\n

Solutions rapides (en 5 minutes)

\n

Avant de plonger dans le code, essayez ces étapes simples. Elles aident dans 80% des cas.

\n\n

1. Fermez Android Studio et supprimez manuellement

\n

La méthode la plus fiable — fermer l'IDE et supprimer manuellement le dossier app/build. Si le fichier ne se supprime pas, utilisez Unlocker (Windows) ou la commande lsof (macOS/Linux) pour trouver le processus bloquant.

\n\n

2. Utilisez le terminal au lieu de l'interface graphique

\n

Parfois, Android Studio « se bloque » sur la tâche clean. Exécutez la commande dans le terminal :

\n
./gradlew clean --no-daemon
\n

Le flag --no-daemon lance Gradle sans processus en arrière-plan, ce qui résout souvent le problème de verrouillage.

\n\n

3. Désactivez Instant Run / Apply Changes

\n

Dans Android Studio 3.x et versions antérieures, Instant Run pouvait verrouiller les fichiers. Désactivez-le :

\n
    \n
  • Allez dans File → Settings → Build, Execution, Deployment → Instant Run.
  • \n
  • Décochez Enable Instant Run.
  • \n
\n

Dans les nouvelles versions (Arctic Fox+), cette option est remplacée par Apply Changes, mais le problème est moins fréquent.

\n\n

Solutions avancées : automatisation en Kotlin

\n

Si les méthodes rapides n'ont pas fonctionné, il est temps d'automatiser le processus. Nous allons écrire un petit script en Kotlin qui s'exécutera avant la tâche clean et fermera de force les processus bloquants.

\n\n

4. Utilisation du DSL Kotlin dans Gradle pour une tâche personnalisée

\n

Ajoutez dans le fichier build.gradle.kts (au niveau du module) le code suivant :

\n
// build.gradle.kts (app level)\ntasks.register<Exec>("killFileLocks") {\n    description = "Ferme les processus qui verrouillent les fichiers dans le dossier build"\n    commandLine("cmd", "/c", "taskkill /f /im java.exe 2>nul || exit 0")\n    // Pour macOS/Linux, remplacez par :\n    // commandLine("sh", "-c", "lsof -ti:8080 | xargs kill -9 2>/dev/null || true")\n}\n\ntasks.named("clean") {\n    dependsOn                

Blogs

Book Recommendations