डिवाइस मेनिफ़ेस्ट डेवलप करना

नए डिवाइसों को डेवलप और रिलीज़ करते समय, वेंडर डिवाइस मेनिफ़ेस्ट (डीएम) में टारगेट FCM वर्शन तय कर सकते हैं और उसकी जानकारी दे सकते हैं. पुराने डिवाइसों के लिए वेंडर इमेज को अपग्रेड करते समय, वेंडर नए एचएएल वर्शन लागू करने और टारगेट किए गए एफ़सीएम वर्शन को बढ़ाने का विकल्प चुन सकते हैं.

नए डिवाइस डेवलप करना

नए डिवाइसों के लिए, डिवाइस के टारगेट किए गए FCM वर्शन को तय करते समय:

  1. DEVICE_MANIFEST_FILE और PRODUCT_ENFORCE_VINTF_MANIFEST की वैल्यू तय न करें.
  2. टारगेट किए गए FCM वर्शन के लिए, एचएएल लागू करें.
  3. डिवाइस की सही मेनिफ़ेस्ट फ़ाइल लिखें.
  4. डिवाइस मेनिफ़ेस्ट फ़ाइल में, टारगेट किया गया FCM वर्शन लिखें.
  5. DEVICE_MANIFEST_FILE सेट करें.
  6. PRODUCT_ENFORCE_VINTF_MANIFEST को true पर सेट करें.

नए डिवाइस रिलीज़ करना

जब कोई नया डिवाइस रिलीज़ किया जाता है, तो उसके शुरुआती टारगेट FCM वर्शन का पता लगाना ज़रूरी होता है. साथ ही, डिवाइस मेनिफ़ेस्ट में, टॉप-लेवल <manifest> एलिमेंट में "target-level" एट्रिब्यूट के तौर पर इसकी जानकारी देनी होती है.

उदाहरण के लिए, Android 9 के साथ लॉन्च होने वाले डिवाइसों में, टारगेट किया गया FCM वर्शन 3 होना चाहिए. फ़िलहाल, यह सबसे नया वर्शन है. डिवाइस मेनिफ़ेस्ट में इसकी जानकारी देने के लिए:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

वेंडर की इमेज अपग्रेड करना

किसी पुराने डिवाइस के लिए वेंडर इमेज को अपग्रेड करते समय, वेंडर नए एचएएल वर्शन लागू करने और टारगेट किए गए एफ़सीएम वर्शन को बढ़ाने का विकल्प चुन सकते हैं.

एचएएल (होम ऑप्टिमाइज़ेशन लेवल) को अपग्रेड करना

वेंडर इमेज अपग्रेड करने के दौरान, वेंडर नए एचएएल वर्शन लागू कर सकते हैं. हालांकि, इसके लिए ज़रूरी है कि एचएएल का नाम, इंटरफ़ेस का नाम, और इंस्टेंस का नाम एक ही हो. उदाहरण के लिए:

  • Google Pixel 2 और Pixel 2 XL डिवाइस, टारगेट किए गए FCM वर्शन 2 के साथ रिलीज़ किए गए हैं. इनमें ज़रूरी ऑडियो 2.0 एचएएल को लागू किया गया हैandroid.hardware.audio@2.0::IDeviceFactory/default.
  • Android 9 के साथ रिलीज़ किए गए ऑडियो 4.0 एचएएल के लिए, Google Pixel 2 और Pixel 2 XL डिवाइसों को 4.0 एचएएल पर अपग्रेड करने के लिए, पूरे ओटीए का इस्तेमाल किया जा सकता है. यह एचएएल, android.hardware.audio@4.0::IDeviceFactory/default को लागू करता है.
  • भले ही compatibility_matrix.2.xml में सिर्फ़ ऑडियो 2.0 के बारे में बताया गया हो, लेकिन टारगेट किए गए FCM वर्शन 2 वाली वेंडर इमेज की ज़रूरी शर्तों को कम कर दिया गया है. इसकी वजह यह है कि Android 9 फ़्रेमवर्क (FCM वर्शन 3), फ़ंक्शन के मामले में ऑडियो 4.0 को ऑडियो 2.0 एचएएल की जगह मानता है.

खास जानकारी के लिए, compatibility_matrix.2.xml के लिए ऑडियो 2.0 और compatibility_matrix.3.xml के लिए ऑडियो 4.0 की ज़रूरत होती है. इसलिए, ज़रूरी शर्तें ये हैं:

FCM वर्शन (सिस्टम) टारगेट किया गया FCM वर्शन (वेंडर) ज़रूरी शर्तें
2 (8.1) 2 (8.1) Audio 2.0
3 (9) 2 (8.1) Audio 2.0 या 4.0
3 (9) 3 (9) Audio 4.0

टारगेट किए गए FCM वर्शन को अपग्रेड करना

वेंडर इमेज को अपग्रेड करने के दौरान, वेंडर टारगेट किए गए FCM वर्शन को भी बढ़ा सकते हैं. इससे, वेंडर यह तय कर सकते हैं कि अपग्रेड की गई वेंडर इमेज किस टारगेट किए गए FCM वर्शन के साथ काम कर सकती है. किसी डिवाइस के टारगेट FCM वर्शन को अपडेट करने के लिए, वेंडर को ये काम करने होंगे:

  1. टारगेट किए गए FCM वर्शन के लिए, ज़रूरी सभी नए एचएएल वर्शन लागू करें.
  2. डिवाइस मेनिफ़ेस्ट फ़ाइल में, एचएएल वर्शन में बदलाव करें.
  3. डिवाइस मेनिफ़ेस्ट फ़ाइल में, टारगेट किए गए FCM वर्शन में बदलाव करें.
  4. HAL के पुराने वर्शन हटाएं.

उदाहरण के लिए, Google Pixel और Pixel XL डिवाइस, Android 7.0 के साथ लॉन्च किए गए थे. इसलिए, उनके टारगेट FCM वर्शन कम से कम लेगसी होना चाहिए. हालांकि, डिवाइस के मेनिफ़ेस्ट में, टारगेट FCM वर्शन 2 के बारे में बताया गया है, क्योंकि वेंडर इमेज को compatibility_matrix.2.xml के मुताबिक अपडेट किया गया है:

<manifest version="1.0" type="device" target-level="2">

अगर वेंडर, ज़रूरी सभी नए एचएएल वर्शन लागू नहीं करते हैं या इस्तेमाल में न होने वाले एचएएल वर्शन को नहीं हटाते हैं, तो टारगेट एफ़सीएम वर्शन को अपग्रेड नहीं किया जा सकता.

उदाहरण के लिए, Google Pixel 2 और Pixel 2 XL डिवाइसों के लिए, FCM का टारगेट वर्शन 2 है. ये compatibility_matrix.3.xml के लिए ज़रूरी कुछ एचएएल लागू करते हैं, जैसे कि ऑडियो 4.0, हेल्थ 2.0 वगैरह. हालांकि, ये android.hardware.radio.deprecated@1.0 को नहीं हटाते, जो FCM के वर्शन 3 (Android 9) में काम नहीं करता. इसलिए, ये डिवाइस टारगेट किए गए FCM वर्शन को 3 पर अपग्रेड नहीं कर सकते.

ओटीए के दौरान कर्नेल से जुड़ी ज़रूरी शर्तें लागू करना

Android 9 या उससे पहले के वर्शन वाले डिवाइसों को अपडेट करना

Android 9 या उससे पहले के वर्शन वाले डिवाइसों पर, पक्का करें कि इन CLs को चुना गया हो:

इन बदलावों के बाद, बिल्ड फ़्लैग PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS का इस्तेमाल किया जाएगा. साथ ही, Android 9 या उससे पहले के वर्शन वाले डिवाइसों के लिए, फ़्लैग को सेट नहीं किया जाएगा.

  • Android 10 पर अपडेट करते समय, Android 9 या इससे पहले के वर्शन पर काम करने वाले डिवाइसों पर, ओटीए क्लाइंट, ओटीए पैकेज में मौजूद कर्नेल की ज़रूरी शर्तों की सही तरीके से जांच नहीं करते. जनरेट किए गए ओटीए पैकेज से, कर्नेल की ज़रूरी शर्तों को हटाने के लिए ये बदलाव ज़रूरी हैं.
  • Android 11 पर अपडेट करते समय, अपडेट पैकेज जनरेट होने पर, VINTF के साथ काम करने की जांच करने के लिए, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS बिल्ड फ़्लैग सेट करना ज़रूरी नहीं है.

इस बिल्ड फ़्लैग के बारे में ज़्यादा जानने के लिए, Android 10 से डिवाइसों को अपडेट करना लेख पढ़ें.

डिवाइसों को Android 10 पर अपडेट करना

Android 10 में एक नया बिल्ड फ़्लैग, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS जोड़ा गया है. Android 10 के साथ लॉन्च किए गए डिवाइसों के लिए, यह फ़्लैग अपने-आप true पर सेट हो जाता है. फ़्लैग को true पर सेट करने पर, एक स्क्रिप्ट इंस्टॉल की गई कर्नेल इमेज से कर्नेल वर्शन और कर्नेल कॉन्फ़िगरेशन को निकालती है.

  • Android 10 पर अपडेट करते समय, ओटीए अपडेट पैकेज में कर्नेल वर्शन और कॉन्फ़िगरेशन शामिल होता है. Android 10 पर काम करने वाले डिवाइसों पर, ओटीए क्लाइंट इस जानकारी को पढ़कर, डिवाइस के साथ काम करने की सुविधा की जांच करते हैं.
  • Android 11 पर अपडेट करते समय, ओटीए पैकेज जनरेशन, डिवाइस के साथ काम करने की जांच करने के लिए, कर्नेल वर्शन और कॉन्फ़िगरेशन को पढ़ता है.

अगर स्क्रिप्ट आपकी कर्नेल इमेज के लिए यह जानकारी हासिल नहीं कर पाती है, तो इनमें से कोई एक काम करें:

  • अपने कर्नेल फ़ॉर्मैट के साथ काम करने के लिए स्क्रिप्ट में बदलाव करें और AOSP में योगदान दें.
  • BOARD_KERNEL_VERSION को कर्नेल वर्शन पर और BOARD_KERNEL_CONFIG_FILE को बनाई गई कर्नेल कॉन्फ़िगरेशन फ़ाइल .config के पाथ पर सेट करें. कर्नेल इमेज अपडेट होने पर, दोनों वैरिएबल को अपडेट करना ज़रूरी है.
  • इसके अलावा, कर्नेल की ज़रूरी शर्तों की जांच को छोड़ने के लिए, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS को false पर सेट करें. ऐसा करने का सुझाव नहीं दिया जाता, क्योंकि कोई भी गड़बड़ी छिपी रहती है और अपडेट के बाद VTS टेस्ट चलाने पर ही पता चलती है.

आपके पास, कर्नेल की जानकारी निकालने वाली स्क्रिप्ट का सोर्स कोड देखने का विकल्प है extract_kernel.py.