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

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

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

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

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

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

वेंडर स्नैपशॉट, ओईएम के मालिकाना हक वाला स्नैपशॉट होता है. यह 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 फ़ाइल बनती है. यहां दिए गए उदाहरण में, वेंडर की खास जानकारी वाली 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 के वीएनडीके स्नैपशॉट मॉड्यूल और वेंडर स्नैपशॉट मॉड्यूल को चालू करता है. हर स्नैपशॉट मॉड्यूल, एक ही नाम वाले C++ सोर्स मॉड्यूल को बदल देता है.
  • ro.vndk.version को BOARD_VNDK_VERSION पर सेट करता है.
  • यह BOARD_VNDK_VERSION से system_ext तक के वीएनडीके स्नैपशॉट मॉड्यूल इंस्टॉल करता है.