विक्रेता स्नैपशॉट बनाना

एंड्रॉइड 11 VNDK स्नैपशॉट बिल्ड कलाकृतियों और विक्रेता स्नैपशॉट का समर्थन करता है, जिसका उपयोग आप स्रोत ट्री पर एंड्रॉइड संस्करण की परवाह किए बिना, vendor.img बनाने के लिए कर सकते हैं। यह छवियों के मिश्रित संस्करणों को सक्षम करता है, जैसे पुराने विक्रेता और नई सिस्टम छवि।

मिश्रित छवि संस्करण निम्नलिखित के लिए समर्थित नहीं हैं।

  • Android.mk. क्योंकि सूंग विक्रेता स्नैपशॉट उत्पन्न करता है, Android.mk में परिभाषित मॉड्यूल विक्रेता स्नैपशॉट के रूप में कैप्चर नहीं किए जाते हैं ( Android.mk में SoC-मालिकाना मॉड्यूल भी काम करने की गारंटी नहीं देते हैं)।

  • सेनिटाइजर. विक्रेता और वीएनडीके स्नैपशॉट सैनिटाइज़र का समर्थन नहीं करते क्योंकि सैनिटाइज़र वेरिएंट को अलग से बनाने की आवश्यकता होती है।

विक्रेता स्नैपशॉट के बारे में

विक्रेता स्नैपशॉट OEM के स्वामित्व वाला स्नैपशॉट है। यह /vendor में स्थापित पूर्वनिर्मित C++ मॉड्यूल का एक सेट है लेकिन AOSP पर अनुरक्षित है। पिछले एंड्रॉइड संस्करण के विक्रेता स्नैपशॉट को कैप्चर किए बिना, नए एंड्रॉइड संस्करण में अपग्रेड करने से विक्रेता विभाजन टूट सकता है क्योंकि विक्रेता स्नैपशॉट मॉड्यूल को एपीआई या एबीआई संगतता के बिना हटाया या बदला जा सकता है।

एक विक्रेता स्नैपशॉट में AOSP पर निम्नलिखित मॉड्यूल होते हैं।

  • vendor: true या vendor_available: true
  • vendor_available: true
  • vendor: true या vendor_available: true

निम्नलिखित निर्देशिकाओं के अंतर्गत मॉड्यूल को SoC के स्वामित्व वाला हार्डवेयर कोड माना जाता है और उन्हें अनदेखा कर दिया जाता है।

  • device/
  • vendor/
  • hardware/ को छोड़कर
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

SoC के स्वामित्व वाले हार्डवेयर कोड अन्य निर्देशिकाओं में भी मौजूद हो सकते हैं। इस समय, विक्रेता स्नैपशॉट ऐसे कॉन्फ़िगरेशन का समर्थन नहीं करते हैं.

विक्रेता स्नैपशॉट का निर्माण

निम्नलिखित आदेशों का उपयोग करके एक विक्रेता स्नैपशॉट बनाएं।

. build/envsetup.sh
lunch target
m dist vendor-snapshot

ये आदेश $DIST_DIR में एक vendor-$(TARGET_DEVICE).zip फ़ाइल बनाते हैं। नीचे दिया गया उदाहरण एक विक्रेता स्नैपशॉट ज़िप फ़ाइल दिखाता है।

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • JSON फ़ाइलों में मॉड्यूल नाम, निर्यातित निर्देशिकाएं, init_rc फ़ाइलें और vintf_fragments फ़ाइलें जैसे झंडे होते हैं।
  • configs निर्देशिका में फ़्लैग init_rc और vintf_fragments से .rc और .xml फ़ाइलें शामिल हैं।

विक्रेता स्नैपशॉट स्थापित करना

विक्रेता स्नैपशॉट स्थापित करने के लिए, गंतव्य निर्देशिका पर जाएँ और निम्नलिखित आदेशों का उपयोग करें।

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

यह आदेश /vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp उत्पन्न करता है। निम्नलिखित उदाहरण विक्रेता स्नैपशॉट की निर्देशिका संरचना दिखाता है।

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

विक्रेता छवियाँ बनाना

वीएनडीके स्नैपशॉट बिल्ड कलाकृतियों और एक विक्रेता स्नैपशॉट का उपयोग करके, आप स्रोत ट्री पर एंड्रॉइड संस्करण की परवाह किए बिना, vendor.img का निर्माण कर सकते हैं, जिससे छवियों के मिश्रित संस्करण बनाना संभव हो जाता है। VNDK स्नैपशॉट और विक्रेता स्नैपशॉट दोनों को स्थापित करने के बाद, BOARD_VNDK_VERSION को विक्रेता के संस्करण पर सेट करें। उदाहरण के लिए:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

जब BOARD_VNDK_VERSION को current के अलावा किसी अन्य मान पर सेट किया जाता है, तो बिल्ड सिस्टम:

  • BOARD_VNDK_VERSION के VNDK स्नैपशॉट मॉड्यूल और विक्रेता स्नैपशॉट मॉड्यूल को सक्षम करता है। प्रत्येक स्नैपशॉट मॉड्यूल समान नाम वाले C++ स्रोत मॉड्यूल को ओवरराइड करता है।
  • ro.vndk.version को BOARD_VNDK_VERSION पर सेट करता है।
  • BOARD_VNDK_VERSION के VNDK स्नैपशॉट मॉड्यूल को system_ext पर स्थापित करता है।