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

नए डिवाइसों को डेवलप और रिलीज़ करते समय, वेंडर डिवाइस मेनिफ़ेस्ट (डीएम) में टारगेट किए गए FCM वर्शन को तय और एलान कर सकते हैं. पुराने डिवाइसों के लिए वेंडर इमेज को अपग्रेड करते समय, वेंडर नए HAL वर्शन लागू कर सकते हैं. साथ ही, टारगेट किए गए 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 के शुरुआती वर्शन का पता लगाना ज़रूरी होता है. साथ ही, डिवाइस के मेनिफ़ेस्ट में इसे "target-level" एट्रिब्यूट के तौर पर घोषित करना होता है. यह टॉप-लेवल के <manifest> एलिमेंट में होता है.

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

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

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

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

एचएएल अपग्रेड करना

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

  • Google Pixel 2 और Pixel 2 XL डिवाइस, टारगेट किए गए FCM वर्शन 2 के साथ रिलीज़ किए गए थे. इसमें ज़रूरी ऑडियो 2.0 HAL android.hardware.audio@2.0::IDeviceFactory/default लागू किया गया था.
  • Android 9 के साथ रिलीज़ हुए ऑडियो 4.0 HAL के लिए, Google Pixel 2 और Pixel 2 XL डिवाइस, 4.0 HAL पर अपग्रेड करने के लिए फ़ुल ओटीए का इस्तेमाल कर सकते हैं. यह 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) ऑडियो 2.0
3 (9) 2 (8.1) ऑडियो 2.0 या 4.0
3 (9) 3 (9) ऑडियो 4.0

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

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

  1. FCM के टारगेट वर्शन के लिए, ज़रूरी HAL के सभी नए वर्शन लागू करें.
  2. डिवाइस मेनिफ़ेस्ट फ़ाइल में HAL वर्शन में बदलाव करें.
  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">

अगर वेंडर, ज़रूरी HAL के सभी नए वर्शन लागू नहीं करते हैं या बंद किए गए HAL के वर्शन नहीं हटाते हैं, तो टारगेट किए गए FCM वर्शन को अपग्रेड नहीं किया जा सकता.

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

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

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

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

इन बदलावों में, बिल्ड फ़्लैग 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 पर काम करने वाले डिवाइसों पर मौजूद OTA क्लाइंट, इस जानकारी को पढ़ते हैं. इससे वे यह पता लगाते हैं कि डिवाइस पर अपडेट काम करेगा या नहीं.
  • Android 11 पर अपडेट करते समय, OTA पैकेज जनरेशन, कर्नल वर्शन और कॉन्फ़िगरेशन को पढ़कर यह पता लगाता है कि डिवाइस पर अपडेट किया जा सकता है या नहीं.

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

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

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