ओटीए पैकेज बनाएं

आप ए/बी सिस्टम अपडेट या गैर-ए/बी सिस्टम अपडेट का उपयोग करने वाले उपकरणों के लिए पूर्ण और वृद्धिशील ओटीए पैकेज बनाने के लिए build/make/tools/releasetools में दिए गए ota_from_target_files टूल का उपयोग कर सकते हैं। टूल एंड्रॉइड बिल्ड सिस्टम द्वारा निर्मित target-files.zip फ़ाइल को इनपुट के रूप में लेता है।

एंड्रॉइड 11 या उच्चतर चलाने वाले उपकरणों के लिए, आप विभिन्न SKU वाले कई उपकरणों के लिए एक OTA पैकेज बना सकते हैं। ऐसा करने के लिए डायनामिक फ़िंगरप्रिंट का उपयोग करने के लिए लक्ष्य डिवाइस को कॉन्फ़िगर करने और पूर्व और पोस्टकंडिशन प्रविष्टियों में डिवाइस का नाम और फ़िंगरप्रिंट शामिल करने के लिए ओटीए मेटाडेटा को अपडेट करने की आवश्यकता होती है।

एंड्रॉइड 8.0 ने गैर-ए/बी उपकरणों के लिए फ़ाइल-आधारित ओटीए पैकेज को हटा दिया, जिसके बजाय ब्लॉक-आधारित ओटीए पैकेज का उपयोग करना चाहिए। ब्लॉक-आधारित ओटीए पैकेज या एंड्रॉइड 7.x या उससे कम संस्करण चलाने वाले डिवाइस उत्पन्न करने के लिए, --block विकल्प को ota_from_target_files पैरामीटर पर पास करें।

पूर्ण अद्यतन बनाएं

पूर्ण अद्यतन एक OTA पैकेज है जिसमें डिवाइस की संपूर्ण अंतिम स्थिति (सिस्टम, बूट और पुनर्प्राप्ति विभाजन) शामिल होती है। जब तक डिवाइस पैकेज प्राप्त करने और लागू करने में सक्षम है, पैकेज डिवाइस की वर्तमान स्थिति की परवाह किए बिना बिल्ड स्थापित कर सकता है। उदाहरण के लिए, निम्नलिखित कमांड tardis डिवाइस के लिए target-files.zip संग्रह बनाने के लिए रिलीज़ टूल का उपयोग करते हैं।

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist एक पूर्ण OTA पैकेज ( $OUT में) बनाता है। परिणामी .zip फ़ाइल में tardis डिवाइस के लिए OTA पैकेज बनाने के लिए आवश्यक सभी चीजें शामिल हैं। आप ota_from_target_files को पायथन बाइनरी के रूप में भी बना सकते हैं और पूर्ण या वृद्धिशील पैकेज बनाने के लिए इसे कॉल कर सकते हैं।

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files पथ $PATH में सेट किया गया है, और परिणामी पायथन बाइनरी out/ निर्देशिका में स्थित है।

ota_update.zip अब परीक्षण उपकरणों पर भेजे जाने के लिए तैयार है (सब कुछ परीक्षण कुंजी के साथ हस्ताक्षरित है)। उपयोगकर्ता उपकरणों के लिए, रिलीज़ के लिए साइनिंग बिल्ड में विस्तृत विवरण के अनुसार अपनी निजी कुंजी बनाएं और उपयोग करें।

वृद्धिशील अद्यतन बनाएं

वृद्धिशील अद्यतन एक OTA पैकेज है जिसमें डिवाइस पर पहले से मौजूद डेटा के लिए बाइनरी पैच शामिल होते हैं। वृद्धिशील अद्यतन वाले पैकेज आम तौर पर छोटे होते हैं क्योंकि उनमें अपरिवर्तित फ़ाइलें शामिल करने की आवश्यकता नहीं होती है। इसके अलावा, चूंकि परिवर्तित फ़ाइलें अक्सर अपने पिछले संस्करणों के समान होती हैं, इसलिए पैकेज में केवल दो फ़ाइलों के बीच अंतर की एन्कोडिंग शामिल करने की आवश्यकता होती है।

आप केवल उन उपकरणों पर वृद्धिशील अद्यतन पैकेज स्थापित कर सकते हैं जिनके पास पैकेज के निर्माण में उपयोग किए गए स्रोत बिल्ड हैं। वृद्धिशील अद्यतन बनाने के लिए, आपको पिछले बिल्ड से target_files.zip फ़ाइल (जिसे आप अपडेट करना चाहते हैं) के साथ-साथ नए बिल्ड से target_files.zip फ़ाइल की आवश्यकता होगी। उदाहरण के लिए, निम्नलिखित कमांड tardis डिवाइस के लिए वृद्धिशील अद्यतन बनाने के लिए रिलीज़ टूल का उपयोग करते हैं।

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

यह बिल्ड पिछले बिल्ड के समान है, और वृद्धिशील अपडेट पैकेज ( incremental_ota_update.zip ) संबंधित पूर्ण अपडेट (60 एमबी के बजाय लगभग 1 एमबी) से बहुत छोटा है।

वृद्धिशील पैकेज को केवल उन उपकरणों पर वितरित करें जो वृद्धिशील पैकेज के शुरुआती बिंदु के रूप में उपयोग किए गए पिछले बिल्ड के बिल्कुल समान चलते हैं। आपको छवियों को PRODUCT_OUT निर्देशिका ( make dist के साथ निर्मित, जो कि fastboot update के साथ फ्लैश किया जाना है) के बजाय PREVIOUS-tardis-target_files.zip या PREVIOUS-tardis-img.zip (दोनों मेक डिस्ट के साथ निर्मित, make अपडेट के साथ फ्लैश करने के लिए) में फ्लैश करना होगा। fastboot flashall के साथ फ्लैश किया जाएगा)। किसी अन्य बिल्ड के साथ किसी डिवाइस पर वृद्धिशील पैकेज को स्थापित करने का प्रयास करने पर इंस्टॉलेशन त्रुटि उत्पन्न होती है। जब इंस्टॉल विफल हो जाता है, तो डिवाइस उसी कार्यशील स्थिति में रहता है (पुराना सिस्टम चला रहा है); पैकेज उन सभी फ़ाइलों को छूने से पहले उनकी पिछली स्थिति की पुष्टि करता है जिन्हें वह अपडेट करता है, ताकि डिवाइस आधी अपग्रेड स्थिति में न फंसे।

सर्वोत्तम उपयोगकर्ता अनुभव के लिए, प्रत्येक 3-4 वृद्धिशील अपडेट के लिए एक पूर्ण अपडेट प्रदान करें। इससे उपयोगकर्ताओं को नवीनतम रिलीज़ तक पहुंचने और वृद्धिशील अपडेट के लंबे इंस्टॉल अनुक्रम से बचने में मदद मिलती है।

एकाधिक SKU के लिए OTA पैकेज बनाएं

एंड्रॉइड 11 या उच्चतर विभिन्न SKU वाले कई उपकरणों के लिए एकल OTA पैकेज का उपयोग करने का समर्थन करता है। ऐसा करने के लिए डायनामिक फ़िंगरप्रिंट का उपयोग करने के लिए लक्ष्य डिवाइस को कॉन्फ़िगर करने और पूर्व और बाद की स्थिति प्रविष्टियों में डिवाइस का नाम और फ़िंगरप्रिंट शामिल करने के लिए ओटीए मेटाडेटा (ओटीए टूल का उपयोग करके) को अपडेट करने की आवश्यकता होती है।

SKU के बारे में

SKU का प्रारूप संयुक्त बिल्ड पैरामीटर मानों का एक रूप है और आमतौर पर वर्तमान build_fingerprint पैरामीटर का एक अघोषित उपसमूह है। OEM उन SKU के लिए एकल छवि का उपयोग करते हुए SKU के लिए CDD-अनुमोदित बिल्ड पैरामीटर के किसी भी संयोजन का उपयोग कर सकते हैं। उदाहरण के लिए, निम्नलिखित SKU में कई विविधताएँ हैं:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA डिवाइस स्तर है (जैसे प्रो, प्रीमियम, या प्लस)
  • modifierB हार्डवेयर भिन्नता है (जैसे रेडियो)
  • modifierC वह क्षेत्र है, जो सामान्य हो सकता है (जैसे एनए, ईएमईए, या सीएचएन) या देश- या भाषा-विशिष्ट (जैसे जेपीएन, ईएनजी, या सीएचएन)

कई OEM कई SKU के लिए एक ही छवि का उपयोग करते हैं, फिर डिवाइस बूट होने के बाद रनटाइम पर अंतिम उत्पाद का नाम और डिवाइस फिंगरप्रिंट प्राप्त करते हैं। यह प्रक्रिया प्लेटफ़ॉर्म विकास प्रक्रिया को सरल बनाती है, जिससे मामूली अनुकूलन लेकिन विभिन्न उत्पाद नामों वाले उपकरणों को सामान्य छवियां (जैसे tardis और tardispro ) साझा करने में सक्षम बनाया जाता है।

गतिशील फ़िंगरप्रिंट का उपयोग करें

फ़िंगरप्रिंट ro.product.brand , ro.product.name , और ro.product.device जैसे बिल्ड पैरामीटरों का एक परिभाषित संयोजन है। किसी डिवाइस का फ़िंगरप्रिंट सिस्टम विभाजन फ़िंगरप्रिंट से प्राप्त होता है और इसका उपयोग डिवाइस पर चल रही छवियों (और बाइट्स) के एक विशिष्ट पहचानकर्ता के रूप में किया जाता है। डायनेमिक फ़िंगरप्रिंट बनाने के लिए, डिवाइस बूट समय पर बूटलोडर वेरिएबल्स का मान प्राप्त करने के लिए डिवाइस की build.prop फ़ाइल में डायनेमिक लॉजिक का उपयोग करें, फिर उस डिवाइस के लिए डायनेमिक फ़िंगरप्रिंट बनाने के लिए उस डेटा का उपयोग करें।

उदाहरण के लिए, tardis और tardispro उपकरणों के लिए डायनामिक फ़िंगरप्रिंट का उपयोग करने के लिए, नीचे दिखाए अनुसार निम्न फ़ाइलों को अपडेट करें।

  • निम्न पंक्ति को शामिल करने के लिए odm/etc/build_std.prop फ़ाइल को अद्यतन करें।

    ro.odm.product.device=tardis
    
  • निम्न पंक्ति को शामिल करने के लिए odm/etc/build_pro.prop फ़ाइल को अद्यतन करें।

    ro.odm.product.device=tardispro
    
  • निम्नलिखित पंक्तियों को शामिल करने के लिए odm/etc/build.prop फ़ाइल को अद्यतन करें।

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

ये पंक्तियाँ ro.boot.product.hardware.sku बूटलोडर प्रॉपर्टी (जो केवल पढ़ने के लिए है) के मूल्य के आधार पर डिवाइस का नाम, फ़िंगरप्रिंट और ro.build.fingerprint मान गतिशील रूप से सेट करती हैं।

ओटीए पैकेज मेटाडेटा अपडेट करें

ओटीए पैकेज में एक मेटाडेटा फ़ाइल ( META-INF/com/android/metadata ) होती है जो पैकेज का वर्णन करती है, जिसमें ओटीए पैकेज की पूर्व शर्त और पोस्टकंडीशन भी शामिल है। उदाहरण के लिए, निम्नलिखित कोड tardis डिवाइस को लक्षित करने वाले ओटीए पैकेज के लिए मेटाडेटा फ़ाइल है।

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

pre-device , pre-build-incremental और pre-build मान उस स्थिति को परिभाषित करते हैं जो ओटीए पैकेज स्थापित होने से पहले डिवाइस में होनी चाहिए। post-build-incremental और post-build मान उस स्थिति को परिभाषित करते हैं जो ओटीए पैकेज स्थापित होने के बाद डिवाइस की अपेक्षित स्थिति होती है। pre- और post- फ़ील्ड के मान निम्नलिखित संबंधित बिल्ड गुणों से प्राप्त होते हैं।

  • pre-device मान ro.product.device बिल्ड प्रॉपर्टी से लिया गया है।
  • pre-build-incremental और post-build-incremental मान ro.build.version.incremental बिल्ड प्रॉपर्टी से प्राप्त होते हैं।
  • pre-build और post-build मान ro.build.fingerprint बिल्ड प्रॉपर्टी से प्राप्त होते हैं।

एंड्रॉइड 11 या उच्चतर चलाने वाले उपकरणों पर, आप किसी फ़ाइल के पथ को निर्दिष्ट करने के लिए OTA टूल में --boot_variable_file ध्वज का उपयोग कर सकते हैं जिसमें डिवाइस के डायनामिक फ़िंगरप्रिंट बनाने में उपयोग किए गए रनटाइम चर के मान शामिल हैं। डेटा का उपयोग ओटीए मेटाडेटा को अपडेट करने के लिए किया जाता है ताकि डिवाइस का नाम और फिंगरप्रिंट को pre- और post- स्थितियों में शामिल किया जा सके (पाइप कैरेक्टर | डिलीमीटर के रूप में उपयोग करके)। --boot_variable_file ध्वज में निम्नलिखित सिंटैक्स और विवरण है।

  • सिंटैक्स: --boot_variable_file <path>
  • विवरण: किसी फ़ाइल के लिए पथ निर्दिष्ट करता है जिसमें ro.boot.* गुणों के संभावित मान शामिल होते हैं। जब कुछ ro.product.* गुणों को आयात विवरण द्वारा ओवरराइड किया जाता है, तो संभावित रनटाइम फ़िंगरप्रिंट की गणना करने के लिए उपयोग किया जाता है। फ़ाइल प्रति पंक्ति एक संपत्ति की अपेक्षा करती है जहां प्रत्येक पंक्ति में निम्नलिखित प्रारूप होता है: prop_name=value1,value2

उदाहरण के लिए, जब संपत्ति ro.boot.product.hardware.sku=std,pro है, तो tardis और tardispro उपकरणों के लिए OTA मेटाडेटा नीचे दिखाया गया है।

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

एंड्रॉइड 10 चलाने वाले उपकरणों पर इस कार्यक्षमता का समर्थन करने के लिए, संदर्भ कार्यान्वयन देखें। यह चेंजलिस्ट build.prop फ़ाइल में import विवरणों को सशर्त रूप से पार्स करती है, जो संपत्ति ओवरराइड को अंतिम ओटीए मेटाडेटा में पहचानने और प्रतिबिंबित करने में सक्षम बनाती है।