Làm thế nào để xóa bộ nhớ cache gradle?


319

Tôi đang cố gắng sử dụng Android Studio và lần đầu tiên tôi khởi động nó, phải mất 45 PHÚT để biên dịch ... Nếu tôi không thoát khỏi ứng dụng thì không sao - mỗi lần biên dịch / chạy ứng dụng tiếp theo sẽ mất khoảng 45 giây.

Tôi đã thử kiểm tra một số bộ nhớ cache của mình: có một .gradle/cachesthư mục trong thư mục nhà của tôi và nó chứa 123 MB.

Ngoài ra còn có một .gradlethư mục trong thư mục dự án của tôi ... một trong số đó taskArtifactslà 200 MB. Tôi sợ chỉ ngẫu nhiên nuke cả hai. Những phần nào của các thư mục là an toàn để xóa?

Có lời giải thích nào tốt hơn cho lý do tại sao Android Studio của tôi mất nhiều gradle assemblethời gian để chạy tác vụ khi lần đầu tải ứng dụng không?

Tôi cũng phải xóa bộ nhớ cache intellij chứ?


3
Sau đó tôi phát hiện ra rằng 45 phút để biên dịch là do tôi đã thay đổi cài đặt Compiler -> Gradlethành không Use in-process build. không có gì để làm với bộ đệm
David T.

Không có câu trả lời nào giúp được. Hóa ra một số hình ảnh đã bị hỏng. Mở các hình ảnh trong Windows Explorer nhanh chóng cho bạn thấy những hình ảnh nào bị hỏng (những hình ảnh mà nó không tải bản xem trước cho). Thay thế những hình ảnh và voila!
Bimde

@ david-t Bạn có thể chỉ ra nơi ở của tùy chọn này không? Tôi có phiên bản 3.3.1 nhưng không thể tìm thấy nó trong Tùy chọn - Xây dựng, Thi hành, Triển khai
Leo

Câu trả lời:


261

Như @ Bradford20000 đã chỉ ra trong các bình luận, có thể có một gradle.propertiestập tin cũng như các tập lệnh phân lớp toàn cầu nằm bên dưới $HOME/.gradle. Trong trường hợp như vậy phải đặc biệt chú ý khi xóa nội dung của thư mục này.

Thư mục .gradle/cacheschứa Gradlebộ đệm xây dựng. Vì vậy, nếu bạn có bất kỳ lỗi nào về việc xây dựng bộ đệm, bạn có thể xóa nó.


43
Một điều cần lưu ý là nếu bạn có tệp gradle.properIES trong thư mục .gradle trong thư mục chính của bạn, bạn sẽ không muốn xóa toàn bộ thư mục. Thông thường, chỉ cần xóa .gradle / cache là đủ để Gradle tải lại tất cả các phụ thuộc.
Bradford2000

1
với mỗi bản cập nhật cho Android Studio, các bản dựng gradle dường như ngày càng chậm hơn. Tại sao khi tôi triển khai lên thiết bị, hãy dừng ứng dụng chạy, sau đó triển khai lại (mà không cần chạm vào bất kỳ mã nào cả!) Mà studio Android lại một lần nữa mất 2 phút để xây dựng và triển khai nó. Đó là nutz friggin.
Ai đó ở đâu đó

1
Trên Android Studio để dọn dẹp bộ đệm hệ thống: Menu chính của Android stdio, chọn Tệp | Caches / Restart.and xây dựng menu không hợp lệ> dự án sạch
Shomu

367

Lớp đệm nằm ở

  • Trên Windows: %USER_HOME%\.gradle/caches/
  • Trên máy Mac / Unix: ~/.gradle/caches/

Bạn có thể duyệt đến các thư mục này và xóa nó bằng tay hoặc chạy

rm -rf $HOME/.gradle/caches/

trên hệ thống Unix. Chạy lệnh này cũng sẽ buộc phải tải phụ thuộc.

Cập nhật 2: Xóa bộ nhớ cache xây dựng Android của dự án hiện tại

Lưu ý: Tệp của Android Studio | Bộ nhớ cache / Khởi động lại không hợp lệ không xóa bộ nhớ cache xây dựng Android, vì vậy bạn sẽ phải xóa nó một cách riêng biệt.

Trên Windows:

gradlew cleanBuildCache

Trên máy Mac hoặc Linux:

./gradlew cleanBuildCache

20
Điều này đã không xóa bộ nhớ cache của một phụ thuộc maven. Tôi đã xóa thư viện khỏi kho lưu trữ maven và vô hiệu hóa bộ đệm Android Studio, nhưng dự án vẫn được xây dựng. Điều này có nghĩa là bộ đệm cấp cho phụ thuộc maven không bị xóa.
mattm

2
Cách bạn mô tả sẽ chỉ xóa bộ đệm từ dự án chính và phụ thuộc dự án, nhưng phụ thuộc thư viện vẫn còn nguyên. Bạn đã mô tả cách xóa bộ nhớ cache của AndroidStudio, nhưng không xóa bộ đệm của bộ đệm.
Leandroid

Vâng, nhưng điều này không xuất hiện trên Mac trước khi tôi tải dự án.
milosmns

nó vẫn hoạt động tốt trên phiên bản Android Studio mới nhất
Raju yourPepe

2
nếu bạn muốn bộ nhớ cache sạch và sạch, hãy chạy cả hai tác vụ:gradlew clean cleanBuildCache
Equiman

62

EDIT: cleanBuildCache không còn hoạt động

plugin android gradle hiện sử dụng tính năng cache của gradle

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

ĐỂ CẨN THẬN

Làm sạch thư mục bộ đệm để tránh bất kỳ lần truy cập nào từ các bản dựng trước

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

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

CÁC ỨNG DỤNG KHÁC

xem tại đây (bao gồm các chỉnh sửa).

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

THÔNG TIN OBSOLLEX:

Giải pháp mới nhất sử dụng tác vụ gradle

cleanBuildCache

có sẵn thông qua plugin Android cho Gradle, phiên bản 2.3.0 (tháng 2 năm 2017)

Phụ thuộc:

  1. Lớp 3,3 trở lên.
  2. Công cụ xây dựng 25.0.0 trở lên.

hơn:

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

lý lịch

Xây dựng bộ đệm:

lưu trữ các kết quả đầu ra nhất định mà plugin Android tạo ra khi xây dựng dự án của bạn (chẳng hạn như AAR chưa được đóng gói và các phụ thuộc từ xa được xử lý trước). Các bản dựng sạch của bạn nhanh hơn nhiều trong khi sử dụng bộ đệm vì hệ thống bản dựng có thể chỉ cần sử dụng lại các tệp được lưu trong bộ nhớ cache đó trong các bản dựng tiếp theo, thay vì tạo lại chúng. Các dự án sử dụng plugin Android 2.3.0 trở lên sử dụng bộ đệm xây dựng theo mặc định. Để tìm hiểu thêm, hãy đọc Cải thiện tốc độ xây dựng với Build Cache.

Lưu ý: Tác vụ CleanBuildCache không khả dụng nếu bạn tắt bộ đệm xây dựng.

sử dụng:

các cửa sổ

gradlew cleanBuildCache

linux / mac

gradle cleanBuildCache

Studio Android / IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 

** gradle / gradlew là các tệp cụ thể của hệ thống chứa các tập lệnh - vui lòng xem thông tin hệ thống về cách thực thi tập lệnh

  1. linux - https://www.cyberciti.biz/faq/howto-run-a-script-in-linux/
  2. cửa sổ - https://technet.microsoft.com/en-us/l Library / bb613481 (v = vs85) .aspx
  3. mac https://developer.apple.com/lvern/content/documentation/LacularUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

Hãy cẩn thận với daemon gradle, bạn phải dừng nó trước khi xóa và chạy lại gradle.

Dừng daemon đầu tiên:

./gradlew --stop

Làm sạch bộ đệm bằng cách sử dụng:

rm -rf ~/.gradle/caches/

Chạy lại bạn biên dịch


Bạn có thể giải thích tại sao hoặc liên kết đến một số tài liệu về điều này?
tir38

1
Nếu trình nền lớp của bạn đang chạy bộ đệm cấp của bạn sẽ được sử dụng. Do đó, hệ điều hành của bạn có thể sẽ ngăn chặn việc xóa.
0x539

6

Trình nền lớp cũng tạo ra nhiều tệp văn bản lớn của mỗi nhật ký xây dựng. Chúng được lưu trữ ở đây:

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

"XX" là phiên bản cấp được sử dụng, như "4.4" và "XXXX" chỉ là các số ngẫu nhiên, như "1234".

Tổng kích thước có thể tăng lên vài trăm MB chỉ sau vài tháng . Không có cách nào để vô hiệu hóa việc ghi nhật ký và các tệp không tự động bị xóa và chúng không thực sự cần được giữ lại.

Nhưng bạn có thể tạo một tác vụ phân lớp nhỏ để tự động xóa chúng và giải phóng nhiều dung lượng đĩa:

Thêm phần này vào 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()
        }
    }
}

Để xem tệp nào đang bị xóa, bạn có thể xem đầu ra gỡ lỗi trong Android Studio -> Xem -> Công cụ Windows -> Xây dựng. Sau đó nhấn nút "Toggle View" trên cửa sổ đó để hiển thị đầu ra văn bản.

Lưu ý rằng Gradle Sync hoặc bất kỳ Gradle Build nào sẽ kích hoạt xóa tệp.

Cách tốt hơn là tự động di chuyển các tệp vào Thùng rác / Thùng rác hoặc ít nhất là sao chép chúng vào thư mục Thùng rác trước. Nhưng tôi không biết làm thế nào để làm điều đó.


Để gửi các mục OSX đến công cụ tìm / thùng rác thay vì xóa trực tiếp, bài đăng này dường như có nhiều ý tưởng hay apple.stackexchange.com/questions/50844/ phỏng
AnneTheAgile

4

dường như có thông tin không chính xác được đăng ở đây. một số người báo cáo về cách xóa bộ đệm của trình tạo Android (có tác vụ cleanBuildCache) nhưng dường như không nhận ra rằng bộ đệm được cho là độc lập với bộ đệm xây dựng của Gradle, AFAIK.

sự hiểu biết của tôi là bộ nhớ cache của Android có trước (và được truyền cảm hứng) Gradle, nhưng tôi có thể sai. liệu trình xây dựng Android sẽ được / được cập nhật để sử dụng bộ đệm của Gradle và tự nghỉ hưu hay không, tôi không biết.

EDIT: bộ đệm của trình tạo Android đã lỗi thời và đã bị loại bỏ. Thay vào đó, plugin Android Gradle sử dụng bộ đệm xây dựng của Gradle. để kiểm soát bộ đệm này, giờ bạn phải tương tác với cơ sở hạ tầng bộ đệm chung của Gradle.

MIPO: tìm kiếm trợ giúp bộ đệm của Gradle trực tuyến mà không đề cập đến từ khóa 'android' để nhận trợ giúp cho bộ đệm hiện có liên quan.

EDIT 2: do câu hỏi của tir38 trong một bình luận bên dưới, tôi đang thử nghiệm bằng cách sử dụng dự án Android Gradle plugin v3.4.2. bộ đệm gradle được kích hoạt bởi org.gradle.caching=truetrong gradle.properties. Tôi thực hiện một vài lần clean buildvà lần thứ hai hầu hết các tác vụ hiển thị FROM-CACHEdưới dạng trạng thái của chúng, cho thấy bộ đệm đang hoạt động.

đáng ngạc nhiên, tôi có một cleanBuildCachenhiệm vụ lớp và một <user-home>/.android/build-cache/3.4.2/thư mục, cả hai đều gợi ý sự tồn tại của bộ đệm của trình tạo Android.

Tôi thực hiện cleanBuildCache3.4.2/thư mục đã biến mất. tiếp theo tôi làm khác clean build:

  • không có gì thay đổi: hầu hết các tác vụ hiển thị FROM-CACHEdưới dạng trạng thái của chúng và quá trình xây dựng đã hoàn thành ở tốc độ kích hoạt bộ đệm.
  • các 3.4.2/thư mục được tái tạo.
  • các 3.4.2/thư mục rỗng (tiết kiệm cho 2 ẩn, zero chiều dài tập tin đánh dấu).

kết luận:

  1. bộ nhớ đệm của tất cả các tác vụ xây dựng Android bình thường được xử lý bởi Gradle.
  2. thực thi cleanBuildCachekhông xóa hoặc ảnh hưởng đến bộ đệm xây dựng theo bất kỳ cách nào.
  3. vẫn còn một bộ đệm xây dựng Android ở đó. đây có thể là mã di tích mà nhóm xây dựng Android quên xóa hoặc nó thực sự có thể lưu trữ một cái gì đó kỳ lạ mà vì bất kỳ lý do gì không hoặc không thể được chuyển sang sử dụng bộ đệm Gradle. (tùy chọn 'không thể' có tính ứng dụng cao, IMHO.)

Tiếp theo, tôi vô hiệu hóa bộ đệm Gradle bằng cách xóa org.gradle.caching=truekhỏi gradle.propertiesvà tôi thử một vài clean build:

  • các bản dựng chậm.
  • tất cả các tác vụ hiển thị trạng thái của chúng là được thực thi và không được lưu trữ hoặc cập nhật.
  • các 3.4.2/thư mục tiếp tục là sản phẩm nào.

thêm kết luận:

  1. không có dự phòng bộ đệm của trình tạo Android khi bộ đệm Gradle không thành công.
  2. bộ đệm của trình tạo Android, ít nhất là cho các tác vụ thông thường, thực sự đã bị loại bỏ như tôi đã nêu trước đây.
  3. tài liệu android có liên quan chứa thông tin lỗi thời. đặc biệt là bộ đệm không được bật theo mặc định như đã nêu ở đó và bộ đệm Gradle phải được bật thủ công.

EDIT 3: người dùng tir38 xác nhận rằng bộ đệm của trình tạo Android đã lỗi thời và đã bị loại bỏ với kết quả này . tir38 cũng tạo ra vấn đề này . cảm ơn!


Bạn có thể liên kết đến nơi bạn đọc rằng bộ đệm của trình tạo Android hiện đã lỗi thời và hiện tại nó sử dụng bộ đệm xây dựng của Gradle không?
tir38

@ tir38, không. nhưng tôi đã cập nhật câu trả lời của tôi ở trên với thử nghiệm của riêng tôi. cảm ơn.
Lanchon

Cảm ơn một bó cho nghiên cứu siêng năng của bạn. Bạn xác nhận hầu hết những gì tôi thấy trong thử nghiệm quá: 1. 3.4.2/dir trống . 2. sự hiện diện của cleanBuildCachenhiệm vụ 3. vô hiệu hóa bộ đệm xây dựng bộ đệm và xây dựng lại không hiển thị bất kỳ bằng chứng nào về các tác vụ Android nhấn bộ đệm.
tir38

2
Thêm một chút châm chọc và tôi đã nhận được xác nhận thực tế rằng bộ nhớ cache xây dựng của Android đã / được đưa vào cấp phát hành của gradleracker.google.com/issues/37324009#comment3 Tôi đã mở một yêu cầu tài liệu để xóa trang tài liệu đó: suetracker.google.com/issues/148169019
tir38

2

Chỉ huy: rm -rf ~/.gradle/caches/


1
@JonAdams Tôi xin lỗi, nhưng câu hỏi nêu rõ "Làm thế nào để xóa bộ đệm cache?"
Serj Ardovic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.