¿Cómo borrar gradle cache?

320

Estoy tratando de usar Android Studio, y la primera vez que lo inicio, se tarda unos 45 MINUTOS en compilar ... Si no salgo de la aplicación, está bien, cada compilación / ejecución posterior tomará la aplicación Alrededor de 45 segundos.

He intentado verificar algunos de mis cachés: hay una .gradle/cachescarpeta en mi directorio de inicio y contiene 123 MB.

También hay una .gradlecarpeta en mi carpeta de proyecto ... una de ellas taskArtifactsera como 200 MB. Tengo miedo de dispararles al azar a ambos. ¿Qué partes de las carpetas son seguras para eliminar?

¿Existe una mejor explicación de por qué mi Android Studio tarda una eternidad en ejecutar la gradle assembletarea la primera vez que cargo la aplicación?

¿También tengo que borrar el caché intellij también?

David T.
fuente
3
Más tarde descubrí que los 45 minutos para compilar es porque cambié la configuración para Compiler -> Gradleque no Use in-process build. nada que ver con el caché
David T.
Ninguna de las respuestas ayudó. Resulta que algunas imágenes se corrompieron. Abrir las imágenes en el Explorador de Windows muestra rápidamente qué imágenes están dañadas (aquellas para las que no carga las vistas previas). Reemplazó esas imágenes y listo!
Bimde
@ david-t ¿Podría señalar el paradero de esta opción? Tengo la versión 3.3.1 pero no puedo encontrarla en Preferencias - Compilación, Ejecución, Implementación
Leo

Respuestas:

262

Como @ Bradford20000 señaló en los comentarios, puede haber un gradle.propertiesarchivo así como scripts globales de gradle ubicados debajo $HOME/.gradle. En tal caso, se debe prestar especial atención al eliminar el contenido de este directorio.

El .gradle/cachesdirectorio contiene el Gradlecaché de compilación. Entonces, si tiene algún error sobre la memoria caché de compilación, puede eliminarla.

Ópalo
fuente
43
Una cosa a tener en cuenta es que si tiene un archivo gradle.properties en su carpeta .gradle en su directorio de inicio, no querrá eliminar toda la carpeta. Por lo general, solo eliminar .gradle / caches es suficiente para que Gradle vuelva a descargar todas las dependencias.
Bradford2000
1
Con cada actualización de Android Studio, las compilaciones de Gradle parecen ser cada vez más lentas. ¿Por qué es que cuando realizo la implementación en el dispositivo, dejo de ejecutar la aplicación y luego la vuelvo a implementar (sin tocar ningún código) que el estudio de Android una vez más demora 2 minutos en hacer una compilación e implementarla. Es jodidamente loco.
Somewhere Somewhere
1
En Android Studio para limpiar las cachés del sistema: menú principal de Android stdio, elija Archivo | Invalidar cachés / reiniciar.y menú de compilación> proyecto limpio
Shomu
367

Gradle cache se ubica en

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

Puede buscar estos directorios y eliminarlos manualmente o ejecutar

rm -rf $HOME/.gradle/caches/

en el sistema Unix. Ejecutar este comando también obligará a descargar dependencias.

Actualización 2: borre el caché de compilación de Android del proyecto actual

Nota: Archivo de Android Studio | Invalidar cachés / reiniciar no borra el caché de compilación de Android, por lo que tendrá que limpiarlo por separado.

En Windows:

gradlew cleanBuildCache

En Mac o Linux:

./gradlew cleanBuildCache
Bao Le
fuente
20
Esto no borró el caché de una dependencia maven. Eliminé la biblioteca del repositorio de Maven e invalidé los cachés de Android Studio, pero el proyecto aún se construye. Esto significa que la memoria caché de Gradle para la dependencia de Maven no se borra.
mattm
2
La forma que describió solo limpiará la caché del proyecto principal y sus dependencias del proyecto, pero las dependencias de la biblioteca están intactas. Describió cómo limpiar el caché de AndroidStudio, pero no el caché de gradle.
Leandroid
Sí, pero esto no aparece en Mac antes de cargar el proyecto.
milosmns
todavía funciona bien en la última versión de Android Studio
Raju yourPepe el
2
si desea limpiar y limpiar el caché, ejecute ambas tareas:gradlew clean cleanBuildCache
equiman
62

EDITAR: cleanBuildCache ya no funciona

El complemento Android Gradle ahora utiliza la función de caché Gradle

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

PARA LIMPIAR LA CACHÉ

Limpie el directorio de caché para evitar cualquier impacto de compilaciones anteriores

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

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

OTRAS DIGRESIONES

ver aquí (incluidas ediciones).

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

INFORMACIÓN OBSOLETA:

La solución más nueva usando la tarea gradle

cleanBuildCache

disponible a través del complemento de Android para Gradle, revisión 2.3.0 (febrero de 2017)

Dependencias:

  1. Gradle 3.3 o superior.
  2. Herramientas de compilación 25.0.0 o superior.

mas en:

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

antecedentes

Construir caché:

almacena ciertas salidas que el complemento de Android genera al compilar su proyecto (como AAR sin empaquetar y dependencias remotas predeterminadas). Sus compilaciones limpias son mucho más rápidas mientras usa el caché porque el sistema de compilación simplemente puede reutilizar esos archivos almacenados en caché durante las compilaciones posteriores, en lugar de recrearlos. Los proyectos que usan el complemento de Android 2.3.0 y versiones posteriores usan el caché de compilación de forma predeterminada. Para obtener más información, lea Mejorar la velocidad de compilación con Build Cache.

Nota: La tarea cleanBuildCache no está disponible si deshabilita la memoria caché de compilación.

uso:

ventanas

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 son archivos específicos del sistema que contienen scripts; consulte la información del sistema para ejecutar el 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
fuente
43

Tenga cuidado con gradle daemon, debe detenerlo antes de despejar y volver a ejecutar gradle.

Para el primer demonio:

./gradlew --stop

Limpiar caché usando:

rm -rf ~/.gradle/caches/

Corre de nuevo tu compilación

rresino
fuente
¿Puede explicar por qué o vincular a alguna documentación sobre esto?
tir38
1
Si su gradle daemon se está ejecutando, sus cachés de gradle estarán en uso. En consecuencia, su sistema operativo probablemente evitará la eliminación.
0x539
6

El gradle daemon también crea muchos archivos de texto grandes de cada registro de compilación. Se almacenan aquí:

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

"XX" es la versión gradle en uso, como "4.4", y "XXXX" son solo números aleatorios, como "1234".

El tamaño total puede crecer hasta varios cientos de MB en solo unos meses . No hay forma de deshabilitar el registro, y los archivos no se eliminan automáticamente y realmente no es necesario retenerlos.

Pero puede crear una pequeña tarea gradle para eliminarlos automáticamente y liberar mucho espacio en disco:

Agregue esto a su 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()
        }
    }
}

Para ver qué archivos se están eliminando, puede ver la salida de depuración en Android Studio -> Ver -> Herramienta Windows -> Compilar. Luego presione el botón "Alternar vista" en esa ventana para mostrar la salida de texto.

Tenga en cuenta que Gradle Sync o cualquier Gradle Build activará la eliminación de archivos.

Una mejor manera sería mover automáticamente los archivos a la Papelera / Papelera de reciclaje, o al menos copiarlos primero a una carpeta Papelera. Pero no sé cómo hacer eso.

Mr-IDE
fuente
Para enviar elementos OSX al buscador / papelera en lugar de eliminarlos directamente, esta publicación parece tener muchas buenas ideas apple.stackexchange.com/questions/50844/…
AnneTheAgile
4

Parece que hay información incorrecta publicada aquí. algunas personas informan sobre cómo borrar la memoria caché del generador de Android (con la tareacleanBuildCache ) pero no parecen darse cuenta de que dicha memoria caché es independiente de la memoria caché de compilación de Gradle, AFAIK.

Entiendo que el caché de Android es anterior (e inspirado) al de Gradle, pero podría estar equivocado. si el generador de Android será / fue actualizado para usar el caché de Gradle y retirar el suyo, no lo sé.

EDITAR: el caché del generador de Android está obsoleto y se ha eliminado. el complemento Android Gradle ahora usa el caché de compilación de Gradle. para controlar este caché, ahora debe interactuar con la infraestructura genérica de caché de Gradle.

SUGERENCIA: busque la ayuda de caché de Gradle en línea sin mencionar la palabra clave 'android' para obtener ayuda para el caché relevante actualmente.

EDIT 2: debido a la pregunta de tir38 en un comentario a continuación, estoy probando usando un proyecto de Android Gradle plugin v3.4.2. el caché de gradle está habilitado por org.gradle.caching=trueen gradle.properties. Hago un par de clean buildy la segunda vez que la mayoría de las tareas se muestran FROM-CACHEcomo su estado, lo que muestra que el caché está funcionando.

Sorprendentemente, tengo una cleanBuildCachetarea gradle y un <user-home>/.android/build-cache/3.4.2/directorio, ambos insinuando la existencia de una memoria caché de Android.

ejecuto cleanBuildCachey el 3.4.2/directorio se ha ido. a continuación hago otro clean build:

  • nada cambió: la mayoría de las tareas se muestran FROM-CACHEcomo su estado y la compilación se completó a velocidades habilitadas para caché.
  • El 3.4.2/directorio es recreado.
  • el 3.4.2/directorio está vacío (guarde para 2 archivos de marcador ocultos de longitud cero).

conclusiones:

  1. Gradle maneja el almacenamiento en caché de todas las tareas normales del generador de Android.
  2. la ejecución cleanBuildCacheno borra ni afecta el caché de compilación de ninguna manera.
  3. Todavía hay un caché del generador de Android allí. esto podría ser un código vestigial que el equipo de compilación de Android olvidó eliminar, o podría almacenar algo extraño que, por cualquier motivo, no se ha transferido o no se puede transferir al caché de Gradle. (La opción "no se puede" es altamente mejorable, en mi humilde opinión).

siguiente, i desactivar el caché Gradle mediante la eliminación org.gradle.caching=truede gradle.propertiese intento un par de clean build:

  • Las construcciones son lentas.
  • todas las tareas muestran su estado como ejecutado y no almacenado en caché o actualizado.
  • El 3.4.2/directorio continúa vacío.

más conclusiones:

  1. no hay reserva de memoria caché del generador de Android para cuando la memoria caché de Gradle no alcanza.
  2. el caché del generador de Android, al menos para tareas comunes, de hecho se ha eliminado como dije antes.
  3. el documento relevante de Android contiene información desactualizada. en particular, la memoria caché no está habilitada de manera predeterminada como se indica allí, y la memoria caché de Gradle debe habilitarse manualmente.

EDIT 3: el usuario tir38 confirmó que el caché del generador de Android está obsoleto y se ha eliminado con este hallazgo . tir38 también creó este problema . ¡Gracias!

Lanchon
fuente
¿Puedes enlazar a donde leíste que el caché del generador de Android ahora está obsoleto y que ahora usa el caché de compilación de Gradle?
tir38
@ tir38, no. pero actualicé mi respuesta anterior con mis propias pruebas. Gracias.
Lanchon
Muchas gracias por su diligente investigación. Usted confirma la mayor parte de lo que vi en las pruebas también: 1. 3.4.2/directorio vacío . 2. presencia de la cleanBuildCachetarea 3. deshabilitar la memoria caché de construcción de gradle y la reconstrucción no mostraron ninguna evidencia de que las tareas de Android golpeen la memoria caché.
tir38
2
Un poco más de búsqueda y obtuve una confirmación real de que la memoria caché de compilación de Android está / fue incorporada en el issuetracker.google.com/issues/37324009#comment3 de gradle . Abrí una solicitud de documento para eliminar esa página de documento: issuetracker.google.com/issues/148169019
tir38
2

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

Zinan Xing
fuente
1
@JonAdams Perdón, pero la pregunta dice claramente "¿Cómo borrar el caché de gradle?"
Serj Ardovic