657 Stimmen

Wie leere ich den Gradle-Cache?

Ich versuche Android Studio zu benutzen, und beim ersten Start dauert es etwa 45 Minuten zu kompilieren... Wenn ich die Anwendung nicht beende, ist es in Ordnung - jede nachfolgende Kompilierung/Ausführung der App dauert ungefähr 45 Sekunden.

Ich habe versucht, einige meiner Caches zu überprüfen: Es gibt einen .gradle/caches Ordner in meinem Home-Verzeichnis und er enthält 123 MB.

Es gibt auch einen .gradle Ordner in meinem Projektordner... eines der taskArtifacts war etwa 200 MB groß. Ich habe Angst, sie einfach zufällig zu löschen. Welche Teile der Ordner können sicher gelöscht werden?

Gibt es eine bessere Erklärung dafür, warum mein Android Studio eine Ewigkeit braucht, um die gradle assemble Aufgabe beim ersten Laden der Anwendung auszuführen?

Muss ich auch den IntelliJ-Cache leeren?

15voto

Mr-IDE Punkte 5695

Der Gradle-Daemon erstellt auch viele große Textdateien für jedes einzelne Build-Protokoll. Sie werden hier gespeichert:

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

"X.X" ist die verwendete Gradle-Version, wie "7.5", und "XXXX" sind einfach nur zufällige Zahlen, wie "1234". "~" ist Ihr Benutzer $HOME Ordner.

Die Gesamtgröße kann in nur wenigen Monaten auf mehrere hundert MB anwachsen. Es gibt keine Möglichkeit, das Protokollieren zu deaktivieren. Die Dateien werden nicht automatisch gelöscht und müssen nicht unbedingt aufbewahrt werden.

Sie können jedoch eine kleine Gradle-Aufgabe erstellen, um sie automatisch zu löschen und so viel Festplattenspeicher freizugeben:

Fügen Sie dies zu Ihrer app/build.gradle hinzu:

android {

    buildTypes {
        ...
    }

    // Löscht große Build-Protokolldateien aus ~/.gradle/daemon/X.X/daemon-XXX.out.log
    // Quelle 1: https://discuss.gradle.org/t/gradle-daemon-produces-a-lot-of-logs/9905
    // Quelle 2: https://stackoverflow.com/questions/23025433/how-to-clear-gradle-cache#51479044
    def gradle = project.getGradle()
    new File("${gradle.getGradleUserHomeDir().getAbsolutePath()}/daemon/${gradle.getGradleVersion()}").listFiles().each {
        if (it.getName().endsWith('.out.log')) {
            // println("Lösche Gradle-Protokolldatei: $it") // Optionale Debug-Ausgabe
            it.delete()
        }
    }
}

Um zu sehen, welche Dateien gelöscht werden, können Sie die println()-Zeile aktivieren und dann die Debug-Ausgabe in Android Studio -> Ansicht -> Werkzeugfenster -> Build sehen. Drücken Sie dann auf die Schaltfläche "Ansicht umschalten" in diesem Fenster, um die Textausgabe anzuzeigen.

Beachten Sie, dass ein Gradle-Synchronisierungs- oder ein beliebiges Gradle-Build die Dateilöschungen auslösen wird.

Ein besserer Weg wäre es, die Dateien automatisch in den Papierkorb zu verschieben oder zumindest zuerst in einen Papierkorbordner zu kopieren. Aber ich weiß nicht, wie das geht.

13voto

Lanchon Punkte 344

Es scheint hier falsche Informationen zu geben. Einige Leute berichten darüber, wie sie den Android-Builder-Cache löschen (mit der Aufgabe cleanBuildCache), erkennen aber anscheinend nicht, dass dieser Cache unabhängig vom Gradle-Build-Cache ist, soweit ich weiß.

Mein Verständnis ist, dass der Android-Cache vor dem Gradle-Cache (und hat diesen inspiriert) existierte, aber ich könnte falsch liegen. Ob der Android-Builder aktualisiert wird/wurde, um Gradles Cache zu verwenden und seinen eigenen zu ersetzen, weiß ich nicht.

BEARBEITEN: Der Android-Builder-Cache ist veraltet und wurde beseitigt. Das Android Gradle Plugin verwendet jetzt stattdessen den Gradle-Build-Cache. Um diesen Cache zu kontrollieren, müssen Sie jetzt mit der generischen Cache-Infrastruktur von Gradle interagieren.

TIPP: Suchen Sie online nach Hilfe zum Gradle-Cache, ohne das Schlüsselwort 'android' zu erwähnen, um Hilfe für den aktuell relevanten Cache zu erhalten.

BEARBEITEN 2: Aufgrund der Frage von tir38 in einem Kommentar unten teste ich ein Projekt mit Android Gradle Plugin v3.4.2. Der Gradle-Cache wird durch org.gradle.caching=true in gradle.properties aktiviert. Ich führe ein paar clean build aus und beim zweiten Mal zeigen die meisten Aufgaben den Status FROM-CACHE an, was zeigt, dass der Cache funktioniert.

Überraschenderweise habe ich eine cleanBuildCache Gradle-Aufgabe und ein /.android/build-cache/3.4.2/-Verzeichnis, die beide auf die Existenz eines Android-Builder-Caches hinweisen.

Ich führe cleanBuildCache aus und das 3.4.2/-Verzeichnis verschwindet. Als Nächstes führe ich einen weiteren clean build durch:

  • nichts hat sich geändert: Die meisten Aufgaben zeigen den Status FROM-CACHE an und der Build wurde mit aktiviertem Cache in schneller Geschwindigkeit abgeschlossen.
  • Das 3.4.2/-Verzeichnis wird neu erstellt.
  • Das 3.4.2/-Verzeichnis ist leer (außer 2 versteckten, null Länge markierenden Dateien).

Schlussfolgerungen:

  1. Das Cachen aller normalen Android-Builder-Aufgaben wird von Gradle behandelt.
  2. Das Ausführen von cleanBuildCache löscht oder beeinflusst den Build-Cache in keiner Weise.
  3. Es gibt immer noch einen Android-Builder-Cache. Dies könnte ein Überbleibsel von Code sein, das das Android-Buildteam vergessen hat zu entfernen, oder es könnte tatsächlich etwas Seltsames cachen, das aus irgendeinem Grund nicht auf den Gradle-Cache portiert wurde oder kann. (Die 'kann nicht' -Option ist meiner Meinung nach sehr unwahrscheinlich.)

Als Nächstes deaktiviere ich den Gradle-Cache, indem ich org.gradle.caching=true aus gradle.properties entferne, und ich versuche ein paar clean build:

  • Die Builds sind langsam.
  • Alle Aufgaben zeigen an, dass sie ausgeführt werden und nicht gecached oder aktuell sind.
  • Das 3.4.2/-Verzeichnis bleibt leer.

Weitere Schlussfolgerungen:

  1. Es gibt keinen Android-Builder-Cache-Fallback, wenn der Gradle-Cache nicht greift.
  2. Der Android-Builder-Cache wurde zumindest für alltägliche Aufgaben tatsächlich, wie ich zuvor angegeben habe, beseitigt.
  3. Das relevante Android-Dokument enthält veraltete Informationen. Insbesondere ist der Cache, wie dort angegeben, nicht standardmäßig aktiviert, und der Gradle-Cache muss manuell aktiviert werden.

BEARBEITEN 3: Benutzer tir38 bestätigte, dass der Android-Builder-Cache veraltet ist und mit diesem Fund beseitigt wurde. tir38 hat auch diese Ausgabe erstellt. Vielen Dank!

4voto

GnanaJeyam Punkte 2491

Für Mac- oder Linux-Benutzer:

Um einen Cache für ein bestimmtes Projekt/Jar zu löschen:

Finden Sie alle Cache-Dateien, die mit diesem Projekt zusammenhängen

find ~/.gradle/caches -name your-project-artifact-id

Der obige Befehl gibt alle Cache-Dateien zurück, die mit your-project-artifact-id (z.B. com.google) zusammenhängen.

Geben Sie den Pfad jedes Ergebnisses an den folgenden Befehl weiter:

rm -rf 

Schließlich, um die neuesten Artefakte zu laden, führen Sie dies aus:

gradle clean install

Aktualisierung:

Einzeiler zum Löschen des Caches:

for file in `find ~/.gradle/caches -name yourprojectartifactid`; do `rm -rf $file`; done

3voto

cV2 Punkte 5646

Neuester Befehl:

--no-build-cache

Gefunden unter: https://docs.gradle.org/current/userguide/build_cache.html Funktioniert perfekt für einen Befehl wie:

./gradlew SomeApp:installDebug --no-build-cache

1voto

Trake Vital Punkte 759

Dieser Artikel "Put your Android Studio on a diet" hat sehr geholfen, wie hier empfohlen hier

Für diejenigen, die eine schnelle Lösung suchen, klicken Sie auf: Datei > Caches ungültig machen Neustart

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X