วิธีการล้างแคช gradle?


318

ฉันพยายามใช้ Android Studio และครั้งแรกที่ฉันบูทมันใช้เวลาประมาณ 45 นาทีในการรวบรวม ... หากฉันไม่ออกจากแอปพลิเคชันมันก็โอเค - การรวบรวม / เรียกใช้แอปแต่ละครั้งจะใช้เวลา ประมาณ 45 วินาที

ฉันพยายามตรวจสอบแคชของฉัน: มี.gradle/cachesโฟลเดอร์อยู่ในไดเรกทอรีภายในบ้านของฉันและมีขนาด 123 MB

นอกจากนี้ยังมี.gradleโฟลเดอร์หนึ่งในโฟลเดอร์โครงการของฉัน ... หนึ่งในtaskArtifactsนั้นมีขนาด 200 MB ฉันกลัวที่จะสุ่มจับพวกมันทั้งคู่ โฟลเดอร์ใดปลอดภัยที่จะลบ

มีคำอธิบายที่ดีกว่าสำหรับเหตุใด Android Studio ของฉันจึงใช้gradle assembleงานตลอดเวลาในการโหลดแอปพลิเคชันเป็นครั้งแรก

ฉันต้องล้างแคช intellij ด้วยหรือไม่


3
ฉันพบในภายหลังว่า 45 นาทีเพื่อรวบรวมเป็นเพราะผมเปลี่ยนการตั้งค่าสำหรับการไม่ได้Compiler -> Gradle Use in-process buildไม่มีส่วนเกี่ยวข้องกับแคช
David T.

ไม่มีคำตอบช่วย ปรากฎว่าภาพบางภาพได้รับความเสียหาย การเปิดรูปภาพใน Windows Explorer จะแสดงให้คุณเห็นอย่างรวดเร็วว่ารูปภาพใดเสียหาย (ภาพที่ไม่แสดงตัวอย่าง) แทนที่ภาพเหล่านั้นและ voila!
Bimde

@ david-t คุณสามารถชี้ไปยังที่อยู่ของตัวเลือกนี้ได้หรือไม่ ฉันมีรุ่น3.3.1แต่ไม่พบภายใต้การตั้งค่า - สร้างการดำเนินการปรับใช้
Leo

คำตอบ:


261

ในฐานะที่เป็น @ Bradford20000 ชี้ให้เห็นในความคิดเห็นที่อาจจะมีgradle.propertiesไฟล์เช่นเดียวกับสคริปต์ gradle $HOME/.gradleทั่วโลกที่อยู่ภายใต้ ในกรณีเช่นนี้ต้องให้ความสนใจเป็นพิเศษเมื่อลบเนื้อหาของไดเรกทอรีนี้

.gradle/cachesไดเรกทอรีชูGradleสร้างแคช ดังนั้นหากคุณมีข้อผิดพลาดเกี่ยวกับการสร้างแคชคุณสามารถลบได้


43
สิ่งหนึ่งที่ควรทราบคือถ้าคุณมีไฟล์ gradle.properties ในโฟลเดอร์. gradle ในโฮมไดเร็กตอรี่ของคุณคุณจะไม่ต้องการลบทั้งโฟลเดอร์ โดยปกติแล้วเพียงแค่การลบ. gradle / แคชก็เพียงพอที่จะรับ Gradle เพื่อดาวน์โหลดการอ้างอิงทั้งหมด
Bradford2000

1
ทุกครั้งที่มีการอัปเดตเป็น Android Studio ดูเหมือนว่า gradle builds จะช้าลงเรื่อย ๆ เหตุใดเมื่อฉันปรับใช้กับอุปกรณ์หยุดแอปที่รันอยู่และปรับใช้อีกครั้ง (โดยไม่ต้องแตะรหัสใด ๆ เลย!) สตูดิโอ Android ใช้เวลาอีก 2 นาทีในการสร้างและปรับใช้ มันเป็น friggin nutz
คนอยู่ที่ไหนสักแห่ง

1
บน Android Studio เพื่อล้างแคชระบบ: เมนูหลัก Android stdio เลือกไฟล์ | ทำให้แคช / เริ่มต้นใหม่และสร้างเมนู> ล้างโปรเจ็กต์
Shomu

368

Gradle cache ตั้งอยู่ที่

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

คุณสามารถเรียกดูไดเรกทอรีเหล่านี้และลบหรือเรียกใช้ด้วยตนเอง

rm -rf $HOME/.gradle/caches/

บนระบบ Unix เรียกใช้คำสั่งนี้จะบังคับให้ดาวน์โหลดการอ้างอิง

อัปเดต 2: ล้างแคชการสร้างAndroidของโครงการปัจจุบัน

หมายเหตุ: ไฟล์ของ Android Studio ใช้แคช / รีสตาร์ทไม่ถูกต้องจะไม่ล้างแคชสำหรับสร้าง Android ดังนั้นคุณจะต้องทำความสะอาดแยกต่างหาก

บน Windows:

gradlew cleanBuildCache

บน Mac หรือ Linux:

./gradlew cleanBuildCache

20
นี่ไม่ได้ล้างแคชของการพึ่งพา Maven ฉันลบไลบรารีออกจากที่เก็บ maven และทำให้แคช Android Studio ใช้งานไม่ได้ แต่โครงการยังคงสร้าง ซึ่งหมายความว่าแคชการไล่ระดับสีสำหรับการพึ่งพา Maven จะไม่ถูกล้างออก
mattm

2
วิธีที่คุณอธิบายจะล้างแคชจากโครงการหลักและเป็นการอ้างอิงโครงการ แต่การพึ่งพาไลบรารียังคงอยู่ คุณอธิบายวิธีทำความสะอาดแคชของ AndroidStudio แต่ไม่ใช่แคชของการไล่ระดับสี
Leandroid

ใช่ แต่สิ่งนี้จะไม่ปรากฏบน Mac ก่อนที่ฉันจะโหลดโครงการ
milosmns

มันยังใช้งานได้ดีกับ Android Studio เวอร์ชันล่าสุด
Raju yourPepe

2
ถ้าคุณต้องการแคชสะอาดและทำความสะอาดใช้ทั้งงาน:gradlew clean cleanBuildCache
equiman

62

แก้ไข: cleanBuildCacheไม่ทำงานอีกต่อไป

ปลั๊กอิน android gradle ตอนนี้ใช้คุณสมบัติการไล่ระดับสีแคช

การอ้างอิง: https://guides.gradle.org/using-build-cache/

เพื่อล้างแคช

ทำความสะอาดไดเรกทอรีแคชเพื่อหลีกเลี่ยงความนิยมใด ๆ จากการสร้างก่อนหน้านี้

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

การอ้างอิง: https://guides.gradle.org/using-build-cache/#caching_android_projects

ความแตกต่างอื่น ๆ

ดูที่นี่ (รวมถึงการแก้ไข)

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

ข้อมูล OBSOLETE:

โซลูชันใหม่ล่าสุดที่ใช้งานการไล่ระดับสี

cleanBuildCache

มีให้ใช้งานผ่านปลั๊กอินเสริม android สำหรับ Gradle, รุ่น 2.3.0 (กุมภาพันธ์ 2017)

อ้างอิง:

  1. ระดับ 3.3 หรือสูงกว่า
  2. สร้างเครื่องมือ 25.0.0 หรือสูงกว่า

เพิ่มเติมได้ที่:

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

พื้นหลัง

สร้างแคช:

เก็บเอาท์พุทบางอย่างที่ปลั๊กอิน Android สร้างขึ้นเมื่อสร้างโครงการของคุณ (เช่น AAR ที่ไม่มีแพ็กเกจและการพึ่งพาระยะไกลแบบ pre-dexed) งานสร้างใหม่ทั้งหมดของคุณเร็วขึ้นมากในขณะที่ใช้แคชเนื่องจากระบบสร้างสามารถนำไฟล์แคชเหล่านั้นกลับมาใช้ใหม่ในระหว่างการสร้างครั้งต่อไปแทนที่จะสร้างใหม่ โครงการที่ใช้ปลั๊กอิน Android 2.3.0 และสูงกว่าใช้แคชบิลด์เป็นค่าเริ่มต้น หากต้องการเรียนรู้เพิ่มเติมโปรดอ่านปรับปรุงความเร็วในการสร้างด้วย Build Cache

หมายเหตุ: ภารกิจ cleanBuildCache ไม่พร้อมใช้งานหากคุณปิดใช้งานบิลด์แคช

การใช้งาน:

หน้าต่าง

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 เป็นไฟล์เฉพาะระบบที่มีสคริปต์ - โปรดดูข้อมูลระบบวิธีดำเนินการสคริปต์

  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/LanguageUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

ระวังด้วย gradle daemon คุณต้องหยุดมันก่อนที่จะเคลียร์ gradle และรันใหม่

หยุดภูตครั้งแรก:

./gradlew --stop

ล้างแคชโดยใช้:

rm -rf ~/.gradle/caches/

เรียกใช้อีกครั้งคุณรวบรวม


คุณช่วยอธิบายได้ว่าทำไมหรือลิงค์ไปยังเอกสารบางอย่างเกี่ยวกับเรื่องนี้?
tir38

1
หาก gradle daemon ของคุณกำลังใช้งานแคช gradle ของคุณจะถูกใช้งาน ดังนั้นระบบปฏิบัติการของคุณจะป้องกันการลบ
0x539

6

gradle daemon ยังสร้างไฟล์ข้อความขนาดใหญ่จำนวนมากในทุก ๆ บันทึกการสร้าง พวกเขาเก็บไว้ที่นี่:

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

"XX" เป็นรุ่น gradle ที่ใช้งานเช่น "4.4" และ "XXXX" เป็นเพียงตัวเลขสุ่มเช่น "1234"

ขนาดรวมสามารถเติบโตได้ถึงหลายร้อยล้านบาทในเวลาเพียงไม่กี่เดือน ไม่มีวิธีปิดใช้งานการบันทึกและไฟล์จะไม่ถูกลบโดยอัตโนมัติและไม่จำเป็นต้องเก็บรักษาไว้จริงๆ

แต่คุณสามารถสร้างภารกิจการไล่ระดับสีขนาดเล็กเพื่อลบออกโดยอัตโนมัติและเพิ่มพื้นที่ว่างในดิสก์จำนวนมาก:

เพิ่มลงในของคุณ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()
        }
    }
}

หากต้องการดูว่าไฟล์ใดที่ถูกลบคุณสามารถดูผลลัพธ์การดีบักใน Android Studio -> View -> Tool Windows -> Build จากนั้นกดปุ่ม "สลับดู" บนหน้าต่างนั้นเพื่อแสดงข้อความ

โปรดทราบว่า Gradle Sync หรือ Gradle Build ใด ๆ จะเรียกใช้การลบไฟล์

วิธีที่ดีกว่าคือการย้ายไฟล์โดยอัตโนมัติไปที่ถังขยะ / ถังรีไซเคิลหรืออย่างน้อยก็คัดลอกไปยังโฟลเดอร์ถังขยะก่อน แต่ฉันไม่รู้จะทำยังไง


หากต้องการส่งรายการ OSX ไปที่ตัวค้นหา / ถังขยะแทนที่จะลบโดยตรงโพสต์นี้ดูเหมือนจะมีความคิดดีๆมากมายapple.stackexchange.com/questions/50844/…
AnneTheAgile

4

ดูเหมือนว่ามีข้อมูลที่ไม่ถูกต้องโพสต์ที่นี่ บางคนรายงานเกี่ยวกับวิธีล้างแคชตัวสร้าง Android (กับงานcleanBuildCache) แต่ดูเหมือนว่าจะไม่ทราบว่าแคชดังกล่าวเป็นอิสระจากแคชสร้างของ Gradle AFAIK

ความเข้าใจของฉันคือแคชของ Android นั้นมาจาก Gradle (และเป็นแรงบันดาลใจ) แต่ฉันอาจผิด ไม่ว่าจะเป็นตัวสร้าง Android จะเป็น / ได้รับการอัปเดตเพื่อใช้แคชของ Gradle และออกจากตำแหน่งตัวเองฉันไม่รู้

แก้ไข:แคชตัวสร้าง Android ล้าสมัยและถูกกำจัดไปแล้ว ปลั๊กอิน Android Gradle ตอนนี้ใช้แคชสร้างของ Gradle แทน ในการควบคุมแคชนี้คุณต้องมีปฏิสัมพันธ์กับโครงสร้างพื้นฐานแคชทั่วไปของ Gradle

เคล็ดลับ: ค้นหาความช่วยเหลือแคชของ Gradle ออนไลน์โดยไม่พูดถึงคำหลัก 'android' เพื่อรับความช่วยเหลือสำหรับแคชที่เกี่ยวข้องในปัจจุบัน

แก้ไข 2:เนื่องจากคำถามของ tir38 ในความคิดเห็นด้านล่างฉันกำลังทดสอบโดยใช้โครงการ Android Gradle plugin v3.4.2 แคช gradle เปิดใช้งานโดยในorg.gradle.caching=true gradle.propertiesฉันทำสองสามครั้งclean buildและครั้งที่สองที่งานส่วนใหญ่แสดงFROM-CACHEเป็นสถานะของพวกเขาแสดงว่าแคชทำงาน

น่าแปลกใจที่ฉันมีcleanBuildCacheงาน gradle และ<user-home>/.android/build-cache/3.4.2/ไดเรกทอรีทั้งบอกใบ้ถึงการมีอยู่ของแคชตัวสร้าง Android

ฉันดำเนินการcleanBuildCacheและ3.4.2/ไดเรกทอรีหายไป ต่อไปฉันทำอีกclean build:

  • ไม่มีอะไรเปลี่ยนแปลง: งานส่วนใหญ่แสดงFROM-CACHEเป็นสถานะและงานสร้างเสร็จสมบูรณ์ด้วยความเร็วที่เปิดใช้งานแคช
  • 3.4.2/ไดเรกทอรีถูกสร้าง
  • 3.4.2/ไดเรกทอรีว่างเปล่า (ประหยัดสำหรับ 2 ซ่อนศูนย์ไฟล์เครื่องหมายยาว)

บทสรุป:

  1. การทำแคชของตัวสร้าง Android ปกติทั้งหมดนั้นจัดการโดย Gradle
  2. การดำเนินการcleanBuildCacheไม่ชัดเจนหรือส่งผลกระทบต่อการสร้างแคชในทางใด
  3. ยังมีแคชตัวสร้าง Android อยู่ที่นั่น นี่อาจเป็นรหัสร่องรอยที่ทีมสร้าง Android ลืมลบหรืออาจแคชสิ่งที่แปลกจริง ๆ ด้วยเหตุผลใดก็ตามที่ไม่ได้หรือไม่สามารถย้ายไปใช้แคช Gradle ได้ (ตัวเลือก 'ไม่สามารถ' จะแก้ไขได้อย่างมาก IMHO)

ต่อไปผมจะปิดการใช้งานแคช Gradle โดยการลบorg.gradle.caching=trueจากgradle.propertiesและฉันพยายามที่คู่ของclean build:

  • การสร้างช้า
  • งานทั้งหมดแสดงสถานะของพวกเขาว่าจะถูกดำเนินการและไม่แคชหรือทันสมัย
  • 3.4.2/ไดเรกทอรียังคงเป็นที่ว่างเปล่า

ข้อสรุปเพิ่มเติม:

  1. ไม่มีแคชตัวสร้าง Android สำรองเมื่อแคช Gradle ไม่สามารถเข้าถึงได้
  2. แคชตัวสร้าง Android อย่างน้อยสำหรับงานทั่วไปได้ถูกลบทิ้งอย่างแน่นอนตามที่ฉันระบุไว้ก่อนหน้านี้
  3. เอกสาร android ที่เกี่ยวข้องมีข้อมูลที่ล้าสมัย โดยเฉพาะอย่างยิ่งแคชไม่ได้เปิดใช้งานตามค่าเริ่มต้นตามที่ระบุไว้ที่นั่นและแคช Gradle จะต้องเปิดใช้งานด้วยตนเอง

แก้ไข 3: ผู้ใช้ tir38 ยืนยันว่าแคชตัวสร้าง Android ล้าสมัยและถูกตัดออกด้วยการค้นหานี้ tir38 สร้างปัญหานี้เช่นกัน ขอบคุณ!


คุณสามารถลิงค์ไปยังที่ที่คุณอ่านว่าแคชตัวสร้าง Android ล้าสมัยหรือไม่และตอนนี้ใช้แคชการสร้างของ Gradle แทนหรือไม่
tir38

@ tir38, ไม่ แต่ฉันอัปเดตคำตอบของฉันด้านบนด้วยการทดสอบของฉันเอง ขอบคุณ
Lanchon

ขอบคุณมัดสำหรับการวิจัยขยันของคุณ คุณยืนยันสิ่งที่ฉันเห็นในการทดสอบด้วยเช่นกัน: 1. 3.4.2/dir ที่ว่างเปล่า 2. การปรากฏตัวของcleanBuildCacheงาน 3. ปิดการใช้งานแคชการสร้าง gradle และการสร้างใหม่ไม่ได้แสดงหลักฐานใด ๆ ของงาน Android กดปุ่มแคช
tir38

2
นิดหน่อยมากกว่าที่ฉันจะได้รับการยืนยันจริง ๆ ว่าแคชสร้างของ Android นั้นถูก / รีดเข้าสู่ issuetracker.google.com/issues/37324009#comment3 ของgradleฉันเปิดคำขอเอกสารเพื่อลบหน้าเอกสารดังกล่าวออก
tir38

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.