डिवाइस मेनिफेस्ट डेवलपमेंट

नए उपकरणों को विकसित और जारी करते समय, विक्रेता डिवाइस मेनिफेस्ट (डीएम) में लक्ष्य एफसीएम संस्करण को परिभाषित और घोषित कर सकते हैं। पुराने उपकरणों के लिए विक्रेता छवि को अपग्रेड करते समय, विक्रेता नए एचएएल संस्करणों को लागू करने और लक्ष्य एफसीएम संस्करण को बढ़ाने का विकल्प चुन सकते हैं।

नए उपकरणों का विकास

डिवाइस को परिभाषित करते समय नए उपकरणों के लिए लक्ष्य FCM संस्करण:

  1. DEVICE_MANIFEST_FILE और PRODUCT_ENFORCE_VINTF_MANIFEST को अपरिभाषित छोड़ दें।
  2. लक्ष्य एफसीएम संस्करण के लिए एचएएल लागू करें।
  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 HAL android.hardware.audio@2.0::IDeviceFactory/default लागू किया।
  • Android 9 के साथ जारी किए गए ऑडियो 4.0 HAL के लिए, Google Pixel 2 और Pixel 2 XL डिवाइस 4.0 HAL में अपग्रेड करने के लिए पूर्ण OTA का उपयोग कर सकते हैं, जो android.hardware.audio@4.0::IDeviceFactory/default लागू करता है।
  • भले ही compatibility_matrix.2.xml केवल ऑडियो 2.0 निर्दिष्ट करता है, लक्ष्य एफसीएम संस्करण 2 के साथ एक विक्रेता छवि की आवश्यकता को कम कर दिया गया है क्योंकि एंड्रॉइड 9 फ्रेमवर्क (एफसीएम संस्करण 3) ऑडियो 4.0 को कार्यक्षमता के मामले में ऑडियो 2.0 एचएएल के प्रतिस्थापन पर विचार करता है। .

संक्षेप में, यह देखते हुए कि compatibility_matrix.2.xml को ऑडियो 2.0 की आवश्यकता है और compatibility_matrix.3.xml को ऑडियो 4.0 की आवश्यकता है, आवश्यकताएं इस प्रकार हैं:

एफसीएम संस्करण (सिस्टम) लक्ष्य 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 संस्करण को निर्दिष्ट करने के लिए लक्ष्य FCM संस्करण को बढ़ा सकते हैं, जिसके साथ उन्नत विक्रेता छवि काम कर सकती है। किसी उपकरण के लक्ष्य FCM संस्करण को टक्कर देने के लिए, विक्रेताओं को यह करना होगा:

  1. लक्ष्य FCM संस्करण के लिए सभी आवश्यक HAL संस्करणों को लागू करें।
  2. डिवाइस मेनिफेस्ट फ़ाइल में एचएएल संस्करण संशोधित करें।
  3. डिवाइस मेनिफेस्ट फ़ाइल में लक्ष्य FCM संस्करण संशोधित करें।
  4. बहिष्कृत एचएएल संस्करण निकालें।

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

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

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

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

OTA के दौरान कर्नेल आवश्यकताओं को अनिवार्य करना

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

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

ये परिवर्तन बिल्ड फ़्लैग PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS का परिचय देते हैं और Android 9 या उससे पहले के संस्करण के साथ लॉन्च किए गए डिवाइस के लिए फ़्लैग को सेट किए बिना छोड़ देते हैं।

  • Android 10 में अपडेट करते समय, Android 9 या उससे पहले के संस्करण चलाने वाले उपकरणों पर OTA क्लाइंट OTA पैकेज में कर्नेल आवश्यकताओं की सही ढंग से जाँच नहीं करते हैं। उत्पन्न ओटीए पैकेज से कर्नेल आवश्यकताओं को छोड़ने के लिए इन परिवर्तनों की आवश्यकता है।
  • Android 11 में अपडेट करते समय, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS बिल्ड फ़्लैग सेट करना वैकल्पिक है ताकि अपडेट पैकेज जनरेट होने पर VINTF संगतता की जाँच की जा सके।

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

Android 10 . से डिवाइस अपडेट कर रहा है

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

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

यदि स्क्रिप्ट आपकी कर्नेल छवि के लिए यह जानकारी निकालने में विफल रहती है, तो निम्न में से कोई एक कार्य करें:

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

आप कर्नेल सूचना निष्कर्षण स्क्रिप्ट का स्रोत कोड देख सकते हैं extract_kernel.py