कैसे करें कैश की निकासी?


317

मैं एंड्रॉइड स्टूडियो का उपयोग करने की कोशिश कर रहा हूं, और पहली बार मैं इसे बूट करता हूं, यह संकलन करने के लिए 45 मिनट की तरह लगता है ... अगर मैंने आवेदन नहीं छोड़ा है, तो यह ठीक है - प्रत्येक बाद के संकलन / ऐप को चलाना होगा लगभग 45 सेकंड।

मैंने अपने कुछ कैश की जांच करने की कोशिश की है: .gradle/cachesमेरे होम डायरेक्टरी में एक फोल्डर है, और इसमें 123 एमबी है।

.gradleमेरे प्रोजेक्ट फ़ोल्डर में एक फ़ोल्डर भी है ... इसमें से एक taskArtifacts200 एमबी की तरह था। मैं बस उन दोनों को बेतरतीब ढंग से परमाणु से डर रहा हूँ। फ़ोल्डर के कौन से हिस्से को हटाना सुरक्षित है?

क्या मेरा एंड्रॉइड स्टूडियो हमेशा के लिए gradle assembleएप्लिकेशन लोड करने पर कार्य को चलाने के लिए हमेशा के लिए ले जा रहा है, इसके लिए एक बेहतर स्पष्टीकरण है ?

क्या मुझे इंटेलीज कैश भी साफ़ करना होगा?


3
मुझे बाद में पता चला कि संकलन करने के लिए 45 मिनट का समय है क्योंकि मैंने सेटिंग्स Compiler -> Gradleको नहीं करने के लिए बदल दिया है Use in-process build। कैश के साथ कुछ नहीं करना है
डेविड टी।

किसी भी उत्तर ने मदद नहीं की। कुछ छवियों को दूषित कर दिया गया। विंडोज एक्सप्लोरर में छवियों को खोलने से आपको जल्दी से पता चलता है कि कौन सी छवियां दूषित हैं (जिन लोगों के लिए यह पूर्वावलोकन लोड नहीं करता है)। उन छवियों और voila को बदल दिया!
बिमदे

@ david-t क्या आप इस विकल्प के ठिकाने की ओर इशारा कर सकते हैं? मेरे पास संस्करण 3.3.1 है, लेकिन इसे प्राथमिकता के
लियो

जवाबों:


261

जैसा कि @ ब्रैडफोर्ड 20000 ने टिप्पणियों में बताया है, एक gradle.propertiesफाइल के साथ-साथ वैश्विक ग्रेडल स्क्रिप्ट भी हो सकती है $HOME/.gradle। ऐसे मामले में इस निर्देशिका की सामग्री को हटाते समय विशेष ध्यान दिया जाना चाहिए।

.gradle/cachesनिर्देशिका रखती Gradleनिर्माण कैश। इसलिए यदि आपके पास कैश बनाने के बारे में कोई त्रुटि है, तो आप इसे हटा सकते हैं।


43
एक बात का ध्यान रखें कि यदि आपके पास अपने होम निर्देशिका में .gradle फ़ोल्डर में gradle.properties फ़ाइल है, तो आप संपूर्ण फ़ोल्डर को हटाना नहीं चाहेंगे। आमतौर पर, सभी निर्भरता को कम करने के लिए ग्रेडल प्राप्त करने के लिए बस .gradle / caches को हटाना पर्याप्त है।
ब्रैडफोर्ड

1
एंड्रॉइड स्टूडियो के हर अपडेट के साथ, ग्रेडेल बिल्ड धीमी और धीमी गति से प्राप्त होता है। ऐसा क्यों है कि जब मैं डिवाइस पर तैनाती करता हूं, तो ऐप चलाना बंद कर देता हूं, और फिर फिर से तैनात करता हूं (बिना किसी कोड को छूए!) कि एंड्रॉइड स्टूडियो को एक बार फिर से एक बिल्ड बनाने और इसे तैनात करने में 2 मिनट लगते हैं। यह फ्रिगिन नट है।
किसी ने

1
एंड्रॉइड स्टूडियो में सिस्टम कैश को साफ करने के लिए: Android stdio मुख्य मेनू, फ़ाइल चुनें अमान्य कैश / Restart.and निर्माण मेनू> स्वच्छ परियोजना
शोमू

367

ग्रेड कैश पर पता चलता है

  • विंडोज पर: %USER_HOME%\.gradle/caches/
  • मैक / यूनिक्स पर: ~/.gradle/caches/

आप इन निर्देशिका में ब्राउज़ कर सकते हैं और मैन्युअल रूप से इसे हटा सकते हैं या चला सकते हैं

rm -rf $HOME/.gradle/caches/

यूनिक्स प्रणाली पर। इस आदेश को चलाने के लिए भी निर्भरता डाउनलोड करने के लिए मजबूर करेंगे।

अपडेट 2: वर्तमान प्रोजेक्ट का Android बिल्ड कैश साफ़ करें

नोट: Android Studio की फ़ाइल | अमान्य कैश / पुनः आरंभ एंड्रॉइड बिल्ड कैश को साफ़ नहीं करता है, इसलिए आपको इसे अलग से साफ़ करना होगा।

विंडोज पर:

gradlew cleanBuildCache

मैक या लिनक्स पर:

./gradlew cleanBuildCache

20
इससे मावेन निर्भरता का कैश साफ नहीं हुआ। मैंने मावेन रिपॉजिटरी से लाइब्रेरी को हटा दिया और एंड्रॉइड स्टूडियो कैश को अमान्य कर दिया, लेकिन प्रोजेक्ट अभी भी बनाता है। इसका मतलब है कि मावेन निर्भरता के लिए वर्गीकृत कैश को मंजूरी नहीं दी गई है।
मटका

2
आपने जिस तरह से वर्णन किया है वह मुख्य परियोजना से केवल कैश को साफ करेगा और यह परियोजना पर निर्भरता है, लेकिन पुस्तकालय निर्भरता बरकरार है। आपने AndroidStudio के कैश को साफ़ करने का तरीका बताया है, लेकिन वर्गीकृत कैश नहीं है।
लिएंड्रो

हाँ, लेकिन इससे पहले कि मैं इस परियोजना को लोड मैक पर दिखाई नहीं देता है।
मीलो

यह अभी भी नवीनतम संस्करण Android Studio
Raju yourPepe

2
यदि आप साफ और स्वच्छ कैश चाहते हैं, तो दोनों कार्य चलाएं:gradlew clean cleanBuildCache
23

62

संपादित करें: cleanBuildCache अब काम नहीं करता है

android gradle plugin अब gradle cache feature का इस्तेमाल करता है

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

साफ करने के लिए CACHE

पिछले बिल्ड से किसी भी हिट से बचने के लिए कैश डायरेक्टरी को साफ़ करें

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

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

अन्य आयाम

यहाँ देखें (संपादन सहित)।

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

OBSOLETE INFO:

ग्रेडिएल कार्य का उपयोग करते हुए नवीनतम समाधान

cleanBuildCache

ग्रैडल के लिए एंड्रॉइड प्लगइन के माध्यम से उपलब्ध, संशोधन 2.3.0 (फरवरी 2017)

निर्भरता:

  1. ३.३ या उससे अधिक होना।
  2. उपकरण का निर्माण 25.0.0 या उच्चतर।

अतिरिक्त जानकारी का संपर्क:

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

पृष्ठभूमि

कैश बनाएँ:

आपके प्रोजेक्ट का निर्माण करते समय एंड्रॉइड प्लगइन उत्पन्न करने वाले कुछ आउटपुट को स्टोर करता है (जैसे कि अनपैक्ड एएआर और पूर्व-डीएक्सड रिमोट निर्भरता)। कैश का उपयोग करते समय आपके क्लीन बिल्ड बहुत अधिक तेज होते हैं क्योंकि बिल्ड सिस्टम केवल बाद में बनाए जाने के दौरान उन कैश्ड फ़ाइलों का पुनः उपयोग कर सकता है, बजाय उन्हें फिर से बनाने के। एंड्रॉइड प्लगइन 2.3.0 का उपयोग करने वाले प्रोजेक्ट और डिफ़ॉल्ट रूप से बिल्ड कैश का उपयोग करते हैं। अधिक जानने के लिए, बिल्ड कैश के साथ बिल्ड बिल्ड में सुधार पढ़ें।

नोट: यदि आप बिल्ड कैश को अक्षम करते हैं, तो 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. विंडोज़ - https://technet.microsoft.com/en-us/library/bb613481(v=vs.85.in.xx
  3. मैक https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

ग्रेडेल डेमन के साथ देखभाल करें, आपको स्पष्ट और पुनः चलाने से पहले इसे रोकना होगा।

पहला डेमॉन बंद करो:

./gradlew --stop

कैश का उपयोग करके साफ करें:

rm -rf ~/.gradle/caches/

फिर से चलाएं आप संकलन


क्या आप बता सकते हैं कि इस पर कुछ दस्तावेज़ीकरण क्यों या लिंक किए गए हैं?
tir38

1
यदि आपके ग्रेडेल डेमॉन चल रहे हैं तो आपके ग्रेडेल कैश उपयोग में होंगे। नतीजतन, आपका ओएस हटाने की संभावना को रोक देगा।
0x539

6

ग्रेडल डेमॉन भी हर एक बिल्ड लॉग की कई बड़ी टेक्स्ट फाइल बनाता है। वे यहाँ संग्रहीत हैं:

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

"XX" उपयोग में प्रवण संस्करण है, जैसे "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()
        }
    }
}

यह देखने के लिए कि कौन सी फाइलें हटाई जा रही हैं, आप एंड्रॉइड स्टूडियो में डिबग आउटपुट -> व्यू -> टूल विंडोज -> बिल्ड देख सकते हैं। फिर टेक्स्ट आउटपुट दिखाने के लिए उस विंडो पर "टॉगल व्यू" बटन दबाएं।

ध्यान दें कि ग्रैडल सिंक या कोई ग्रैड बिल्ड फ़ाइल विलोपन को ट्रिगर करेगा।

एक बेहतर तरीका यह होगा कि आप फ़ाइलों को ट्रैश / रीसायकल बिन में ले जाएँ, या कम से कम पहले उन्हें ट्रैश फ़ोल्डर में कॉपी करें। लेकिन मुझे नहीं पता कि यह कैसे करना है।


सीधे हटाने के बजाय खोजक / ट्रैश में OSX आइटम भेजने के लिए, इस पोस्ट में कई अच्छे विचार हैं। Apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

लगता है कि यहाँ गलत जानकारी पोस्ट की गई है। कुछ लोग एंड्रॉइड बिल्डर कैश (कार्य के साथ cleanBuildCache) को साफ़ करने के बारे में रिपोर्ट करते हैं, लेकिन यह महसूस नहीं करते हैं कि उक्त कैश ग्रैड के बिल्ड कैश, AFAIK से स्वतंत्र है।

मेरी समझ यह है कि एंड्रॉइड का कैश ग्रैडल्स से पहले (और प्रेरित) है, लेकिन मैं गलत हो सकता है। क्या एंड्रॉइड बिल्डर को ग्रैडल के कैश का उपयोग करने के लिए अपडेट किया गया था या अपने स्वयं के रिटायर किया गया था, मुझे नहीं पता।

EDIT: एंड्रॉइड बिल्डर कैश अप्रचलित है और इसे समाप्त कर दिया गया है। एंड्रॉइड ग्रैडल प्लगइन अब ग्रैड के बिल्ड कैश का उपयोग करता है। इस कैश को नियंत्रित करने के लिए अब आपको ग्रैडल के जेनेरिक कैश इन्फ्रास्ट्रक्चर के साथ बातचीत करनी चाहिए।

TIP: वर्तमान में प्रासंगिक कैश के लिए सहायता प्राप्त करने के लिए कीवर्ड 'एंड्रॉइड' का उल्लेख किए बिना ग्रैडल के कैश की ऑनलाइन मदद करें।

EDIT 2: नीचे एक टिप्पणी में tir38 के प्रश्न के कारण, मैं एक एंड्रॉइड ग्रैडल प्लगइन v3.4.2 परियोजना का उपयोग करके परीक्षण कर रहा हूं। में वर्गीकृत कैश सक्षम किया org.gradle.caching=trueगया है gradle.properties। मैं एक दो बार करता हूं clean buildऔर दूसरी बार अधिकांश कार्य FROM-CACHEअपनी स्थिति के रूप में दिखाते हैं , यह दिखाते हैं कि कैश काम कर रहा है।

आश्चर्यजनक रूप से, मेरे पास एक cleanBuildCacheअसेंबल कार्य और एक <user-home>/.android/build-cache/3.4.2/निर्देशिका है, दोनों एक एंड्रॉइड बिल्डर कैश के अस्तित्व को इंगित करते हैं।

मैं निष्पादित करता हूं cleanBuildCacheऔर 3.4.2/निर्देशिका चली गई है। अगले मैं एक और करूँ clean build:

  • कुछ भी नहीं बदला: अधिकांश कार्य FROM-CACHEउनकी स्थिति और कैश-सक्षम गति से पूर्ण निर्माण के रूप में दिखाई देते हैं।
  • 3.4.2/निर्देशिका निर्मित किया गया है।
  • 3.4.2/निर्देशिका खाली है (2 के लिए छिपा हुआ, शून्य लम्बाई मार्कर फ़ाइलों को बचाने)।

निष्कर्ष:

  1. सभी सामान्य एंड्रॉइड बिल्डर कार्यों का कैशिंग ग्रेडल द्वारा संभाला जाता है।
  2. निष्पादन cleanBuildCacheकिसी भी तरह से बिल्ड कैश को स्पष्ट या प्रभावित नहीं करता है।
  3. वहाँ अभी भी एक Android बिल्डर कैश है। यह वेस्टीजियल कोड हो सकता है जिसे एंड्रॉइड बिल्ड टीम हटाने के लिए भूल गई, या यह वास्तव में कुछ अजीब कैश कर सकता है जो कि किसी भी कारण से ग्रेडल कैश का उपयोग करने के लिए पोर्ट नहीं किया गया है या नहीं किया जा सकता है। ('नहीं' विकल्प अत्यधिक कामचलाऊ हो सकता है, IMHO।)

अगला, मैं org.gradle.caching=trueसे निकालकर ग्रेडल कैश को निष्क्रिय कर देता gradle.propertiesहूं और मैं एक दो को आज़माता हूं clean build:

  • बिल्ड धीमी हैं।
  • सभी कार्य निष्पादित किए जाने और न ही कैश्ड या अप टू डेट होने के रूप में अपनी स्थिति दिखाते हैं।
  • 3.4.2/निर्देशिका खाली होना जारी है।

अधिक निष्कर्ष:

  1. जब ग्रैडल कैश हिट करने में विफल रहता है तो उसके लिए कोई एंड्रॉइड बिल्डर कैशबैक नहीं है।
  2. कम से कम सामान्य कार्यों के लिए एंड्रॉइड बिल्डर कैश, वास्तव में समाप्त हो गया है जैसा कि मैंने पहले कहा था।
  3. प्रासंगिक एंड्रॉइड डॉक्टर में पुरानी जानकारी होती है। विशेष रूप से कैश को डिफ़ॉल्ट रूप से सक्षम नहीं किया गया है, और ग्रैडल कैश को मैन्युअल रूप से सक्षम करना होगा।

EDIT 3: उपयोगकर्ता tir38 ने पुष्टि की कि एंड्रॉइड बिल्डर कैश अप्रचलित है और इसे इस खोज के साथ समाप्त कर दिया गया है । tir38 ने भी इसे मुद्दा बनाया । धन्यवाद!


क्या आप यह पढ़ सकते हैं कि आपने कहां पढ़ा है कि एंड्रॉइड बिल्डर कैश अब अप्रचलित है और यह अब ग्रैड के बिल्ड कैश का उपयोग करता है?
tir38

@ tir38, nope। लेकिन मैंने अपने जवाब को अपने स्वयं के परीक्षण के साथ अद्यतन किया। धन्यवाद।
लैंचोन

आपके मेहनती शोध के लिए एक गुच्छा धन्यवाद। आपने परीक्षण में जो कुछ देखा, उसकी आप सबसे अधिक पुष्टि करते हैं: 1. खाली 3.4.2/डायर। 2. cleanBuildCacheकार्य की उपस्थिति 3. निष्क्रिय बिल्ड कैश को अक्षम करना और पुनर्निर्माण ने कैश को हिट करने वाले एंड्रॉइड कार्यों का कोई सबूत नहीं दिखाया।
tir38

2
थोड़ा और प्रहार हुआ और मुझे वास्तविक पुष्टि मिली कि एंड्रॉइड का बिल्ड कैश है / ग्रेडेल के जारीकर्ता में रोल किया गया था। Googleissues
tir38

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.