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

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

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

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

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

नए उपकरण जारी करना

जब कोई नया उपकरण जारी किया जाता है, तो उसके प्रारंभिक लक्ष्य एफसीएम संस्करण को शीर्ष-स्तरीय <manifest> तत्व में " target-level " विशेषता के रूप में डिवाइस मैनिफ़ेस्ट में निर्धारित और घोषित करने की आवश्यकता होती है।

उदाहरण के लिए, एंड्रॉइड 9 के साथ लॉन्च होने वाले उपकरणों में लक्ष्य एफसीएम संस्करण 3 (इस समय उपलब्ध उच्चतर संस्करण) के बराबर होना चाहिए। डिवाइस मेनिफ़ेस्ट में इसे घोषित करने के लिए:

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

विक्रेता छवि का उन्नयन

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

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

विक्रेता छवि उन्नयन के दौरान, विक्रेता नए एचएएल संस्करण लागू कर सकते हैं, बशर्ते कि एचएएल नाम, इंटरफ़ेस नाम और इंस्टेंस नाम समान हों। उदाहरण के लिए:

  • Google Pixel 2 और Pixel 2 XL डिवाइस Target 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 xml को ऑडियो 2.0 की आवश्यकता है और compatibility_matrix.3.xml को ऑडियो 4.0 की आवश्यकता है, आवश्यकताएँ इस प्रकार हैं:

एफसीएम संस्करण (सिस्टम) लक्ष्य एफसीएम संस्करण (विक्रेता) आवश्यकताएं
2 (8.1) 2 (8.1) ऑडियो 2.0
3(9) 2 (8.1) ऑडियो 2.0 या 4.0
3(9) 3(9) ऑडियो 4.0

लक्ष्य एफसीएम संस्करण का उन्नयन

विक्रेता छवि उन्नयन के दौरान, विक्रेता लक्षित एफसीएम संस्करण को निर्दिष्ट करने के लिए लक्ष्य एफसीएम संस्करण को भी बढ़ा सकते हैं जिसके साथ उन्नत विक्रेता छवि काम कर सकती है। किसी डिवाइस के लक्ष्य FCM संस्करण को टक्कर देने के लिए, विक्रेताओं को यह करना होगा:

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

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

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

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

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

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

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

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

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

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

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

एंड्रॉइड 10 से डिवाइस अपडेट हो रहे हैं

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

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

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

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

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