वेंडर के स्नैपशॉट जनरेट करें

Android 11 में VNDK स्नैपशॉट बिल्ड आर्टफ़ैक्ट और वेंडर स्नैपशॉट काम करते हैं. इनका इस्तेमाल, सोर्स ट्री में मौजूद Android वर्शन के बावजूद, vendor.img को बनाने के लिए किया जा सकता है. इससे इमेज के अलग-अलग वर्शन दिखाए जा सकते हैं. जैसे, किसी पुराने वेंडर और नए सिस्टम की इमेज.

इन इमेज के लिए मिले-जुले इमेज वर्शन काम नहीं करते.

  • Android.mk. सूंग, वेंडर का स्नैपशॉट जनरेट करता है. इसलिए, Android.mk में तय किए गए मॉड्यूल, वेंडर स्नैपशॉट के तौर पर कैप्चर नहीं किए जाते. ऐसा करना, Android.mk में मौजूद SoC के मालिकाना हक वाले मॉड्यूल के काम करने की गारंटी नहीं देता है.

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

वेंडर स्नैपशॉट के बारे में जानकारी

वेंडर स्नैपशॉट, OEM के मालिकाना हक वाला स्नैपशॉट होता है. यह पहले से बने C++ मॉड्यूल का एक सेट है, जो /vendor में इंस्टॉल है. हालांकि, यह एओएसपी पर मैनेज किया जाता है. Android के पिछले वर्शन का वेंडर स्नैपशॉट कैप्चर किए बिना, Android के नए वर्शन पर अपग्रेड करने से वेंडर पार्टीशन खराब हो सकता है. इसकी वजह यह है कि वेंडर स्नैपशॉट मॉड्यूल को एपीआई या एबीआई के साथ काम करने की ज़रूरी शर्तों के बिना हटाया या बदला जा सकता है.

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

  • vendor: true या vendor_available: true के साथ शेयर की गई, स्टैटिक, और हेडर लाइब्रेरी
  • vendor_available: true वाली VNDK स्टैटिक लाइब्रेरी
  • 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 फ़ाइल बनाते हैं. नीचे दिए गए उदाहरण में, वेंडर के स्नैपशॉट वाली 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/vVER/$(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)

वेंडर की इमेज बनाना

VNDK स्नैपशॉट बिल्ड आर्टफ़ैक्ट और वेंडर स्नैपशॉट का इस्तेमाल करके, vendor.img बनाया जा सकता है. भले ही, सोर्स ट्री में Android का कोई भी वर्शन हो. इससे इमेज के मिले-जुले वर्शन बनाने की सुविधा मिलती है. 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 के वीएनडीके स्नैपशॉट मॉड्यूल को system_ext पर इंस्टॉल किया जाता है.