ए/बी विभाजन के बिना पुराने एंड्रॉइड डिवाइस पर, फ्लैश स्पेस में आमतौर पर निम्नलिखित विभाजन होते हैं:
- गाड़ी की डिक्की
- इसमें लिनक्स कर्नेल और एक न्यूनतम रूट फ़ाइल सिस्टम (रैम डिस्क में लोड किया गया) शामिल है। यह सिस्टम और अन्य विभाजनों को माउंट करता है और सिस्टम विभाजन पर स्थित रनटाइम शुरू करता है।
- प्रणाली
- इसमें सिस्टम एप्लिकेशन और लाइब्रेरी शामिल हैं जिनका स्रोत कोड एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) पर उपलब्ध है। सामान्य ऑपरेशन के दौरान, यह विभाजन केवल-पढ़ने के लिए माउंट किया जाता है; इसकी सामग्री केवल ओटीए अपडेट के दौरान बदलती है।
- विक्रेता
- इसमें सिस्टम एप्लिकेशन और लाइब्रेरी शामिल हैं जिनके पास एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) पर स्रोत कोड उपलब्ध नहीं है। सामान्य ऑपरेशन के दौरान, यह विभाजन केवल-पढ़ने के लिए माउंट किया जाता है; इसकी सामग्री केवल ओटीए अपडेट के दौरान बदलती है।
- उपयोगकर्ता का डेटा
- उपयोगकर्ता द्वारा इंस्टॉल किए गए एप्लिकेशन आदि द्वारा सहेजे गए डेटा को संग्रहीत करता है। यह विभाजन आमतौर पर ओटीए अपडेट प्रक्रिया द्वारा छुआ नहीं जाता है।
- कैश
- कुछ अनुप्रयोगों द्वारा उपयोग किया जाने वाला अस्थायी होल्डिंग क्षेत्र (इस विभाजन तक पहुंचने के लिए विशेष ऐप अनुमति की आवश्यकता होती है) और डाउनलोड किए गए ओटीए अपडेट पैकेजों के भंडारण के लिए। अन्य प्रोग्राम इस स्थान का उपयोग इस उम्मीद के साथ करते हैं कि फ़ाइलें किसी भी समय गायब हो सकती हैं। कुछ OTA पैकेज स्थापनाओं के परिणामस्वरूप यह विभाजन पूरी तरह से मिटाया जा सकता है। कैश में OTA अपडेट से अपडेट लॉग भी शामिल हैं।
- वसूली
- इसमें एक दूसरा संपूर्ण लिनक्स सिस्टम शामिल है, जिसमें एक कर्नेल और विशेष पुनर्प्राप्ति बाइनरी शामिल है जो एक पैकेज को पढ़ता है और अन्य विभाजनों को अद्यतन करने के लिए इसकी सामग्री का उपयोग करता है।
- विविध
- पुनर्प्राप्ति द्वारा ओटीए पैकेज लागू होने के दौरान डिवाइस के पुनरारंभ होने की स्थिति में यह क्या कर रहा है, इसके बारे में कुछ जानकारी छिपाने के लिए छोटे विभाजन का उपयोग किया जाता है।
ओटीए अपडेट का जीवन
एक सामान्य OTA अपडेट में निम्नलिखित चरण होते हैं:
- डिवाइस ओटीए सर्वर के साथ नियमित जांच करता है और अपडेट की उपलब्धता के बारे में सूचित किया जाता है, जिसमें अपडेट पैकेज का यूआरएल और उपयोगकर्ता को दिखाने के लिए एक विवरण स्ट्रिंग शामिल है।
- कैश या डेटा विभाजन में डाउनलोड अपडेट करें, और इसके क्रिप्टोग्राफ़िक हस्ताक्षर को
/system/etc/security/otacerts.zip
में प्रमाणपत्रों के विरुद्ध सत्यापित किया जाता है। उपयोगकर्ता को अद्यतन स्थापित करने के लिए प्रेरित किया जाता है। - डिवाइस पुनर्प्राप्ति मोड में रीबूट होता है, जिसमें बूट विभाजन में कर्नेल के बजाय पुनर्प्राप्ति विभाजन में कर्नेल और सिस्टम को बूट किया जाता है।
- पुनर्प्राप्ति बाइनरी init द्वारा प्रारंभ की गई है। इसे
/cache/recovery/command
में कमांड-लाइन तर्क मिलते हैं जो इसे डाउनलोड किए गए पैकेज की ओर इंगित करते हैं। - पुनर्प्राप्ति
/res/keys
(पुनर्प्राप्ति विभाजन में निहित RAM डिस्क का भाग) में सार्वजनिक कुंजियों के विरुद्ध पैकेज के क्रिप्टोग्राफ़िक हस्ताक्षर का सत्यापन करती है। - डेटा को पैकेज से निकाला जाता है और आवश्यकतानुसार बूट, सिस्टम और/या विक्रेता विभाजन को अद्यतन करने के लिए उपयोग किया जाता है। सिस्टम विभाजन पर छोड़ी गई नई फ़ाइलों में से एक में नए पुनर्प्राप्ति विभाजन की सामग्री शामिल है।
- डिवाइस सामान्य रूप से रीबूट होता है।
- नया अद्यतन बूट विभाजन लोड किया गया है, और यह नए अद्यतन सिस्टम विभाजन में बायनेरिज़ को माउंट और निष्पादित करना शुरू करता है।
- सामान्य स्टार्टअप के भाग के रूप में, सिस्टम पुनर्प्राप्ति विभाजन की सामग्री को वांछित सामग्री (जो पहले
/system
में फ़ाइल के रूप में संग्रहीत किया गया था) के विरुद्ध जांचता है। वे भिन्न हैं, इसलिए पुनर्प्राप्ति विभाजन को वांछित सामग्री के साथ पुनः फ़्लैश किया जाता है। (बाद के बूट पर, पुनर्प्राप्ति विभाजन में पहले से ही नई सामग्री शामिल है, इसलिए कोई रीफ़्लैश आवश्यक नहीं है।)
सिस्टम अपडेट पूरा हो गया है! अद्यतन लॉग /cache/recovery/last_log. #
.
पैकेज अद्यतन करें
अपडेट पैकेज एक .zip
फ़ाइल है जिसमें निष्पादन योग्य बाइनरी META-INF/com/google/android/update-binary
शामिल है। पैकेज पर हस्ताक्षर सत्यापित करने के बाद, recovery
इस बाइनरी को /tmp
में निकालती है और निम्नलिखित तर्कों को पारित करते हुए बाइनरी चलाती है:
- बाइनरी एपीआई संस्करण संख्या अपडेट करें । यदि अद्यतन बाइनरी परिवर्तन के लिए दिए गए तर्क, यह संख्या बढ़ जाती है।
- कमांड पाइप का फ़ाइल डिस्क्रिप्टर । अपडेट प्रोग्राम इस पाइप का उपयोग रिकवरी बाइनरी पर कमांड भेजने के लिए कर सकता है, ज्यादातर यूआई परिवर्तनों के लिए, जैसे कि उपयोगकर्ता को प्रगति का संकेत देना।
- अद्यतन पैकेज़ का फ़ाइल नाम
.zip
फ़ाइल ।
एक अद्यतन पैकेज अद्यतन बाइनरी के रूप में किसी भी स्थिर रूप से जुड़े बाइनरी का उपयोग कर सकता है। ओटीए पैकेज निर्माण उपकरण अपडेटर प्रोग्राम ( bootable/recovery/updater
) का उपयोग करते हैं, जो एक सरल स्क्रिप्टिंग भाषा प्रदान करता है जो कई इंस्टॉलेशन कार्य कर सकता है। आप डिवाइस पर चल रहे किसी अन्य बाइनरी को प्रतिस्थापित कर सकते हैं।
अपडेटर बाइनरी, एडिफाई सिंटैक्स और बिल्टिन फ़ंक्शंस के विवरण के लिए, इनसाइड ओटीए पैकेज देखें।
पिछली रिलीज़ से माइग्रेट करें
एंड्रॉइड 2.3/3.0/4.0 रिलीज से माइग्रेट करते समय, प्रमुख परिवर्तन पूर्वनिर्धारित नामों वाले सी फ़ंक्शंस के सेट से सभी डिवाइस-विशिष्ट कार्यक्षमता का सी++ ऑब्जेक्ट में रूपांतरण है। निम्न तालिका पुराने कार्यों और नई विधियों को सूचीबद्ध करती है जो लगभग समान उद्देश्य को पूरा करती हैं:
सी फ़ंक्शन | सी++ विधि |
---|---|
डिवाइस_रिकवरी_स्टार्ट() | डिवाइस::रिकवरीस्टार्ट() |
डिवाइस_टॉगल_डिस्प्ले() डिवाइस_रीबूट_अभी() | रिकवरीयूआई::चेककी() (RecoveryUI::IsKeyPressed() भी) |
डिवाइस_हैंडल_की() | डिवाइस::हैंडलमेनूकी() |
डिवाइस_परफॉर्म_एक्शन() | डिवाइस::InvokeMenuItem() |
डिवाइस_वाइप_डेटा() | डिवाइस::वाइपडेटा() |
डिवाइस_यूआई_इनिट() | स्क्रीनरिकवरीयूआई::इनिट() |
पुराने कार्यों को नई विधियों में परिवर्तित करना यथोचित सरल होना चाहिए। अपने नए डिवाइस उपवर्ग का एक उदाहरण बनाने और वापस करने के लिए नया make_device()
फ़ंक्शन जोड़ना न भूलें।