क्यों मुझे Dalvik कैश को पोंछने की आवश्यकता है?


46

जब मैं एक कस्टम रोम अपडेट कर रहा हूं, तो हमेशा Dalvik कैश को पोंछने के लिए एक निर्देश है । मुझे एक कारण नहीं दिख रहा है कि यह क्यों जरूरी है।

सिस्टम बूट कर रहा है, जबकि लॉगकैट को देखकर मैं स्पष्ट रूप से देख सकता हूं कि यदि कोई ऐप बदल गया है, तो उसकी dexफ़ाइल को अमान्य कर दिया गया है और फिर से पुनर्निर्मित किया गया है। फिर भी जब मैं इस बात का जिक्र करता हूं तो मैं खामोशी से मिलता हूं। जैसे कि कुछ रॉम डेवलपर्स को भी इसकी जानकारी नहीं है और वे ऐसा केवल इसलिए कर रहे हैं क्योंकि बाकी सभी करते हैं।

तो सवाल:

  • क्या एक Android संस्करण था जहां बूट के दौरान Dalvik फाइलें अवैध नहीं थीं?
  • क्या इसे स्वयं करने में कोई फायदा है, इसके बजाय सिस्टम को वह काम करने देना चाहिए जो वह करने वाला है?

एक आदर्श उत्तर में प्रासंगिक कोड के संदर्भ शामिल होंगे, इसलिए अगली बार आने पर मेरे पास एक संदर्भ होगा।

जवाबों:


43

अपने सवालों के जवाब देने के लिए:

  • किसी भी Android संस्करण के बारे में पता नहीं है, जहां बूट पर डाल्विक को अमान्य नहीं किया गया था। हो सकता है कि शुरुआती संस्करण 1.0 में ऐसा था, मुझे वास्तव में पता नहीं है, एक्लेयर, फ्रायो, जिंजरब्रेड, आइसक्रीम सैंडविच के माध्यम से चले गए हैं। आपको स्रोत के पेड़ को देखने और कपकेक या डोनट (क्रमशः 1.5 और 1.6) पर वापस लौटने की आवश्यकता है

  • विस्तृत कारण :)

कारण साफ कर लें कैश इस्तेमाल किया जाना चाहिए, क्योंकि इस प्रणाली apks सहित सभी apks, एक है डेक्स इसे करने के लिए संलग्न फाइल, जब रोम पहली बार हटा दिया गया है, Android के Dalvik प्रत्येक के माध्यम से चला जाता है और उन apks में से हर एक, और निकालने इससे डेक्स फाइल करें और इसे कैश में रखें /data/dalvik-cacheजिससे एप के निष्पादन में तेजी आए।

अधिकांश ROM में एप्स होते हैं जो कि odex 'एड होते हैं, कैश को बाहरी फाइल के रूप में एपीके में ही बंडल किया जाता है।

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

जब आप एक कस्टम रोम फ्लैश करते हैं, और कैश नहीं मिटाते हैं, तो नए कस्टम ROM की एपीके के पास एक अलग डीएक्स फाइल जुड़ी होगी, और जब दाल्विक उनके माध्यम से जाता है, तो यह निर्देशिका में पाई गई मौजूदा कैश्ड डेक्स फाइल को देखता है, और इसे छोड़ देता है, फिर जब आप ऐप चलाते हैं, तो आपको एक बल पास या ANR (एप्लिकेशन रिस्पॉन्सिंग नहीं) की गारंटी दी जाती है।

आप प्रति डेटा खो नहीं रहे हैं, अगर ClockWorkMod रिकवरी का उपयोग कर रहे हैं, और वाइप डेटा का चयन किया गया है, तो हाँ, ऐप्स से संबंधित सभी सेटिंग्स को सफाई से मिटा दिया जाता है - अंदर देखें /data/app

तो आप कैश को वाइप कर सकते हैं लेकिन वाइप डेटा को नहीं , जो प्रभावी रूप से किया जाता है, उसे नए एप्स्क में जगह पर स्लेट किया जाता है, जिसमें यह सेटिंग्स को बरकरार रखा जाता है। यह CyanogenMod नाइटलाइफ़ के साथ काफी सामान्य परिदृश्य था जहां एक अस्थिर / परीक्षण रोम बिल्ड को फ्लैश किया गया था, और सेटिंग्स को कैश वाइप के साथ बरकरार रखा गया था। बाजार से डाउनलोड किए गए ऐप के आधार पर माइलेज अलग-अलग होगा (सेटिंग्स में बदलाव की संभावना काफी हद तक है)।

सर्वोत्तम परिणामों के लिए वाइप डेटा और वाइप कैश दोनों को निष्पादित करना बुद्धिमानी होगी ताकि ऐप के भीतर ही अखंडता और कोई प्रोग्राम त्रुटि न हो।

हां इसका मतलब है कि बूट समय धीमा होगा, लेकिन इसकी शुरुआत एक बार होगी। इसके बाद यह जल्दी बूट होगा। वास्तव में संक्षेप में, स्पष्ट रूप से सीडब्ल्यूएम के माध्यम से कैश को स्वयं पोंछना वास्तव में इसे गति देने में मदद करता है और पिछले संस्करण से कोई अवशेष सुनिश्चित नहीं कर सकता है जो इसमें घुलमिल सकता है (अब इस स्तर पर, आपके प्रश्न को सभी निष्पक्षता में समझ रहा है, वास्तव में नहीं है एंड्रॉइड एक नए रोम को चमकाने पर बूट पर कैश को अमान्य करने का प्रदर्शन नहीं करता है ..)

स्रोत ल्यूक का गंभीरता से उपयोग करें ! : डी

frameworks/base/core/java/com/android/internal/os/ZygoteInit.javaप्रत्येक APK रनटाइम के लिए बूटअप कोड है। यह dalvikडायरेक्टरी ट्री में पाए जाने वाले देशी सी कोड के साथ इंटरैक्ट करता है , जिसमें एपीके के भीतर देशी सीपीयू सेट के साथ बायटेकोड की व्याख्या करने के लिए विशिष्ट चिपसेट निर्देश हैं। ARMv6 ARMv5 का एक हैक किया गया संस्करण है (जो कि Eclair से पहले पुराने एंड्रॉइड संस्करणों में मूल चिपसेट था), इसलिए आप ARMv6 को Google से AOSP स्रोत में नहीं देखेंगे। CyanogenMod के पास उनके स्रोत में ARMv6 होगा।


इस चर्चा के लिए मान लेते हैं कि हम आधिकारिक CM7 रिलीज़ के बारे में बात कर रहे हैं। मुझे यह कहने से शुरू करें कि मैंने कभी अपना दलविक कैश नहीं मिटाया और कभी भी ऐसी समस्याओं का सामना नहीं किया जो ऐसा करने से हल होंगी। क्योंकि यह odexed नहीं है, इसलिए ऐसा कोई तरीका नहीं है जिसमें कई (o) dex फाइलें मौजूद हों, और इस प्रकार बूट पर पुरानी फाइल को एक नई जेनरेट की गई जगह से बदल दिया जाता है। ओह, और अगर यह वास्तव में बड़ी बात है कि डेवलपर्स इसे अपडेटर स्क्रिप्ट में क्यों नहीं जोड़ते हैं? मैं स्रोत की जांच करूंगा, धन्यवाद।
आरआर

1
आप वास्तव में स्पष्ट रूप से इसे अपडेटर-स्क्रिप्ट में डाल सकते हैं, लेकिन यह चमकते समय दूसरों को पेशाब कर सकता है क्योंकि "ओह बकवास, मैंने अपनी सेटिंग्स / डेटा खो दिया है" और सीएम शायद लौ के सवालों / जवाबों से जलना नहीं चाहते थे जैसे कि " सीएम की नई रिलीज के समय आप मेरे कैश को क्यों मिटा रहे थे? - शायद इसकी जिम्मेदारी सीएम की है, इसलिए अंतिम उपयोगकर्ता को वह विकल्प दिया? और इसे उन पर वापस रख दिया ताकि अगर वे बिना पोंछे भाग गए, और मंचों पर एक चाबुक "अरे मेरा ऐप दुर्घटनाग्रस्त हो रहा है", तो सीएम घूम सकते हैं और कह सकते हैं "क्या आपने पोंछ दिया?"
t0mm13b

मैं यह मतलब नहीं था data/dataलेकिन data\dalvik-cache। संभवतः केवल सिस्टम वाले।
RR

1
स्टॉक AOSP रोम odexed हैं, CM ने deodex का उपयोग करने के लिए निर्माण प्रणाली को संशोधित किया है .... बस कह रहे हैं;)
t0mm13b

2
विस्तृत उत्तर t0mm13b के लिए धन्यवाद। बस इसलिए मैं स्पष्ट हूं ... ऐसा लगता है कि पोस्ट किए गए प्रश्न का सरल उत्तर है "आप नहीं। यह बूट समय पर डिफ़ॉल्ट रूप से मिटा दिया जाता है।" सही बात?
गुल्लीझार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.