Android 11 में, वीएनडीके स्नैपशॉट के बिल्ड आर्टफ़ैक्ट और वेंडर स्नैपशॉट काम करते हैं. इनका इस्तेमाल, सोर्स ट्री में मौजूद Android वर्शन के बावजूद, vendor.img
को बनाने के लिए किया जा सकता है. इससे इमेज के अलग-अलग वर्शन इस्तेमाल किए जा सकते हैं. जैसे, किसी पुराने वेंडर और नई सिस्टम इमेज.
अलग-अलग वर्शन वाली इमेज का इस्तेमाल इनके लिए नहीं किया जा सकता.
Android.mk.
Soong, वेंडर स्नैपशॉट जनरेट करता है. इसलिए,Android.mk
में तय किए गए मॉड्यूल, वेंडर स्नैपशॉट के तौर पर कैप्चर नहीं किए जाते. साथ ही,Android.mk
में SoC के मालिकाना हक वाले मॉड्यूल के काम करने की भी गारंटी नहीं है.सैनिटाइज़र. वेंडर और VNDK स्नैपशॉट, सैनिटाइज़र के साथ काम नहीं करते, क्योंकि सैनिटाइज़र के वैरिएंट को अलग से बनाना पड़ता है.
वेंडर के स्नैपशॉट के बारे में जानकारी
वेंडर स्नैपशॉट, ओईएम के मालिकाना हक वाला स्नैपशॉट होता है. यह /vendor
में पहले से इंस्टॉल किए गए C++ मॉड्यूल का एक सेट है, लेकिन इसे 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
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
के वीएनडीके स्नैपशॉट मॉड्यूल और वेंडर स्नैपशॉट मॉड्यूल चालू होते हैं. हर स्नैपशॉट मॉड्यूल, एक ही नाम वाले C++ सोर्स मॉड्यूल को बदल देता है. ro.vndk.version
कोBOARD_VNDK_VERSION
पर सेट करता है.BOARD_VNDK_VERSION
सेsystem_ext
तक के वीएनडीके स्नैपशॉट मॉड्यूल इंस्टॉल करता है.