Comment vider le cache Gradle?

320

J'essaie d'utiliser Android Studio, et la première fois que je le démarre, il faut environ 45 MINUTES pour compiler ... Si je ne quitte pas l'application, ça va - chaque compilation / exécution ultérieure de l'application prendra environ 45 secondes.

J'ai essayé de vérifier certains de mes caches: il y a un .gradle/cachesdossier dans mon répertoire personnel et il contient 123 Mo.

Il y a aussi un .gradledossier dans mon dossier de projet ... l'un taskArtifactsétait comme 200 Mo. J'ai peur de les neutraliser au hasard. Quelles parties des dossiers peuvent être supprimées en toute sécurité?

Existe-t-il une meilleure explication pour laquelle mon Studio Android prend une éternité pour exécuter la gradle assembletâche lors du premier chargement de l'application?

Dois-je également vider le cache intellij?

David T.
la source
3
j'ai découvert plus tard que les 45 minutes pour compiler sont parce que j'ai changé les paramètres pour Compiler -> Gradlenon Use in-process build. rien à voir avec le cache
David T.
Aucune des réponses n'a aidé. Il s'avère que certaines images ont été corrompues. L'ouverture des images dans l'Explorateur Windows vous montre rapidement quelles images sont corrompues (celles pour lesquelles il ne charge pas les aperçus). Remplacé ces images et le tour est joué!
Bimde
@ david-t Pourriez-vous indiquer où se trouve cette option? J'ai la version 3.3.1 mais je ne la trouve pas sous Préférences - Build, Execution, Deployment
Leo

Réponses:

262

Comme @ Bradford20000 l'a souligné dans les commentaires, il pourrait y avoir un gradle.propertiesfichier ainsi que des scripts de gradle globaux situés sous $HOME/.gradle. Dans ce cas, une attention particulière doit être portée lors de la suppression du contenu de ce répertoire.

Le .gradle/cachesrépertoire contient le Gradlecache de génération. Donc, si vous avez une erreur concernant le cache de génération, vous pouvez le supprimer.

Opale
la source
43
Une chose à noter est que si vous avez un fichier gradle.properties dans votre dossier .gradle dans votre répertoire personnel, vous ne voudrez pas supprimer tout le dossier. En règle générale, il suffit de supprimer .gradle / caches pour que Gradle retélécharge toutes les dépendances.
Bradford2000
1
à chaque mise à jour d'Android Studio, les versions gradle semblent devenir de plus en plus lentes. Pourquoi est-ce que lorsque je déploie sur un appareil, arrête l'exécution de l'application, puis redéploie (sans toucher à aucun code!), Android studio prend à nouveau 2 minutes pour créer une build et la déployer. C'est friggin nutz.
Someone Somewhere
1
Sur Android Studio pour nettoyer les caches du système: menu principal Android stdio, choisissez Fichier | Invalidate Caches / Restart.and build menu> clean project
Shomu
367

Le cache Gradle se situe à

  • Sous Windows: %USER_HOME%\.gradle/caches/
  • Sur Mac / Unix: ~/.gradle/caches/

Vous pouvez parcourir ces répertoires et les supprimer manuellement ou exécuter

rm -rf $HOME/.gradle/caches/

sur le système Unix. L'exécution de cette commande forcera également le téléchargement des dépendances.

Mise à jour 2: vider le cache de génération Android du projet actuel

Remarque: Fichier d' Android Studio | Invalider Caches / Restart ne vide pas le cache de génération Android, vous devrez donc le nettoyer séparément.

Sous Windows:

gradlew cleanBuildCache

Sur Mac ou Linux:

./gradlew cleanBuildCache
Bao Le
la source
20
Cela n'a pas effacé le cache d'une dépendance maven. J'ai supprimé la bibliothèque du référentiel maven et invalidé les caches Android Studio, mais le projet est toujours en cours de construction. Cela signifie que le cache gradle pour la dépendance maven n'est pas effacé.
mattm
2
La façon dont vous avez décrit ne nettoiera que le cache du projet principal et ses dépendances de projet, mais les dépendances de la bibliothèque sont intactes. Vous avez décrit comment nettoyer le cache d'AndroidStudio, mais pas le cache de Gradle.
Leandroid
Oui, mais cela n'apparaît pas sur Mac avant de charger le projet.
milosmns
il fonctionne toujours bien sur la dernière version d'Android Studio
Raju yourPepe
2
si vous voulez nettoyer et nettoyer le cache, exécutez les deux tâches:gradlew clean cleanBuildCache
equiman
62

EDIT: cleanBuildCache ne fonctionne plus

Le plugin Android Gradle utilise désormais la fonction de cache Gradle

REF: https://guides.gradle.org/using-build-cache/

POUR EFFACER CACHE

Nettoyez le répertoire du cache pour éviter les hits des versions précédentes

 rm -rf $GRADLE_HOME/caches/build-cache-*

REF: https://guides.gradle.org/using-build-cache/#caching_android_projects

AUTRES DIGRESSIONS

voir ici (y compris les modifications).

================

INFOS OBSOLÈTES:

Nouvelle solution utilisant la tâche Gradle

cleanBuildCache

disponible via le plugin Android pour Gradle, révision 2.3.0 (février 2017)

Dépendances:

  1. Gradle 3.3 ou supérieur.
  2. Build Tools 25.0.0 ou supérieur.

Plus à:

https://developer.android.com/studio/build/build-cache.html#clear_the_build_cache

Contexte

Créer un cache:

stocke certaines sorties que le plug-in Android génère lors de la construction de votre projet (comme les AAR non emballés et les dépendances distantes prédéfinies). Vos builds propres sont beaucoup plus rapides lors de l'utilisation du cache car le système de build peut simplement réutiliser ces fichiers mis en cache lors des builds suivants, au lieu de les recréer. Les projets utilisant le plugin Android 2.3.0 et supérieur utilisent le cache de génération par défaut. Pour en savoir plus, lisez Améliorer la vitesse de construction avec Build Cache.

Remarque: La tâche cleanBuildCache n'est pas disponible si vous désactivez le cache de génération.

usage:

les fenêtres

gradlew cleanBuildCache

linux / mac

gradle cleanBuildCache

Android Studio / IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 

** gradle / gradlew sont des fichiers spécifiques au système contenant des scripts - veuillez consulter les informations système comment exécuter le script

  1. linux - https://www.cyberciti.biz/faq/howto-run-a-script-in-linux/
  2. Windows - https://technet.microsoft.com/en-us/library/bb613481(v=vs.85).aspx
  3. mac https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html
ceph3us
la source
43

Faites attention avec le démon gradle, vous devez l'arrêter avant d'effacer et de relancer gradle.

Arrêtez le premier démon:

./gradlew --stop

Nettoyer le cache en utilisant:

rm -rf ~/.gradle/caches/

Réexécutez votre compilation

rresino
la source
Pouvez-vous expliquer pourquoi ou créer un lien vers une documentation à ce sujet?
tir38
1
Si votre démon gradle est en cours d'exécution, vos caches gradle seront utilisés. Par conséquent, votre système d'exploitation empêchera probablement la suppression.
0x539
6

Le démon gradle crée également de nombreux fichiers texte volumineux de chaque journal de construction. Ils sont stockés ici:

~/.gradle/daemon/X.X/daemon-XXXX.out.log

"XX" est la version gradle utilisée, comme "4.4", et "XXXX" ne sont que des nombres aléatoires, comme "1234".

La taille totale peut atteindre plusieurs centaines de Mo en quelques mois seulement . Il n'y a aucun moyen de désactiver la journalisation, et les fichiers ne sont pas supprimés automatiquement et ils n'ont pas vraiment besoin d'être conservés.

Mais vous pouvez créer une petite tâche gradle pour les supprimer automatiquement et libérer beaucoup d'espace disque:

Ajoutez ceci à votre app/build.gradle:

android {

    buildTypes {
        ...
    }

    // Delete large build log files from ~/.gradle/daemon/X.X/daemon-XXX.out.log
    // Source: https://discuss.gradle.org/t/gradle-daemon-produces-a-lot-of-logs/9905
    def gradle = project.getGradle()
    new File("${gradle.getGradleUserHomeDir().getAbsolutePath()}/daemon/${gradle.getGradleVersion()}").listFiles().each {
        if (it.getName().endsWith('.out.log')) {
            // println("Deleting gradle log file: $it") // Optional debug output
            it.delete()
        }
    }
}

Pour voir quels fichiers sont supprimés, vous pouvez voir la sortie de débogage dans Android Studio -> Affichage -> Fenêtres d'outils -> Créer. Appuyez ensuite sur le bouton «Basculer la vue» sur cette fenêtre pour afficher la sortie de texte.

Notez qu'une synchronisation Gradle ou n'importe quelle génération Gradle déclenchera les suppressions de fichiers.

Une meilleure façon serait de déplacer automatiquement les fichiers vers la Corbeille / Corbeille, ou au moins de les copier dans un dossier Corbeille en premier. Mais je ne sais pas comment faire ça.

Mr-IDE
la source
Pour envoyer des éléments OSX dans le Finder / Corbeille au lieu de les supprimer directement, ce message semble avoir de nombreuses bonnes idées apple.stackexchange.com/questions/50844/…
AnneTheAgile
4

il semble y avoir des informations incorrectes publiées ici. certaines personnes rapportent sur la façon de vider le cache du générateur Android (avec tâche cleanBuildCache) mais ne semblent pas se rendre compte que ce cache est indépendant du cache de construction de Gradle, AFAIK.

ma compréhension est que le cache d'Android est antérieur (et inspiré) à Gradle, mais je peux me tromper. si le constructeur Android sera / a été mis à jour pour utiliser le cache de Gradle et retirer le sien, je ne sais pas.

EDIT: le cache du générateur Android est obsolète et a été supprimé. le plugin Android Gradle utilise désormais le cache de construction de Gradle. pour contrôler ce cache, vous devez maintenant interagir avec l'infrastructure de cache générique de Gradle.

CONSEIL: recherchez l'aide en ligne de Gradle sur le cache sans mentionner le mot clé 'android' pour obtenir de l'aide sur le cache actuellement pertinent.

EDIT 2: en raison de la question de tir38 dans un commentaire ci-dessous, je teste en utilisant un projet de plugin Android Gradle v3.4.2. le cache gradle est activé par org.gradle.caching=truein gradle.properties. je fais quelques clean buildet la deuxième fois la plupart des tâches montrent FROM-CACHEleur statut, montrant que le cache fonctionne.

étonnamment, j'ai une cleanBuildCachetâche gradle et un <user-home>/.android/build-cache/3.4.2/répertoire, tous deux faisant allusion à l'existence d'un cache de générateur Android.

j'exécute cleanBuildCacheet le 3.4.2/répertoire est parti. ensuite j'en fais un autre clean build:

  • rien n'a changé: la plupart des tâches s'affichent FROM-CACHEcomme leur état et la construction est terminée à des vitesses activées pour le cache.
  • le 3.4.2/répertoire est recréé.
  • le 3.4.2/répertoire est vide (sauf pour 2 fichiers de marqueurs de longueur nulle cachés).

conclusions:

  1. la mise en cache de toutes les tâches normales du générateur Android est gérée par Gradle.
  2. l'exécution cleanBuildCachen'efface ni n'affecte en aucune façon le cache de génération.
  3. il y a toujours un cache de générateur Android. cela pourrait être un code résiduel que l'équipe de construction Android a oublié de supprimer, ou cela pourrait en fait mettre en cache quelque chose d'étrange qui, pour une raison quelconque, n'a pas ou ne peut pas être porté à l'aide du cache Gradle. (L'option «ne peut pas» étant hautement améliorable, à mon humble avis.)

Ensuite, je désactiver le cache Gradle en retirant org.gradle.caching=truede gradle.propertieset j'essayer quelques clean build:

  • les builds sont lents.
  • toutes les tâches affichent leur statut comme étant exécutées et non mises en cache ou à jour.
  • le 3.4.2/répertoire reste vide.

plus de conclusions:

  1. il n'y a pas de secours pour le cache du générateur Android lorsque le cache Gradle ne parvient pas à atteindre.
  2. le cache du générateur Android, au moins pour les tâches courantes, a en effet été supprimé comme je l'ai dit précédemment.
  3. le document android correspondant contient des informations obsolètes. en particulier, le cache n'est pas activé par défaut comme indiqué ici, et le cache Gradle doit être activé manuellement.

EDIT 3: l'utilisateur tir38 a confirmé que le cache du générateur Android est obsolète et a été supprimé avec cette découverte . tir38 a également créé ce problème . Merci!

Lanchon
la source
Pouvez-vous indiquer où vous lisez que le cache du générateur Android est désormais obsolète et qu'il utilise désormais le cache de génération de Gradle?
tir38
@ tir38, non. mais j'ai mis à jour ma réponse ci-dessus avec mes propres tests. Merci.
Lanchon
Merci beaucoup pour votre recherche assidue. Vous confirmez la plupart de ce que j'ai vu en test aussi: 1. 3.4.2/dir vide . 2. présence de la cleanBuildCachetâche 3. la désactivation du cache de génération gradle et la reconstruction n'ont montré aucune preuve de tâches Android touchant le cache.
tir38
2
Un peu plus de piquer et j'ai obtenu la confirmation réelle que le cache de construction d'Android est / a été roulé dans issuetracker.google.com/issues/37324009#comment3 J'ai ouvert une demande de document pour supprimer cette page de document: issuetracker.google.com/issues/148169019
tir38
2

Commander: rm -rf ~/.gradle/caches/

Zinan Xing
la source
1
@JonAdams Je vous demande pardon, mais la question indique clairement "Comment vider le cache Gradle?"
Serj Ardovic