Introduction : La douleur familière de chaque développeur Android
\nVous 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 :
Error: Execution failed for task ':app:clean'.\n> Unable to delete file: C:\\Users\\User\\AndroidStudioProjects\\MyApp\\app\\build\\...\\some_file.dex\nFamilier ? 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.
\nDans 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.
\nCommençons par les causes, puis passons aux solutions — des plus simples aux plus avancées.
\n\nPourquoi Gradle ne peut-il pas supprimer le fichier ?
\nL'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
- 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
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\nSolutions rapides (en 5 minutes)
\nAvant de plonger dans le code, essayez ces étapes simples. Elles aident dans 80% des cas.
\n\n1. Fermez Android Studio et supprimez manuellement
\nLa 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.
2. Utilisez le terminal au lieu de l'interface graphique
\nParfois, Android Studio « se bloque » sur la tâche clean. Exécutez la commande dans le terminal :
\n./gradlew clean --no-daemon\nLe flag --no-daemon lance Gradle sans processus en arrière-plan, ce qui résout souvent le problème de verrouillage.
3. Désactivez Instant Run / Apply Changes
\nDans 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
Dans les nouvelles versions (Arctic Fox+), cette option est remplacée par Apply Changes, mais le problème est moins fréquent.
\n\nSolutions avancées : automatisation en Kotlin
\nSi 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\n4. Utilisation du DSL Kotlin dans Gradle pour une tâche personnalisée
\nAjoutez dans le fichier build.gradle.kts (au niveau du module) le code suivant :
// 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