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

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

Android 11 या उसके बाद के वर्शन वाले डिवाइसों के लिए, अलग-अलग एसकेयू वाले कई डिवाइसों के लिए एक OTA पैकेज. इसके लिए ज़रूरी है टारगेट डिवाइसों को डाइनैमिक फ़िंगरप्रिंट का इस्तेमाल करने के लिए कॉन्फ़िगर करना और डिवाइस को शामिल करने के लिए, ओटीए मेटाडेटा को अपडेट करना नाम और फ़िंगरप्रिंट का इस्तेमाल किया जा सकता है.

Android 8.0 के साथ काम न करने वाले, नॉन-A/B डिवाइसों के लिए काम करने वाले फ़ाइल आधारित ओटीए पैकेज, जिनमें यह ज़रूरी है इसके बजाय, ब्लॉक-आधारित ओटीए पैकेज का इस्तेमाल करें. यहां की यात्रा पर हूं Android 7.x या इससे पहले के वर्शन पर चलने वाले ब्लॉक-आधारित ओटीए पैकेज या डिवाइस जनरेट करें, पास ota_from_target_files पैरामीटर के लिए, --block विकल्प.

सभी अपडेट तैयार करें

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

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

make dist, $OUT में एक पूरा ओटीए पैकेज बनाता है. नतीजे की .zip फ़ाइल इसमें tardis डिवाइस के लिए OTA पैकेज बनाने के लिए ज़रूरी सभी चीज़ें मौजूद हैं. आप ota_from_target_files को Python बाइनरी के रूप में भी बना सकते हैं और इसे या तो फ़ुल या इंंक्रीमेंटल पैकेज बनाना.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files पाथ को $PATH में सेट अप किया गया है और इससे मिला Python बाइनरी, out/ डायरेक्ट्री में मौजूद है.

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

समय-समय पर अपडेट पाएं

इंक्रीमेंटल अपडेट एक ओटीए पैकेज होता है, जिसमें डेटा के लिए बाइनरी पैच होते हैं डिवाइस पर पहले से मौजूद हैं. समय-समय पर अपडेट वाले पैकेज आम तौर पर छोटे होते हैं क्योंकि उन्हें बदली नहीं गई फ़ाइलों को शामिल करने की ज़रूरत नहीं होती. साथ ही, जब बदली गई फ़ाइलें जो अक्सर अपने पिछले वर्शन के बहुत समान होते हैं, तब पैकेज में दो फ़ाइलों के बीच अंतर की एन्कोडिंग.

इंंक्रीमेंटल अपडेट पैकेज को सिर्फ़ उन डिवाइसों पर इंस्टॉल किया जा सकता है जिनमें सोर्स बिल्ड का इस्तेमाल पैकेज बनाने में किया गया. समय के हिसाब से अपडेट करने के लिए, आपको पिछले बिल्ड की 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 एमबी).

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

बेहतरीन उपयोगकर्ता अनुभव के लिए, हर 3 से 4 बढ़ोतरी के लिए पूरा अपडेट ऑफ़र करें अपडेट. इससे लोगों को नई रिलीज़ देखने और लंबे समय से बचने में मदद मिलती है इंंक्रीमेंटल अपडेट का क्रम इंस्टॉल करें.

एक से ज़्यादा SKU के लिए ओटीए पैकेज बनाना

Android 11 या उसके बाद के वर्शन के लिए, एक ओटीए का इस्तेमाल किया जा सकता है अलग-अलग एसकेयू वाले कई डिवाइसों के लिए एक पैकेज तैयार करता है. इसके लिए, आपको टारगेट किए गए डिवाइस, डाइनैमिक फ़िंगरप्रिंट का इस्तेमाल करते हैं और ओटीए मेटाडेटा अपडेट करते हैं (ओटीए टूल का इस्तेमाल करके) ताकि पहले और बाद में डिवाइस का नाम और फ़िंगरप्रिंट शामिल किया जा सके शर्त एंट्री.

SKU के बारे में जानकारी

SKU का फ़ॉर्मैट, कंबाइंड बिल्ड का अलग-अलग वर्शन है पैरामीटर वैल्यू और आम तौर पर, यह मौजूदा build_fingerprint पैरामीटर का ऐसा सबसेट होता है जिसका एलान नहीं किया गया है. OEM किसी SKU के लिए, सीसीडी से मंज़ूरी पा चुके बिल्ड पैरामीटर के किसी भी कॉम्बिनेशन का इस्तेमाल कर सकते हैं साथ ही, उन SKU के लिए एक ही इमेज का इस्तेमाल करना होगा. उदाहरण के लिए, इस SKU में एक से ज़्यादा वैरिएंट बनाएं:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA, डिवाइस के लेवल का है (जैसे कि Pro, Premium या Premium के फ़ायदे)
  • modifierB हार्डवेयर वैरिएशन है (जैसे कि रेडियो)
  • modifierC क्षेत्र है जो सामान्य हो सकता है (जैसे NA, EMEA या CHN ) या देश- या भाषा-विशिष्ट (जैसे JPN, ENG या CHN)

कई 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.build.fingerprint मान ro.boot.product.hardware.sku बूटलोडर प्रॉपर्टी (जो सिर्फ़ पढ़ने के लिए है).

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

एक ओटीए पैकेज में एक मेटाडेटा फ़ाइल (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 वैल्यू, डिवाइस की स्थिति के बारे में बताती हैं OTA पैकेज के इंस्टॉल होने के बाद होने की उम्मीद की जाती है. pre- और post- फ़ील्ड, इन बिल्ड प्रॉपर्टी से लिए जाते हैं.

  • pre-device की वैल्यू, ro.product.device की बिल्ड प्रॉपर्टी से ली जाती है.
  • pre-build-incremental और post-build-incremental वैल्यू हासिल की गई हैं ro.build.version.incremental बिल्ड प्रॉपर्टी से लिया गया है.
  • pre-build और post-build की वैल्यू यहां से ली जाती हैं: ro.build.fingerprint बिल्ड प्रॉपर्टी.

Android 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 डिवाइसों के लिए ओटीए मेटाडेटा की जानकारी यहां दी गई है.

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

Android 10 वाले डिवाइसों पर यह सुविधा इस्तेमाल करने के लिए, रेफ़रंस लागू करना. यह बदलाव की सूची, build.prop में import स्टेटमेंट को शर्त के साथ पार्स करती है फ़ाइल की मदद से प्रॉपर्टी में बदलाव किया जा सकता है. इसकी मदद से, फ़ाइनल ओटीए मेटाडेटा.