Come cancellare la cache gradle?


320

Sto provando a utilizzare Android Studio e la prima volta che lo avvio, ci vogliono 45 minuti per compilare ... Se non esco dall'applicazione, va bene - ogni compilazione / esecuzione successiva richiederà circa 45 secondi.

Ho provato a controllare alcune delle mie cache: c'è una .gradle/cachescartella nella mia home directory e contiene 123 MB.

C'è anche una .gradlecartella nella cartella del mio progetto ... una delle taskArtifactsera come 200 MB. Ho paura di nuotare casualmente su entrambi. Quali parti delle cartelle sono sicure da eliminare?

C'è una spiegazione migliore del perché il mio Android Studio impiega un'eternità per eseguire l' gradle assembleattività al primo caricamento dell'applicazione?

Devo anche cancellare la cache di Intellij?


3
ho scoperto in seguito che i 45 minuti da compilare sono perché ho cambiato le impostazioni per Compiler -> Gradlenon farlo Use in-process build. niente a che fare con la cache
David T.

Nessuna delle risposte ha aiutato. Si scopre che alcune immagini sono state corrotte. L'apertura delle immagini in Esplora risorse mostra rapidamente quali immagini sono danneggiate (quelle per cui non carica le anteprime). Sostituito quelle immagini e voilà!
Bimde,

@ David-t Potresti indicare dove si trova questa opzione? Ho la versione 3.3.1 ma non la trovo in Preferenze - Build, Execution, Deployment
Leo

Risposte:


262

Come ha sottolineato @ Bradford20000 nei commenti, potrebbero esserci un gradle.propertiesfile e degli script globali di valutazione situati sotto $HOME/.gradle. In tal caso, è necessario prestare particolare attenzione all'eliminazione del contenuto di questa directory.

La .gradle/cachesdirectory contiene la Gradlecache di build. Quindi, se hai qualche errore sulla build cache, puoi eliminarla.


43
Una cosa da notare è che se hai un file gradle.properties nella tua cartella .gradle nella tua home directory, non vorrai eliminare l'intera cartella. In genere, basta eliminare .gradle / cache per far sì che Gradle scarichi nuovamente tutte le dipendenze.
Bradford

1
con ogni aggiornamento di Android Studio, le build graduali sembrano diventare sempre più lente. Perché quando eseguo la distribuzione sul dispositivo, interrompi l'esecuzione dell'app e quindi eseguo di nuovo la distribuzione (senza toccare alcun codice!) Che Android Studio impiega di nuovo 2 minuti per creare e distribuire. È un bel frutto.
Someone Somewhere

1
Su Android Studio per ripulire le cache di sistema: menu principale Android stdio, scegli File | Cache / Riavvio non validi e menu di creazione> progetto pulito
Shomu,

367

La cache dei gradi si trova in

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

È possibile accedere a queste directory ed eliminarle manualmente o eseguirle

rm -rf $HOME/.gradle/caches/

sul sistema Unix. Esegui questo comando forzerà anche il download delle dipendenze.

Aggiornamento 2: cancella la cache di build Android del progetto corrente

Nota: File di Android Studio | La cache / riavvio non validi non cancella la cache di build di Android, quindi dovrai pulirla separatamente.

Su Windows:

gradlew cleanBuildCache

Su Mac o Linux:

./gradlew cleanBuildCache

20
Ciò non ha cancellato la cache di una dipendenza maven. Ho eliminato la libreria dal repository maven e ho invalidato le cache di Android Studio, ma il progetto continua a essere compilato. Ciò significa che la cache gradle per la dipendenza maven non viene cancellata.
mattm,

2
Il modo in cui hai descritto pulirà solo la cache dal progetto principale e dalle dipendenze del progetto, ma le dipendenze della libreria sono intatte. Hai descritto come pulire la cache di AndroidStudio, ma non la cache di Gradle.
Leandroid,

Sì, ma questo non appare su Mac prima di caricare il progetto.
milosmns,

funziona ancora bene sull'ultima versione di Android Studio
Raju yourPepe,

2
se vuoi cache pulita e pulita, esegui entrambe le attività:gradlew clean cleanBuildCache
equiman

62

EDIT: cleanBuildCache non funziona più

Il plug-in Android Gradle ora utilizza la funzionalità Cache Gradle

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

PER CANCELLARE CACHE

Pulisci la directory della cache per evitare hit da build precedenti

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

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

ALTRE DIGRESSIONI

vedi qui (comprese le modifiche).

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

INFORMAZIONI OSSOLETE:

La soluzione più recente che utilizza l'attività gradle

cleanBuildCache

disponibile tramite plug-in Android per Gradle, revisione 2.3.0 (febbraio 2017)

dipendenze:

  1. Grado 3.3 o superiore.
  2. Build Tools 25.0.0 o versione successiva.

più a:

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

sfondo

Crea cache:

memorizza alcuni output generati dal plug-in Android durante la creazione del progetto (come AAR non compressi e dipendenze remote predefinite). Le build pulite sono molto più veloci durante l'utilizzo della cache poiché il sistema di build può semplicemente riutilizzare i file memorizzati nella cache durante le build successive, invece di ricrearli. I progetti che utilizzano il plug-in Android 2.3.0 e versioni successive utilizzano la cache di creazione per impostazione predefinita. Per saperne di più, leggi Migliora velocità di build con Build Cache.

Nota: l'attività cleanBuildCache non è disponibile se si disabilita la cache di build.

utilizzo:

finestre

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 sono file specifici del sistema che contengono script: consultare le informazioni di sistema su come eseguire lo 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

43

Abbi cura del demone Gradle, devi fermarlo prima di cancellare e rieseguire Gradle.

Ferma il primo demone:

./gradlew --stop

Pulisci la cache usando:

rm -rf ~/.gradle/caches/

Esegui di nuovo la tua compilation


Puoi spiegare perché o link ad alcuni documenti su questo?
tir38

1
Se il demone Gradle è in esecuzione, saranno in uso le cache Gradle. Di conseguenza, è probabile che il sistema operativo impedisca l'eliminazione.
0x539

6

Il demone gradle crea anche molti file di testo di grandi dimensioni di ogni singolo registro di build. Sono memorizzati qui:

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

"XX" è la versione graduale in uso, come "4.4", e "XXXX" sono solo numeri casuali, come "1234".

La dimensione totale può arrivare a diverse centinaia di MB in pochi mesi . Non è possibile disabilitare la registrazione e i file non vengono eliminati automaticamente e non è necessario conservarli.

Ma puoi creare una piccola attività gradle per eliminarli automaticamente e liberare molto spazio su disco:

Aggiungi questo al tuo 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()
        }
    }
}

Per vedere quali file vengono eliminati, puoi vedere l'output di debug in Android Studio -> Visualizza -> Strumenti di Windows -> Crea. Quindi premere il pulsante "Attiva / disattiva vista" su quella finestra per mostrare l'output del testo.

Si noti che una sincronizzazione dei gradi o qualsiasi build dei gradi attiveranno le eliminazioni dei file.

Un modo migliore sarebbe spostare automaticamente i file nel Cestino / Cestino, o almeno copiarli prima in una cartella Cestino. Ma non so come farlo.


Per inviare elementi OSX al finder / cestino invece di rimuoverli direttamente, questo post sembra avere molte buone idee apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

sembra che ci siano informazioni errate pubblicate qui. alcune persone segnalano come cancellare la cache del builder Android (con attività cleanBuildCache) ma non sembrano rendersi conto che detta cache è indipendente dalla cache di build di Gradle, AFAIK.

la mia comprensione è che la cache di Android precede (e ha ispirato) quella di Gradle, ma potrei sbagliarmi. non so se il costruttore Android sarà / è stato aggiornato per utilizzare la cache di Gradle e ritirarne la propria.

EDIT: la cache del builder Android è obsoleta ed è stata eliminata. il plug-in Android Gradle ora utilizza invece la cache di build di Gradle. per controllare questa cache è ora necessario interagire con l'infrastruttura di cache generica di Gradle.

SUGGERIMENTO: cerca l'help della cache di Gradle online senza menzionare la parola chiave "android" per ottenere assistenza per la cache attualmente pertinente.

EDIT 2: a causa della domanda di tir38 in un commento qui sotto, sto testando usando un progetto Android Gradle plug-in v3.4.2. la cache gradle è abilitata da org.gradle.caching=truein gradle.properties. faccio un paio di volte clean builde la seconda volta la maggior parte delle attività mostra FROM-CACHEil loro stato, dimostrando che la cache funziona.

sorprendentemente, ho un cleanBuildCachecompito graduale e una <user-home>/.android/build-cache/3.4.2/directory, entrambi suggerendo l'esistenza di una cache del generatore Android.

eseguo cleanBuildCachee la 3.4.2/directory è sparita. poi ne faccio un altro clean build:

  • non è cambiato nulla: la maggior parte delle attività viene visualizzata FROM-CACHEcome stato e build completata a velocità abilitate per la cache.
  • la 3.4.2/directory viene ricreata.
  • la 3.4.2/directory è vuota (salva per 2 file di marker nascosti a lunghezza zero).

conclusioni:

  1. la memorizzazione nella cache di tutte le normali attività del builder Android è gestita da Gradle.
  2. l'esecuzione cleanBuildCachenon cancella o influenza la cache di compilazione in alcun modo.
  3. c'è ancora una cache del generatore Android lì. questo potrebbe essere un codice rudimentale che il team di build di Android ha dimenticato di rimuovere, oppure potrebbe effettivamente memorizzare nella cache qualcosa di strano che, per qualsiasi motivo, non è stato o non può essere trasferito utilizzando la cache Gradle. (l'opzione 'impossibile' essendo altamente migliorabile, IMHO.)

successivamente, disabilito la cache Gradle rimuovendo org.gradle.caching=trueda gradle.propertiese provo un paio di clean build:

  • le build sono lente.
  • tutte le attività mostrano il loro stato come eseguito e non memorizzato nella cache o aggiornato.
  • la 3.4.2/directory continua a essere vuota.

più conclusioni:

  1. non esiste un fallback della cache del builder Android per quando la cache Gradle non riesce a colpire.
  2. la cache del builder Android, almeno per le attività più comuni, è stata effettivamente eliminata, come ho detto prima.
  3. il relativo documento Android contiene informazioni obsolete. in particolare la cache non è abilitata per impostazione predefinita come indicato qui, e la cache Gradle deve essere abilitata manualmente.

EDIT 3: l'utente tir38 ha confermato che la cache del builder Android è obsoleta ed è stata eliminata con questa ricerca . tir38 ha anche creato questo problema . Grazie!


Puoi collegarti a dove leggi che la cache del builder Android è ormai obsoleta e che ora utilizza invece la cache di build di Gradle?
tir38

@ tir38, no. ma ho aggiornato la mia risposta sopra con i miei test. Grazie.
Lanchon,

Grazie mille per la tua diligente ricerca. Confermo la maggior parte di ciò che ho visto anche durante i test: 1. vuoto 3.4.2/dir. 2. presenza dell'attività cleanBuildCache3. la disabilitazione della cache di build gradle e la ricostruzione non hanno mostrato alcuna evidenza di attività Android che colpiscono la cache.
tir38,

2
Un altro po 'di frugando e ho ottenuto l'effettiva conferma che la cache di build di Android è / è stata inserita in issuetracker.google.com/issues/37324009#comment3 di Gradle Ho aperto una richiesta di documento per rimuovere quella pagina di documento: issuetracker.google.com/issues/148169019
tir38,

2

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


1
@JonAdams Chiedo scusa, ma la domanda indica chiaramente "Come cancellare la cache gradle?"
Serj Ardovic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.