Gradle önbellek nasıl temizlenir?


318

Android Studio'yu kullanmaya çalışıyorum ve ilk başlattığımda, derlemek 45 DAKİKA gibi sürüyor ... Uygulamayı bırakmazsam, sorun değil - sonraki her derleme / uygulamayı çalıştıracak yaklaşık 45 saniye.

Bazı önbelleklerimi kontrol etmeye çalıştım: .gradle/cachesana dizinimde bir klasör var ve 123 MB içeriyor.

Ayrıca .gradleproje klasörümde bir klasör var ... biri taskArtifacts200 MB gibiydi. İkisine de rastgele rastlamaktan korkuyorum. Klasörlerin hangi bölümlerini silmek güvenli?

Android Studio'mun gradle assembleuygulamayı ilk kez yükledikten sonra görevi neden sonsuza kadar sürdüğüne dair daha iyi bir açıklama var mı ?

Ayrıca intellij önbelleğini de temizlemem gerekir mi?


3
daha sonra derlemek için 45 dakika Compiler -> Gradleolduğunu değil ayarları değiştirildi olduğunu öğrendim Use in-process build. önbellekle ilgisi yok
David T.

Cevapların hiçbiri işe yaramadı. Bazı görüntüler bozuldu. Görüntüleri Windows Gezgini'nde açmak, hangi görüntülerin bozuk olduğunu (önizlemelerini yüklemediklerini) hızla gösterir. Bu görüntüler ve voila!
Ağustos'ta Bimde

@ david-t Bu seçeneğin bulunduğu yere işaret edebilir misiniz? 3.3.1 sürümüne sahibim, ancak Tercihler - Derleme, Yürütme, Dağıtım
Leo

Yanıtlar:


261

@ Bradford20000'ün yorumlarda belirttiği gibi, gradle.propertiesaltında bir dosya ve küresel gradle komut dosyaları bulunabilir $HOME/.gradle. Bu durumda, bu dizinin içeriği silinirken özel dikkat gösterilmelidir.

.gradle/cachesDizin tutan Gradleinşa önbelleği. Bu nedenle derleme önbelleği hakkında herhangi bir hatayla karşılaşırsanız silebilirsiniz.


43
Dikkat edilmesi gereken bir şey, ana dizininizdeki .gradle klasörünüzde bir gradle.properties dosyanız varsa, tüm klasörü silmek istemeyeceğinizdir. Tipik olarak, sadece .gradle / önbellekleri silmek, Gradle'ın tüm bağımlılıkları yeniden indirmesini sağlamak için yeterlidir.
Bradford2000

1
Android Studio'daki her güncellemeyle, gradle sürümleri yavaşlıyor ve yavaşlıyor. Neden cihaza dağıtıldığımda, uygulamanın çalışmasını durdurduğumda ve sonra tekrar (herhangi bir koda dokunmadan) dağıttığımda Android stüdyosunun bir derleme yapmak ve dağıtmak için bir kez daha 2 dakika sürdüğü. Bu friggin nutz.
Birisi

1
Sistem önbelleklerini temizlemek için Android Studio'da: Android stdio ana menüsü Dosya | Önbellekleri
Geçersiz Kıl / Yeniden Başlat. Ve

368

Dereceli önbellek

  • Windows'ta: %USER_HOME%\.gradle/caches/
  • Mac / Unix'te: ~/.gradle/caches/

Bu dizine göz atabilir ve manuel olarak silebilir veya çalıştırabilirsiniz.

rm -rf $HOME/.gradle/caches/

Unix sisteminde. Bu komutu çalıştırmak, bağımlılıkları indirmeye de zorlar.

Güncelleme 2: Mevcut projenin Android derleme önbelleğini temizle

Not: Android Studio'nun Dosyası | Geçersiz Önbellek / Yeniden Başlatma , Android derleme önbelleğini temizlemediğinden ayrı olarak temizlemeniz gerekir.

Windows'ta:

gradlew cleanBuildCache

Mac veya Linux'ta:

./gradlew cleanBuildCache

20
Bu, maven bağımlılığının önbelleğini temizlemedi. Kütüphaneyi maven deposundan sildim ve Android Studio önbelleklerini geçersiz kıldım, ancak proje hala oluşturuluyor. Bu, maven bağımlılığı için gradle önbelleğinin temizlenmediği anlamına gelir.
mattm

2
Tanımladığınız yol, yalnızca ana projedeki önbelleği ve proje bağımlılıklarını temizleyecektir, ancak kitaplık bağımlılıkları olduğu gibi kalır. AndroidStudio'nun önbelleğini nasıl temizleyeceğinizi açıkladınız, ancak sınıfın önbelleğini temizlemediniz.
Leandroid

Evet, ancak projeyi yüklemeden önce Mac'te bu görünmüyor.
milosm

en son Android Studio'da hala iyi çalışıyor
Raju yourPepe

2
temiz ve temiz önbellek istiyorsanız, her iki görevi de çalıştırın:gradlew clean cleanBuildCache
equiman

62

EDIT: cleanBuildCache artık çalışmıyor

android gradle eklentisi artık gradle önbellek özelliğini kullanıyor

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

ÖNBELLEKİ TEMİZLEME

Önceki derlemelerdeki isabetlerden kaçınmak için önbellek dizinini temizleyin

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

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

DİĞER DİGRESYONLAR

buraya bakın (düzenlemeler dahil).

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

OBSOLETE BİLGİLERİ:

Gradle görevini kullanarak en yeni çözüm

cleanBuildCache

Gradle, revizyon 2.3.0 için android eklentisi aracılığıyla kullanılabilir (Şubat 2017)

Bağımlılıklar:

  1. Sınıf 3.3 veya üstü.
  2. Derleme Araçları 25.0.0 veya üstü.

Daha fazla:

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

arka fon

Önbellek oluştur:

Android eklentisinin projenizi oluştururken ürettiği belirli çıktıları saklar (paketlenmemiş AAR'lar ve önceden ayrılmış uzaktan bağımlılıklar gibi). Önbellek kullanılırken temiz yapılarınız çok daha hızlıdır çünkü derleme sistemi, önbelleğe alınan dosyaları sonraki derlemeler sırasında yeniden oluşturmak yerine yalnızca yeniden kullanabilir. Android eklentisi 2.3.0 ve üzerini kullanan projeler varsayılan olarak derleme önbelleğini kullanır. Daha fazla bilgi edinmek için Derleme Önbelleği ile Derleme Hızını Artırma konusunu okuyun.

Not: Derleme önbelleğini devre dışı bırakırsanız cleanBuildCache görevi kullanılamaz.

kullanımı:

pencereler

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 

** not / gradlew komut dosyaları içeren sisteme özgü dosyalardır - lütfen komut dosyasının nasıl çalıştırılacağına ilişkin sistem bilgilerine bakın

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

43

Gradle daemon ile ilgilenin, temiz ve tekrar çalıştırmak önce önce durdurmanız gerekir.

İlk arka plan programı durdur:

./gradlew --stop

Önbelleği kullanarak temizle:

rm -rf ~/.gradle/caches/

Tekrar koş sen derleme


Bu konudaki neden bazı dokümanları açıklayabilir veya bunlara bağlantı verebilir misiniz?
tir38

1
Gradle daemon'unuz çalışıyorsa gradle önbellekleriniz kullanımda olacaktır. Sonuç olarak, işletim sisteminiz muhtemelen silinmeyi önleyecektir.
0x539

6

Gradle daemon her derleme günlüğünden çok sayıda büyük metin dosyası oluşturur. Burada saklanırlar:

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

"XX", kullanılan "4.4" gibi derecelendirilmiş sürümdür ve "XXXX", "1234" gibi rastgele sayılardır.

Toplam boyut sadece birkaç ay içinde birkaç yüz MB'ye kadar büyüyebilir . Günlüğe kaydetmeyi devre dışı bırakmanın bir yolu yoktur ve dosyalar otomatik olarak silinmez ve gerçekten tutulmaları gerekmez.

Ancak otomatik olarak silmek için küçük bir not oluşturma görevi oluşturabilir ve çok fazla disk alanı boşaltabilirsiniz:

Bunu şu adrese ekleyin 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()
        }
    }
}

Hangi dosyaların silinmekte olduğunu görmek için Android Studio -> Görünüm -> Araç Pencereleri -> Derleme'de hata ayıklama çıktısını görebilirsiniz. Ardından, metin çıktısını göstermek için o pencerede "Görünümü Değiştir" düğmesine basın.

Bir Gradle Sync'in veya herhangi bir Gradle Build'ın dosya silmelerini tetikleyeceğini unutmayın.

Daha iyi bir yol, dosyaları otomatik olarak Çöp Kutusu / Geri Dönüşüm Kutusu'na taşımak veya en azından önce bir Çöp Kutusu klasörüne kopyalamaktır. Ama bunu nasıl yapacağımı bilmiyorum.


OSX öğelerini doğrudan kaldırmak yerine bulucuya / çöp kutusuna göndermek için bu yayında apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

burada yanlış bilgi yayınlanmış gibi görünüyor. bazı insanlar Android oluşturucu önbelleğini (görevle cleanBuildCache) nasıl temizleyeceklerini bildiriyor ancak söz konusu önbelleğin Gradle'ın derleme önbelleği AFAIK'tan bağımsız olduğunu fark etmiyor gibi görünüyor.

benim anlayışım Android önbelleğinin Gradle'dan önce geldiği (ve esinlendiği) ama yanlış olabilirim. Android oluşturucunun Gradle'ın önbelleğini kullanmak ve kendi emekliyi kullanacak şekilde güncellenip güncellenmeyeceğini bilmiyorum.

EDIT: Android oluşturucu önbellek eski ve elendi. Android Gradle eklentisi artık Gradle'ın derleme önbelleğini kullanıyor. bu önbelleği kontrol etmek için artık Gradle'ın genel önbellek altyapısıyla etkileşime girmelisiniz.

İPUCU: şu anda alakalı önbellek için yardım almak için 'android' anahtar kelimesinden bahsetmeden Gradle'ın önbellek yardımını çevrimiçi arayın.

EDIT 2: aşağıdaki yorumda tir38'in soru nedeniyle, ben bir Android Gradle eklentisi v3.4.2 projesi kullanarak test ediyorum. org.gradle.caching=truesınıf önbellek tarafından etkinleştirilir gradle.properties. i bir çift yapmak clean buildve ikinci kez çoğu görev FROM-CACHEdurumu olarak, önbellek çalıştığını gösteren göstermek.

Şaşırtıcı bir şekilde, hem Android oluşturucu önbelleğinin varlığını ima eden bir cleanBuildCachegradle görevi ve bir <user-home>/.android/build-cache/3.4.2/dizini var.

i yürütmek cleanBuildCacheve 3.4.2/dizin gitti. sonra başka bir şey yapıyorum clean build:

  • hiçbir şey değişmedi: görevlerin çoğu FROM-CACHEdurum olarak gösterilir ve derleme önbellek etkinleştirilmiş hızlarda tamamlanır.
  • 3.4.2/Dizin yeniden oluşturulur.
  • 3.4.2/Dizin boş (2 kişinin, sıfır uzunluk işaretleyici dosyaları gizli kaydet).

sonuçlar:

  1. tüm normal Android oluşturucu görevlerinin önbelleğe alınması Gradle tarafından gerçekleştirilir.
  2. yürütme cleanBuildCachederleme önbelleğini hiçbir şekilde temizlemez veya etkilemez.
  3. Orada hala bir Android oluşturucu önbelleği var. bu, Android oluşturma ekibinin kaldırmayı unuttuğu uygun bir kod olabilir veya Gradle önbelleğini kullanarak herhangi bir nedenden dolayı taşınamayan veya taşınamayan garip bir şeyi önbelleğe alabilir. ('yapılamaz' seçeneği son derece geliştirilebilir, IMHO.)

Bir sonraki i kaldırarak Gradle önbelleği devre dışı org.gradle.caching=truegelen gradle.propertiesve ben bir çift deneyin clean build:

  • yapılar yavaş.
  • tüm görevler durumlarını yürütülüyor ve önbelleğe alınmamış veya güncel olarak gösteriyor.
  • 3.4.2/dizin boş olmaya devam ediyor.

daha fazla sonuç:

  1. Gradle önbellek isabet edemediğinde Android oluşturucu önbellek yedeği yoktur.
  2. Android oluşturucu önbelleği, en azından ortak görevler için, daha önce de belirttiğim gibi elimine edildi.
  3. ilgili android doc güncel olmayan bilgiler içeriyor. özellikle önbellek burada belirtildiği gibi varsayılan olarak etkinleştirilmez ve Gradle önbelleğinin manuel olarak etkinleştirilmesi gerekir.

DÜZENLEME 3: kullanıcı tir38 Android oluşturucu önbellek kullanılmıyor ve birlikte ortadan kalkmıştır doğruladı bu bulmak . tir38 de bu sorunu yarattı . Teşekkürler!


Android oluşturucu önbelleğinin artık kullanılmadığını ve artık bunun yerine Gradle'ın derleme önbelleğini kullandığını okuyabiliyor musunuz?
tir38

@ tir38, hayır. ama yukarıdaki cevabımı kendi testimle güncelledim. Teşekkürler.
Lanchon

Özenli araştırmanız için teşekkür ederiz. Testte gördüklerimin çoğunu da onaylıyorsunuz: 1. boş 3.4.2/yön. 2. cleanBuildCachegörev varlığı 3. çakıl inşa önbellek ve yeniden oluşturma devre dışı bırakma android görevler önbellek isabet herhangi bir kanıt göstermedi.
tir38

2
Biraz daha alay ediyor ve android'in yapı önbelleğinin gradle'ın issuetracker.google.com/issues/37324009#comment3 haline getirildiğine dair gerçek bir onay aldım : Bu doküman sayfasını kaldırmak için bir belge isteği açtım: issuetracker.google.com/issues/148169019
tir38

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.