Jak wyczyścić pamięć podręczną stopni?


317

Próbuję użyć Android Studio i przy pierwszym uruchomieniu go kompilacja zajmuje około 45 MINUT ... Jeśli nie zamknę aplikacji, jest w porządku - każda kolejna kompilacja / uruchomienie aplikacji zajmie około 45 sekund.

Próbowałem sprawdzić niektóre z moich pamięci podręcznych: .gradle/cachesw moim katalogu domowym znajduje się folder, który zawiera 123 MB.

W .gradlefolderze mojego projektu jest także folder ... jeden z nich taskArtifactsmiał rozmiar około 200 MB. Obawiam się, że losowo ich oburzę. Które części folderów można bezpiecznie usunąć?

Czy jest lepsze wytłumaczenie, dlaczego moje Android Studio uruchamia gradle assemblezadanie po pierwszym załadowaniu aplikacji?

Czy muszę też wyczyścić pamięć podręczną intellij?


3
dowiedziałem się później, że 45 minut na kompilację wynika z tego, że zmieniłem ustawienia na Compiler -> Gradlenie Use in-process build. nie ma nic wspólnego z pamięcią podręczną
David T.

Żadna z odpowiedzi nie pomogła. Okazało się, że niektóre obrazy uległy uszkodzeniu. Otwarcie obrazów w Eksploratorze Windows szybko pokazuje, które obrazy są uszkodzone (te, dla których nie ładuje podglądów). Zastąpiłem te zdjęcia i voila!
Bimde,

@ david-t Czy możesz wskazać miejsce pobytu tej opcji? Mam wersję 3.3.1, ale nie mogę jej znaleźć w Preferencjach - Kompilacja, wykonanie, wdrożenie
Leo

Odpowiedzi:


261

Jak zauważył @ Bradford20000 w komentarzach, może znajdować się gradle.propertiesplik, a także globalne skrypty oceny $HOME/.gradle. W takim przypadku należy zwrócić szczególną uwagę podczas usuwania zawartości tego katalogu.

.gradle/cachesKatalog posiada Gradlepamięć podręczną kompilacji. Więc jeśli masz jakiś błąd dotyczący kompilacji pamięci podręcznej, możesz ją usunąć.


43
Należy zauważyć, że jeśli masz plik gradle.properties w folderze .gradle w katalogu domowym, nie będziesz chciał usuwać całego folderu. Zazwyczaj samo usunięcie pliku .gradle / cache wystarczy, aby Gradle ponownie pobrał wszystkie zależności.
Bradford2000,

1
z każdą aktualizacją Android Studio kompilacje stopni wydają się coraz wolniejsze. Dlaczego po wdrożeniu na urządzeniu zatrzymuję działanie aplikacji, a następnie wdrażam ponownie (bez dotykania żadnego kodu!), Że Android Studio ponownie zajmuje 2 minuty, aby skompilować i wdrożyć. To pieprzone orzechy.
Ktoś gdzieś

1
W Android Studio, aby wyczyścić pamięć podręczną systemu: Menu główne Android stdio, wybierz Plik | Unieważnij pamięć podręczną / uruchom ponownie. I skompiluj menu> czysty projekt
Shomu

367

Pamięć podręczna stopniowania lokalizuje się na

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

Możesz przejść do tego katalogu i ręcznie go usunąć lub uruchomić

rm -rf $HOME/.gradle/caches/

w systemie Unix. Uruchom to polecenie wymusi również pobranie zależności.

Aktualizacja 2: Wyczyść pamięć podręczną kompilacji systemu Android dla bieżącego projektu

Uwaga: plik Android Studio | Nieprawidłowa pamięć podręczna / ponowne uruchomienie nie usuwa pamięci podręcznej kompilacji systemu Android, więc musisz wyczyścić ją osobno.

W systemie Windows:

gradlew cleanBuildCache

W systemie Mac lub Linux:

./gradlew cleanBuildCache

20
Nie wyczyściło pamięci podręcznej zależności od maven. Usunąłem bibliotekę z repozytorium maven i unieważniłem pamięć podręczną Android Studio, ale projekt nadal się buduje. Oznacza to, że pamięć podręczna stopni dla zależności od maven nie jest czyszczona.
mattm

2
Opisany sposób wyczyści pamięć podręczną tylko z głównego projektu i jego zależności projektowych, ale zależności biblioteki są nienaruszone. Opisałeś, jak wyczyścić pamięć podręczną AndroidStudio, ale nie pamięć podręczną gradle.
Leandroid

Tak, ale nie pojawia się to na komputerze Mac przed załadowaniem projektu.
milosmns

nadal działa dobrze w najnowszej wersji Android Studio
Raju yourPepe

2
jeśli chcesz wyczyścić i wyczyścić pamięć podręczną, uruchom oba zadania:gradlew clean cleanBuildCache
equiman

62

EDYCJA: cleanBuildCache już nie działa

Wtyczka gradle dla Androida wykorzystuje teraz funkcję pamięci podręcznej gradle

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

ABY WYCZYŚĆ DACH

Wyczyść katalog pamięci podręcznej, aby uniknąć trafień z poprzednich kompilacji

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

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

INNE DIGRESJE

patrz tutaj (w tym zmiany).

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

INFORMACJE OBSOLETOWE:

Najnowsze rozwiązanie wykorzystujące zadanie stopniowe

cleanBuildCache

dostępny za pośrednictwem wtyczki Android do wersji Gradle, wersja 2.3.0 (luty 2017)

Zależności:

  1. Stopień 3.3 lub wyższy.
  2. Narzędzia kompilacji w wersji 25.0.0 lub nowszej.

Więcej w:

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

tło

Zbuduj pamięć podręczną:

przechowuje pewne dane wyjściowe, które wtyczka Android generuje podczas budowania projektu (takie jak nieopakowane AAR i wstępnie zdeklarowane zależności zdalne). Twoje czyste kompilacje są znacznie szybsze podczas korzystania z pamięci podręcznej, ponieważ system kompilacji może po prostu ponownie użyć tych buforowanych plików podczas kolejnych kompilacji, zamiast je odtwarzać. Projekty korzystające z wtyczki Android 2.3.0 i wyższej domyślnie używają pamięci podręcznej kompilacji. Aby dowiedzieć się więcej, przeczytaj artykuł Popraw szybkość kompilacji dzięki pamięci podręcznej kompilacji.

Uwaga: Zadanie cleanBuildCache nie jest dostępne, jeśli wyłączysz pamięć podręczną kompilacji.

stosowanie:

Windows

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 to specyficzne dla systemu pliki zawierające skrypty - zobacz informacje o systemie, jak wykonać skrypt

  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

Uważaj na demona gradle, musisz go zatrzymać przed wyczyszczeniem i ponownie uruchomić gradle.

Zatrzymaj pierwszego demona:

./gradlew --stop

Wyczyść pamięć podręczną, używając:

rm -rf ~/.gradle/caches/

Uruchom ponownie kompilację


Czy możesz wyjaśnić, dlaczego lub link do dokumentacji na ten temat?
tir38

1
Jeśli uruchomiony jest demon gradle, używane będą pamięci podręczne gradle. W związku z tym Twój system operacyjny prawdopodobnie uniemożliwi usunięcie.
0x539

6

Demon gradle tworzy także wiele dużych plików tekstowych każdego dziennika kompilacji. Są tutaj przechowywane:

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

„XX” to używana wersja stopniowa, na przykład „4.4”, a „XXXX” to tylko liczby losowe, na przykład „1234”.

Całkowity rozmiar może wzrosnąć do kilkuset MB w ciągu zaledwie kilku miesięcy . Nie ma możliwości wyłączenia rejestrowania, a pliki nie są automatycznie usuwane i nie trzeba ich tak naprawdę zatrzymywać.

Ale możesz utworzyć małe zadanie stopniowe, aby automatycznie je usunąć i zwolnić dużo miejsca na dysku:

Dodaj to do 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()
        }
    }
}

Aby zobaczyć, które pliki są usuwane, możesz zobaczyć wyniki debugowania w Android Studio -> Widok -> Narzędzie Windows -> Kompilacja. Następnie naciśnij przycisk „Przełącz widok” w tym oknie, aby wyświetlić tekst.

Zauważ, że Gradle Sync lub dowolna kompilacja Gradle wyzwoli usuwanie plików.

Lepszym sposobem byłoby automatyczne przeniesienie plików do Kosza / Kosza lub przynajmniej skopiowanie ich najpierw do folderu Kosz. Ale nie wiem jak to zrobić.


Aby wysłać elementy OSX do wyszukiwarki / kosza zamiast bezpośrednio usuwać, ten post wydaje się mieć wiele dobrych pomysłów apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

wydaje się, że zamieszczono tutaj nieprawidłowe informacje. niektóre osoby informują o tym, jak wyczyścić pamięć podręczną konstruktora Androida (z zadaniem cleanBuildCache), ale nie zdają sobie sprawy, że wspomniana pamięć podręczna jest niezależna od pamięci podręcznej kompilacji Gradle, AFAIK.

rozumiem, że pamięć podręczna Androida wyprzedza (i zainspirowała) pamięć Gradle, ale mogę się mylić. czy konstruktor Androida zostanie / został zaktualizowany, aby używać pamięci podręcznej Gradle i wycofywać własną, nie wiem.

EDYCJA: pamięć podręczna konstruktora Androida jest przestarzała i została wyeliminowana. wtyczka Gradle dla Androida używa teraz pamięci podręcznej kompilacji Gradle. aby kontrolować tę pamięć podręczną, musisz teraz wchodzić w interakcje z ogólną infrastrukturą pamięci podręcznej Gradle.

WSKAZÓWKA: wyszukaj w trybie online pomoc dla pamięci podręcznej Gradle'a, nie wspominając o słowie kluczowym „android”, aby uzyskać pomoc dotyczącą aktualnie odpowiedniej pamięci podręcznej.

EDYCJA 2: z powodu pytania tir38 w komentarzu poniżej testuję przy użyciu projektu wtyczki Gradle dla Androida w wersji 3.4.2. Gradle cache jest włączona org.gradle.caching=truew gradle.properties. Robię kilka razy, clean builda drugi raz pokazuje większość zadańFROM-CACHE ich status, co wskazuje, że pamięć podręczna działa.

co zaskakujące, mam cleanBuildCachezadanie stopniowania i <user-home>/.android/build-cache/3.4.2/katalog, oba świadczące o istnieniu pamięci podręcznej konstruktora Androida.

wykonuję, cleanBuildCachea 3.4.2/katalogu nie ma. następnie robię kolejne clean build:

  • nic się nie zmieniło: większość zadań pokazuje FROM-CACHEich status, a kompilacja została ukończona z szybkościami włączonymi do pamięci podręcznej.
  • 3.4.2/katalog jest odtworzony.
  • 3.4.2/katalog jest pusty (oprócz 2 ukryte pliki, zero długość znacznika).

wnioski:

  1. Buforowanie wszystkich normalnych zadań konstruktora Androida jest obsługiwane przez Gradle.
  2. wykonanie cleanBuildCachenie usuwa ani nie wpływa w żaden sposób na pamięć podręczną kompilacji.
  3. wciąż jest tam pamięć podręczna dla Androida. może to być szczątkowy kod, który zespół budujący Androida zapomniał usunąć, lub może faktycznie buforować coś dziwnego, co z jakiegokolwiek powodu nie zostało lub nie może zostać przeniesione do użycia pamięci podręcznej Gradle. (opcja „nie można” jest wysoce poprawialna, IMHO).

następnie wyłączam pamięć podręczną Gradle, usuwając org.gradle.caching=truez gradle.propertiesi próbuję kilku clean build:

  • kompilacje są powolne.
  • wszystkie zadania pokazują ich status jako wykonane, a nie w pamięci podręcznej ani na bieżąco.
  • 3.4.2/katalogu nadal jest pusta.

więcej wniosków:

  1. nie ma rezerwowej pamięci podręcznej konstruktora Androida, gdy nie uda się trafić pamięci podręcznej Gradle.
  2. pamięć podręczna konstruktora Androida, przynajmniej do typowych zadań, została rzeczywiście wyeliminowana, jak już wcześniej wspomniałem.
  3. odpowiedni dokument systemu Android zawiera nieaktualne informacje. w szczególności pamięć podręczna nie jest domyślnie włączona, jak tam stwierdzono, i pamięć podręczną Gradle należy włączyć ręcznie.

EDYCJA 3: użytkownik tir38 potwierdził, że pamięć podręczna konstruktora Androida jest przestarzała i została wyeliminowana dzięki temu znalezieniu . tir38 również stworzył ten problem . dzięki!


Czy możesz podać link do miejsca, w którym przeczytałeś, że pamięć podręczna konstruktora Androida jest już nieaktualna i że zamiast niej używa pamięci podręcznej kompilacji Gradle?
tir38

@ tir38, nie. ale zaktualizowałem powyższą odpowiedź własnymi testami. dzięki.
Lanchon

Wielkie dzięki za staranne badania. Potwierdzasz też większość tego, co widziałem podczas testów: 1. pusty 3.4.2/reż. 2. obecność cleanBuildCachezadania 3. wyłączenie pamięci podręcznej kompilacji stopni i przebudowa nie pokazała żadnych dowodów na to, że zadania Androida uderzały w pamięć podręczną.
tir38

2
Trochę więcej pokeptu i otrzymałem faktyczne potwierdzenie, że pamięć podręczna kompilacji Androida jest / została wtoczona do emitetracker.google.com/issues/37324009#comment3 gradle. Otworzyłem prośbę o usunięcie tej strony z dokumentem: Issuetracker.google.com/issues/148169019
tir38

2

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


1
@JonAdams Proszę o wybaczenie, ale pytanie wyraźnie brzmi „Jak wyczyścić pamięć podręczną stopni?”
Serj Ardovic
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.