Bagaimana cara menghapus cache gradle?

320

Saya mencoba menggunakan Android Studio, dan pertama kali saya mem-boot-nya, dibutuhkan waktu 45 MENIT untuk mengkompilasi ... Jika saya tidak keluar dari aplikasi, tidak apa-apa - setiap kompilasi / menjalankan selanjutnya akan memerlukan aplikasi sekitar 45 detik.

Saya sudah mencoba memeriksa beberapa cache saya: ada .gradle/cachesfolder di direktori home saya, dan itu berisi 123 MB.

Ada juga .gradlefolder di folder proyek saya ... salah taskArtifactssatunya seperti 200 MB. Saya takut untuk hanya secara acak nuke mereka berdua. Bagian mana dari folder yang aman untuk dihapus?

Apakah ada penjelasan yang lebih baik mengapa Android Studio saya membutuhkan waktu lama untuk menjalankan gradle assembletugas saat pertama kali memuat aplikasi?

Apakah saya juga harus menghapus cache intellij?

David T.
sumber
3
Saya menemukan kemudian bahwa 45 menit untuk mengkompilasi adalah karena saya mengubah pengaturan untuk Compiler -> Gradletidak Use in-process build. tidak ada hubungannya dengan cache
David T.
Tidak ada jawaban yang membantu. Ternyata beberapa gambar rusak. Membuka gambar di Windows Explorer dengan cepat menunjukkan gambar mana yang rusak (yang tidak memuat pratinjau untuk). Mengganti gambar dan voila itu!
Bimde
@ david-t Bisakah Anda menunjukkan keberadaan opsi ini? Saya memiliki versi 3.3.1 tetapi tidak dapat menemukannya di Preferensi - Build, Execution, Deployment
Leo

Jawaban:

262

Seperti @ Bradford20000 tunjukkan dalam komentar, mungkin ada gradle.propertiesfile serta skrip gradle global yang terletak di bawah $HOME/.gradle. Dalam hal demikian, perhatian khusus harus diberikan ketika menghapus konten direktori ini.

The .gradle/cachesdirektori memegang Gradlecache yang membangun. Jadi, jika Anda memiliki kesalahan tentang build cache, Anda dapat menghapusnya.

Opal
sumber
43
Satu hal yang perlu diperhatikan adalah bahwa jika Anda memiliki file properti gradle.prop di folder .gradle Anda di direktori home Anda, Anda tidak akan ingin menghapus seluruh folder. Biasanya, hanya menghapus .gradle / cache sudah cukup untuk membuat Gradle mengunduh ulang semua dependensi.
Bradford2000
1
dengan setiap pembaruan ke Android Studio, build gradle tampaknya semakin lambat. Mengapa ketika saya menyebarkan ke perangkat, berhenti menjalankan aplikasi, dan kemudian menyebarkan lagi (tanpa menyentuh kode sama sekali!) Bahwa studio Android sekali lagi membutuhkan waktu 2 menit untuk membuat dan menerapkannya. Ini benar-benar gila.
Seseorang di suatu tempat
1
Di Android Studio untuk membersihkan cache sistem: Menu utama Android stdio, pilih File | Batalkan Cache / Restart.and menu bangun> proyek bersih
Shomu
367

Cache Gradle terletak di

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

Anda dapat menjelajah ke direktori ini dan menghapusnya secara manual atau menjalankannya

rm -rf $HOME/.gradle/caches/

pada sistem Unix. Jalankan perintah ini juga akan memaksa untuk mengunduh dependensi.

Pembaruan 2: Bersihkan cache build Android dari proyek saat ini

Catatan: File Android Studio | Cache / Restart tidak valid tidak menghapus cache build Android, jadi Anda harus membersihkannya secara terpisah.

Di Windows:

gradlew cleanBuildCache

Di Mac atau Linux:

./gradlew cleanBuildCache
Bao Le
sumber
20
Ini tidak menghapus cache ketergantungan maven. Saya menghapus perpustakaan dari repositori maven dan membatalkan cache Android Studio, tetapi proyek masih membangun. Ini berarti cache gradle untuk ketergantungan pakar tidak dihapus.
mattm
2
Cara yang Anda gambarkan hanya akan membersihkan cache dari proyek utama dan dependensi proyeknya, tetapi dependensi pustaka masih utuh. Anda menjelaskan cara membersihkan cache AndroidStudio, tetapi tidak cache gradle.
Leandroid
Ya, tapi ini tidak muncul di Mac sebelum saya memuat proyek.
milosmns
itu masih bekerja dengan baik pada versi terbaru Android Studio
Raju yourPepe
2
jika Anda ingin membersihkan dan membersihkan cache, jalankan kedua tugas:gradlew clean cleanBuildCache
equiman
62

EDIT: cleanBuildCache tidak lagi berfungsi

Plugin android gradle sekarang menggunakan fitur cache gradle

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

UNTUK MEMBERSIHKAN CACHE

Bersihkan direktori cache untuk menghindari hit dari build sebelumnya

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

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

DIGRESI LAINNYA

lihat di sini (termasuk suntingan).

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

INFO OBSOLETE:

Solusi terbaru menggunakan tugas gradle

cleanBuildCache

tersedia melalui plugin android untuk Gradle, revisi 2.3.0 (Februari 2017)

Ketergantungan:

  1. Gradle 3.3 atau lebih tinggi.
  2. Alat Bangun 25.0.0 atau lebih tinggi.

lebih lanjut di:

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

Latar Belakang

Bangun cache:

menyimpan output tertentu yang dihasilkan oleh plugin Android saat membangun proyek Anda (seperti AAR yang tidak dikemas dan dependensi jarak jauh yang sudah ditentukan sebelumnya). Build bersih Anda jauh lebih cepat saat menggunakan cache karena sistem build hanya dapat menggunakan kembali file-file yang di-cache selama build berikutnya, alih-alih membuatnya kembali. Proyek menggunakan plugin Android 2.3.0 dan lebih tinggi menggunakan cache build secara default. Untuk mempelajari lebih lanjut, baca Tingkatkan Kecepatan Build dengan Build Cache.

Catatan: Tugas cleanBuildCache tidak tersedia jika Anda menonaktifkan build cache.

pemakaian:

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 adalah file khusus sistem yang berisi skrip - silakan lihat info sistem cara menjalankan skrip

  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
sumber
43

Hati-hati dengan daemon gradle, Anda harus menghentikannya sebelum membersihkan dan menjalankan gradle.

Hentikan daemon pertama:

./gradlew --stop

Bersihkan cache menggunakan:

rm -rf ~/.gradle/caches/

Jalankan lagi kompilasi Anda

rresino
sumber
Bisakah Anda menjelaskan mengapa atau tautan ke beberapa dokumentasi tentang ini?
tir38
1
Jika daemon gradle Anda berjalan, cache gradle Anda akan digunakan. Akibatnya, OS Anda kemungkinan akan mencegah penghapusan.
0x539
6

Daemon gradle juga membuat banyak file teks besar dari setiap log build tunggal. Mereka disimpan di sini:

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

"XX" adalah versi gradle yang digunakan, seperti "4.4", dan "XXXX" hanyalah angka acak, seperti "1234".

Ukuran total dapat tumbuh hingga beberapa ratus MB hanya dalam beberapa bulan . Tidak ada cara untuk menonaktifkan pencatatan, dan file tidak secara otomatis dihapus dan mereka tidak benar-benar perlu dipertahankan.

Tetapi Anda dapat membuat tugas gradle kecil untuk menghapusnya secara otomatis , dan membebaskan banyak ruang disk:

Tambahkan ini ke Anda 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()
        }
    }
}

Untuk melihat file mana yang sedang dihapus, Anda dapat melihat output debug di Android Studio -> View -> Tool Windows -> Build. Kemudian tekan tombol "Toggle View" pada jendela itu untuk menampilkan output teks.

Perhatikan bahwa Sync Gradle atau Gradle Build apa pun akan memicu penghapusan file.

Cara yang lebih baik adalah memindahkan file secara otomatis ke Trash / Recycle Bin, atau paling tidak menyalinnya ke folder Trash terlebih dahulu. Tetapi saya tidak tahu bagaimana melakukannya.

Tuan-IDE
sumber
Untuk mengirim OSX item ke finder / sampah bukannya langsung menghapus, posting ini tampaknya memiliki banyak ide yang baik apple.stackexchange.com/questions/50844/...
AnneTheAgile
4

tampaknya ada info yang salah diposting di sini. beberapa orang melaporkan cara menghapus cache builder Android (dengan tugas cleanBuildCache) tetapi tampaknya tidak menyadari bahwa cache tersebut tidak tergantung pada cache build Gradle, AFAIK.

pemahaman saya adalah bahwa cache Android mendahului (dan mengilhami) Gradle, tetapi saya bisa saja salah. apakah pembuat Android akan / telah diperbarui untuk menggunakan cache Gradle dan pensiun sendiri, saya tidak tahu.

EDIT: cache builder Android sudah usang dan telah dihilangkan. plugin Android Gradle sekarang menggunakan cache build Gradle sebagai gantinya. untuk mengontrol cache ini, Anda sekarang harus berinteraksi dengan infrastruktur cache generik Gradle.

TIP: cari bantuan cache Gradle online tanpa menyebutkan kata kunci 'android' untuk mendapatkan bantuan untuk cache yang saat ini relevan.

EDIT 2: karena pertanyaan tir38 dalam komentar di bawah, saya menguji menggunakan proyek Android Gradle v3.4.2. cache gradle diaktifkan oleh org.gradle.caching=truedi gradle.properties. saya melakukan beberapa clean builddan kedua kalinya sebagian besar tugas menunjukkan FROM-CACHEstatusnya, menunjukkan bahwa cache berfungsi.

mengejutkan, saya punya cleanBuildCachetugas gradle dan <user-home>/.android/build-cache/3.4.2/direktori, keduanya mengisyaratkan keberadaan cache pembangun Android.

saya jalankan cleanBuildCachedan 3.4.2/direktori hilang. selanjutnya saya lakukan yang lain clean build:

  • tidak ada yang berubah: sebagian besar tugas ditampilkan FROM-CACHEsebagai status dan bangunan selesai dengan kecepatan yang didukung cache.
  • yang 3.4.2/direktori diciptakan.
  • yang 3.4.2/direktori kosong (Simpan untuk 2 tersembunyi, nol file panjang penanda).

kesimpulan:

  1. caching semua tugas pembangun Android normal ditangani oleh Gradle.
  2. mengeksekusi cleanBuildCachetidak menghapus atau memengaruhi cache build dengan cara apa pun.
  3. masih ada cache pembangun Android di sana. ini bisa menjadi kode peninggalan yang lupa dihapus oleh tim pembuat Android, atau bisa juga menembolok sesuatu yang aneh karena alasan apa pun belum atau tidak dapat diangkut menggunakan cache Gradle. (opsi 'tidak bisa' menjadi sangat diperbaiki, IMHO.)

selanjutnya, saya menonaktifkan cache Gradle dengan menghapus org.gradle.caching=truedari gradle.propertiesdan saya mencoba beberapa clean build:

  • build-nya lambat.
  • semua tugas menunjukkan statusnya sebagai dieksekusi dan tidak di-cache atau terbaru.
  • yang 3.4.2/direktori terus menjadi kosong.

lebih banyak kesimpulan:

  1. tidak ada cadangan cache builder Android ketika cache Gradle gagal mengenai.
  2. cache pembangun Android, setidaknya untuk tugas-tugas umum, memang telah dihilangkan seperti yang saya katakan sebelumnya.
  3. dokumen android yang relevan berisi info yang sudah usang. khususnya cache tidak diaktifkan secara default seperti yang dinyatakan di sana, dan cache Gradle harus diaktifkan secara manual.

EDIT 3: user tir38 mengonfirmasi bahwa cache builder Android sudah usang dan telah dihilangkan dengan temuan ini . tir38 juga membuat masalah ini . Terima kasih!

Lanchon
sumber
Dapatkah Anda menautkan ke tempat Anda membaca bahwa cache builder Android sekarang sudah usang dan sekarang menggunakan cache build Gradle sebagai gantinya?
tir38
@ tir38, tidak. tetapi saya memperbarui jawaban saya di atas dengan pengujian saya sendiri. Terima kasih.
Lanchon
Terima kasih banyak atas penelitian rajin Anda. Anda mengkonfirmasi sebagian besar dari apa yang saya lihat dalam pengujian juga: 1. 3.4.2/dir kosong . 2. kehadiran cleanBuildCachetugas 3. menonaktifkan cache build gradle dan membangun kembali tidak menunjukkan bukti tugas android yang memukul cache.
tir38
2
Sedikit lebih menyodok dan saya mendapat konfirmasi sebenarnya bahwa cache build Android adalah / dimasukkan ke issuetracker.google.com/issues/37324009#comment3 gradle. Saya membuka permintaan doc untuk menghapus halaman doc: issuetracker.google.com/issues/148169019
tir38
2

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

Zinan Xing
sumber
1
@ JonAdams Saya mohon maaf, tetapi pertanyaannya dengan jelas menyatakan "Bagaimana cara menghapus cache gradle?"
Serj Ardovic