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

Android 11 में, वीएनडीके स्नैपशॉट बिल्ड आर्टफ़ैक्ट और वेंडर स्नैपशॉट की सुविधा उपलब्ध है. इनका इस्तेमाल करके, सोर्स ट्री पर Android के किसी भी वर्शन के लिए vendor.img बनाया जा सकता है. इससे इमेज के मिक्स वर्शन बनाए जा सकते हैं. जैसे, पुराना वेंडर और नई सिस्टम इमेज.

इमेज के मिक्स वर्शन, इनके लिए उपलब्ध नहीं हैं.

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

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

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

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

वेंडर स्नैपशॉट में, 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

सोसी के मालिकाना हक वाले हार्डवेयर कोड, अन्य डायरेक्ट्री में भी मौजूद हो सकते हैं. फ़िलहाल, वेंडर स्नैपशॉट में इस तरह के कॉन्फ़िगरेशन की सुविधा उपलब्ध नहीं है.

वेंडर स्नैपशॉट बनाना

वेंडर स्नैपशॉट बनाने के लिए, इन कमांड का इस्तेमाल करें.

. 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/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)

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

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

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

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

  • BOARD_VNDK_VERSION के वीएनडीके स्नैपशॉट मॉड्यूल और वेंडर स्नैपशॉट मॉड्यूल को चालू करता है. हर स्नैपशॉट मॉड्यूल, उसी नाम वाले C++ सोर्स मॉड्यूल को बदल देता है.
  • ro.vndk.version को BOARD_VNDK_VERSION पर सेट करता है.
  • BOARD_VNDK_VERSION के वीएनडीके स्नैपशॉट मॉड्यूल को system_ext में इंस्टॉल करता है.