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