वीएनडीके स्नैपशॉट बनाना

VNDK स्नैपशॉट Android रिलीज़ के लिए VNDK-कोर और VNDK-SP libs का एक सेट है। आप केवल सिस्टम विभाजन को अपग्रेड कर सकते हैं यदि system.img vendor.img के लिए आवश्यक संबंधित VNDK स्नैपशॉट शामिल है।

आधिकारिक VNDK स्नैपशॉट एंड्रॉइड बिल्ड सर्वर पर स्वचालित रूप से बनाए जाते हैं और एंड्रॉइड सोर्स ट्री के /prebuilts/vndk में चेक किए जाते हैं। विकास उद्देश्यों के लिए, आप स्थानीय स्तर पर VNDK स्नैपशॉट बना सकते हैं। VNDK स्नैपशॉट आर्म, आर्म64, x86, और x86_64 TARGET_ARCH फ्लेवर के लिए समर्थित हैं।

स्नैपशॉट बनाना

एंड्रॉइड बिल्ड सर्वर निम्नलिखित बिल्ड पैरामीटर और बिल्ड कमांड का उपयोग करके बिल्ड आर्टिफैक्ट और वीएनडीके स्नैपशॉट फ़ाइलें उत्पन्न करता है।

पैरामीटर बनाएं

निर्माण लक्ष्य का नाम vndk है। बिल्ड लक्ष्य कॉन्फ़िगरेशन नीचे दिखाया गया है।

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH जेनेरिक सिस्टम इमेज (GSI) लक्ष्य आर्क ( arm , arm64 , x86 , x86_64 ) के समान है।
  • TARGET_ARCH_VARIANT . स्नैपशॉट v28 (एंड्रॉइड 9) और उच्चतर के लिए, ऊपर सूचीबद्ध लोकप्रिय कॉन्फ़िगरेशन शामिल हैं।

आदेश बनाएँ

आधिकारिक स्नैपशॉट के लिए, एंड्रॉइड 9 और उच्चतर में vndk.mk में एक नमूना लक्ष्य ( vndk ) शामिल है जो VNDK स्नैपशॉट को $DIST_DIR पर बनाता और आउटपुट करता है। स्नैपशॉट ज़िप फ़ाइल android-vndk-$(TARGET_ARCH).zip प्रारूप का उपयोग करती है। उदाहरण के लिए:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

एंड्रॉइड बिल्ड सर्वर निम्नलिखित कमांड के साथ सभी समर्थित आर्क फ्लेवर बनाने के लिए build.sh स्क्रिप्ट का उपयोग करता है।

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

Android संस्करण के लिए VNDK स्नैपशॉट उस संस्करण की रिलीज़ शाखा से उत्पन्न होता है।

स्थानीय स्तर पर निर्माण

विकास के दौरान, आप निम्न आदेशों के साथ स्थानीय स्रोत ट्री से VNDK स्नैपशॉट बना सकते हैं।

  • सभी समर्थित आर्क को एक साथ बनाने के लिए, निम्नलिखित बिल्ड स्क्रिप्ट ( build.sh ) को निष्पादित करें।
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • एक विशिष्ट TARGET_ARCH बनाने के लिए, निम्नलिखित कमांड निष्पादित करें।
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

संबंधित android-vndk-$(TARGET_ARCH).zip फ़ाइल $DIST_DIR के अंतर्गत बनाई गई है।

स्नैपशॉट फ़ाइलें

VNDK स्नैपशॉट में निम्नलिखित फ़ाइलें शामिल हैं।

  • VNDK-कोर और VNDK-SP साझा लाइब्रेरी का विक्रेता संस्करण।
    • एलएल-एनडीके साझा libs की आवश्यकता नहीं है क्योंकि वे पिछड़े संगत हैं।
    • 64 बिट लक्ष्यों के लिए, TARGET_ARCH और TARGET_2ND_ARCH दोनों लाइब्रेरी बनाई और शामिल की गई हैं।
  • VNDK-कोर, VNDK-SP, LL-NDK, और VNDK-निजी पुस्तकालयों की सूची [vndkcore|vndksp|llndk|vndkprivate].libraries.txt पर है।
  • लाइसेंस फ़ाइलें.
  • module_paths.txt । सभी वीएनडीके पुस्तकालयों के लिए मॉड्यूल पथ रिकॉर्ड करता है, जो यह जांचने के लिए आवश्यक है कि जीपीएल परियोजनाओं में किसी दिए गए एंड्रॉइड स्रोत ट्री में जारी किए गए स्रोत हैं।

किसी दिए गए VNDK स्नैपशॉट ज़िप फ़ाइल, android-vndk-$(TARGET_ARCH).zip के लिए, VNDK प्रीबिल्ट लाइब्रेरीज़ को ABI बिटनेस के अनुसार arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) नामक अलग-अलग निर्देशिकाओं में समूहीकृत किया गया है। उदाहरण के लिए, android-vndk-arm64.zip के लिए, 64-बिट libs को arch-arm64-armv8-a के अंतर्गत रखा गया है और 32-बिट libs को arch-arm-armv8-a के अंतर्गत रखा गया है। नीचे दिया गया उदाहरण एक Arm64 ( TARGET_ARCH=arm64 ) VNDK स्नैपशॉट ज़िप फ़ाइल ( android-vndk-arm64.zip ) के लिए निर्देशिका संरचना दिखाता है।

VNDK स्नैपशॉट निर्देशिका संरचना
चित्र 1. VNDK स्नैपशॉट निर्देशिका संरचना (उदाहरण)

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

एंड्रॉइड 11 विक्रेता स्नैपशॉट का समर्थन करता है, जो आपको स्रोत ट्री पर एंड्रॉइड संस्करण की परवाह किए बिना, vendor.img बनाने में सक्षम बनाता है। एक डिफ़ॉल्ट VNDK स्नैपशॉट में साझा लाइब्रेरी फ़ाइलें ( .so ) होती हैं जिन्हें डिवाइस पर इंस्टॉल किया जा सकता है और फिर रनटाइम में विक्रेता C++ बायनेरिज़ से लिंक किया जा सकता है। उस VNDK स्नैपशॉट के विरुद्ध निर्माण करने के लिए, आपको हेडर फ़ाइलों और निर्यातित फ़्लैग जैसी अतिरिक्त कलाकृतियों की आवश्यकता होगी।

स्थानीय स्रोत ट्री से ऐसी कलाकृतियाँ (VNDK स्नैपशॉट के साथ) उत्पन्न करने के लिए, निम्नलिखित कमांड का उपयोग करें।

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

यह कमांड $DIST_DIR के अंतर्गत android-vndk-$(TARGET_ARCH).zip फ़ाइलें बनाता है। नीचे दिया गया उदाहरण बिल्ड कलाकृतियों के साथ एक आर्म64 वीएनडीके स्नैपशॉट ज़िप फ़ाइल है। बोल्ड की गई फ़ाइलें सामान्य VNDK स्नैपशॉट (चित्र 1 में दिखाई गई) में नई जोड़ी गई फ़ाइलें हैं और इसमें JSON फ़ाइलें (जो प्रत्येक लाइब्रेरी के cflags संग्रहीत करती हैं) और सभी निर्यातित हेडर फ़ाइलें शामिल हैं।

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

VNDK स्नैपशॉट अपलोड हो रहा है

VNDK स्नैपशॉट को /prebuilts/vndk/v VER के अंतर्गत स्रोत ट्री में जांचा जाता है, जहां VER VNDK स्नैपशॉट के संस्करण के बराबर है (जो संबंधित एंड्रॉइड रिलीज़ के SDK संस्करण का अनुसरण करता है)। उदाहरण के लिए, Android 8.1 VNDK स्नैपशॉट का संस्करण 27 है।

update.py स्क्रिप्ट का उपयोग करना

update.py स्क्रिप्ट ( /development/vndk/snapshot/update.py ) स्रोत ट्री में प्रीबिल्ट VNDK स्नैपशॉट जोड़ने की प्रक्रिया को स्वचालित करती है। यह स्वचालित रूप से बिल्ड कलाकृतियों का पता लगाता है और जेनरेट किए गए Android.bp में संबंधित गुणों को उचित रूप से भरता है। यह स्क्रिप्ट निम्नलिखित कार्य करती है:

  1. /prebuilts/vndk/v VER में, नई Git शाखा बनाने के लिए repo start उपयोग करता है।
  2. VNDK स्नैपशॉट बिल्ड कलाकृतियों को लाता और खोलता है।
  3. बिल्ड फ़ाइलें ( Android.bp ) स्वतः उत्पन्न करने के लिए gen_buildfiles.py चलाता है।
  4. जनरल पब्लिक लाइसेंस (जीपीएल) के तहत लाइसेंस प्राप्त पूर्वनिर्मित पुस्तकालयों के वर्तमान स्रोत ट्री में जारी किए गए स्रोतों को सत्यापित करने के लिए check_gpl_license.py चलाता है।
  5. नए परिवर्तन करने के लिए git commit उपयोग करता है।

स्थानीय रूप से निर्मित VNDK स्नैपशॉट का उपयोग करना

आप स्थानीय रूप से निर्मित VNDK स्नैपशॉट का भी उपयोग कर सकते हैं। जब --local विकल्प निर्दिष्ट किया जाता है, तो update.py स्क्रिप्ट निर्दिष्ट स्थानीय निर्देशिका (एंड्रॉइड बिल्ड सर्वर के बजाय) से VNDK स्नैपशॉट बिल्ड कलाकृतियों को लाती है, जिसमें development/vndk/snapshot/build.sh से उत्पन्न android-vndk-$(TARGET_ARCH).zip फ़ाइलें होती हैं। development/vndk/snapshot/build.sh . --local विकल्प के साथ, update.py स्क्रिप्ट GPL लाइसेंस जाँच और git commit चरणों को छोड़ देती है।

वाक्य - विन्यास:

python update.py VER --local local_path

/path/to/local/dir में स्थानीय बिल्ड कलाकृतियों के साथ Android 8.1 VNDK स्नैपशॉट को अपडेट करने के लिए उदाहरण आदेश:

python update.py 27 --local /path/to/local/dir

स्थानीय रूप से निर्मित VNDK स्नैपशॉट की उदाहरण निर्देशिका संरचना:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
यदि कलाकृतियों को VNDK_SNAPSHOT_BUILD_ARTIFACTS=true के साथ बनाया गया था तो स्थानीय बिल्ड कलाकृतियाँ स्वचालित रूप से जुड़ जाती हैं।

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

सिस्टम छवि BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS , और ro.vndk.version में जानकारी का उपयोग करके बिल्ड समय पर VNDK स्नैपशॉट लाइब्रेरी स्थापित करती है। आप निम्न विकल्पों में से किसी एक का उपयोग करके यह नियंत्रित कर सकते हैं कि प्रीबिल्ट VNDK स्नैपशॉट निर्देशिकाओं (उदाहरण के लिए, /prebuilts/vndk/v29 या /prebuilts/vndk/v30 ) से कौन से VNDK स्नैपशॉट इंस्टॉल किए जाएं।

  • विकल्प 1: BOARD_VNDK_VERSION । वर्तमान विक्रेता मॉड्यूल के निर्माण के लिए स्नैपशॉट मॉड्यूल का उपयोग करें और केवल स्नैपशॉट मॉड्यूल स्थापित करें जो विक्रेता मॉड्यूल के लिए आवश्यक हैं।
  • विकल्प 2: PRODUCT_EXTRA_VNDK_VERSIONS । वर्तमान विक्रेता मॉड्यूल की परवाह किए बिना VNDK स्नैपशॉट मॉड्यूल स्थापित करें। यह PRODUCT_EXTRA_VNDK_VERSIONS में सूचीबद्ध पूर्वनिर्मित VNDK स्नैपशॉट को बिल्ड समय पर किसी अन्य मॉड्यूल से लिंक किए बिना स्थापित करता है।

BOARD_VNDK_VERSION सेटिंग

BOARD_VNDK_VERSION VNDK संस्करण दिखाता है जिसे बनाने के लिए वर्तमान विक्रेता मॉड्यूल की आवश्यकता होती है। यदि BOARD_VNDK_VERSION /prebuilts/vndk निर्देशिका में VNDK स्नैपशॉट संस्करण उपलब्ध है, तो BOARD_VNDK_VERSION में दर्शाया गया VNDK स्नैपशॉट स्थापित है। यदि VNDK स्नैपशॉट निर्देशिका में उपलब्ध नहीं है, तो एक बिल्ड त्रुटि उत्पन्न होती है।

BOARD_VNDK_VERSION को परिभाषित करने से VNDK मॉड्यूल भी स्थापित किए जा सकते हैं। विक्रेता मॉड्यूल निर्माण समय पर BOARD_VNDK_VERSION में परिभाषित VNDK स्नैपशॉट संस्करण के साथ लिंक होते हैं (यह सिस्टम स्रोत में वर्तमान VNDK मॉड्यूल का निर्माण नहीं करता है)। रिपॉजिटरी से पूर्ण स्रोत ट्री डाउनलोड करते समय, सिस्टम और विक्रेता दोनों स्रोत एक ही एंड्रॉइड रिलीज़ पर आधारित होते हैं।

PRODUCT_EXTRA_VNDK_VERSIONS सेट करना

PRODUCT_EXTRA_VNDK_VERSIONS स्थापित किए जाने वाले अतिरिक्त VNDK संस्करणों को सूचीबद्ध करता है। आम तौर पर वर्तमान विक्रेता विभाजन के लिए एक VNDK स्नैपशॉट होना पर्याप्त है। हालाँकि, कुछ मामलों में आपको एक सिस्टम छवि में एकाधिक स्नैपशॉट शामिल करने की आवश्यकता हो सकती है। उदाहरण के लिए, जीएसआई के पास एक सिस्टम छवि के साथ कई विक्रेता संस्करणों का समर्थन करने के लिए कई स्नैपशॉट हैं। PRODUCT_EXTRA_VNDK_VERSIONS सेट करके, आप BOARD_VNDK_VERSION में VNDK संस्करण के अतिरिक्त VNDK स्नैपशॉट मॉड्यूल स्थापित कर सकते हैं।

यदि PRODUCT_EXTRA_VNDK_VERSIONS के पास संस्करणों की एक विशिष्ट सूची है, तो बिल्ड सिस्टम prebuilts/vndk निर्देशिका में संस्करण सूची के प्रीबिल्ट स्नैपशॉट की तलाश करता है। यदि बिल्ड सिस्टम सभी सूचीबद्ध स्नैपशॉट का पता लगाता है, तो यह उन स्नैपशॉट फ़ाइलों को प्रत्येक VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER पर स्थापित करता है। गुम संस्करण एक बिल्ड त्रुटि उत्पन्न करते हैं।

VNDK मॉड्यूल बिल्ड समय पर विक्रेता मॉड्यूल से लिंक नहीं होते हैं, लेकिन रनटाइम पर उपयोग किए जा सकते हैं यदि विक्रेता विभाजन में विक्रेता मॉड्यूल को स्थापित VNDK संस्करणों में से एक की आवश्यकता होती है। PRODUCT_EXTRA_VNDK_VERSIONS केवल तभी मान्य है जब BOARD_VNDK_VERSION परिभाषित हो।

प्लेटफ़ॉर्म_VNDK_संस्करण

PLATFORM_VNDK_VERSION सिस्टम स्रोत में वर्तमान VNDK मॉड्यूल के लिए VNDK संस्करण को परिभाषित करता है। मान स्वचालित रूप से सेट किया गया है:

  • रिलीज़ से पहले, PLATFORM_VNDK_VERSION PLATFORM_VERSION_CODENAME के ​​रूप में सेट किया गया है।
  • रिलीज के समय, PLATFORM_SDK_VERSION को PLATFORM_VNDK_VERSION में कॉपी किया जाता है।

Android संस्करण जारी होने के बाद, वर्तमान VNDK लाइब्रेरीज़ को VNDK APEX ( /system/apex/com.android.vndk.v VER ) पर स्थापित किया जाता है, जहां VER PLATFORM_VNDK_VERSION में संग्रहीत संस्करण है।

जब BOARD_VNDK_VERSION को current पर सेट किया जाता है, PLATFORM_VNDK_VERSION ro.vndk.version में संग्रहीत किया जाता है, अन्यथा BOARD_VNDK_VERSION को ro.vndk.version में संग्रहीत किया जाता है। Android रिलीज़ होने पर PLATFORM_VNDK_VERSION को SDK संस्करण पर सेट किया जाता है; रिलीज़ से पहले, PLATFORM_VNDK_VERSION के लिए अल्फ़ान्यूमेरिक Android कोड नाम का उपयोग किया जाता है।

VNDK संस्करण सेटिंग्स का सारांश

नीचे दी गई तालिका VNDK संस्करण सेटिंग्स का सारांश प्रस्तुत करती है।

विक्रेता
निर्माण
तख़्ता
संस्करण
एसडीके
मुक्त करना
प्लैटफ़ॉर्म
संस्करण
संस्करण
संपत्ति
निर्देशिका स्थापित करें
वर्तमान VNDK मॉड्यूल current पहले CODE_NAME CODE_NAME /system/apex/com.android.vndk.v CODE_NAME
बाद SDK_VER SDK_VER /system/apex/com.android.vndk.v SDK_VER
पूर्वनिर्मित स्नैपशॉट मॉड्यूल VNDK_VER
स्नैपशॉट के लिए
पहले या बाद में CODE_NAME
या SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.v VNDK_VER
  • बोर्ड संस्करण ( BOARD_VNDK_VERSION )। VNDK संस्करण जिसे विक्रेता मॉड्यूल को बनाने की आवश्यकता होती है। यदि विक्रेता मॉड्यूल वर्तमान सिस्टम मॉड्यूल से लिंक हो सकता है तो current पर सेट करें।
  • प्लेटफ़ॉर्म संस्करण ( PLATFORM_VNDK_VERSION )। VNDK संस्करण जिसे वर्तमान सिस्टम मॉड्यूल बना रहे हैं। केवल तभी निर्मित जब BOARD_VNDK_VERSION करंट के बराबर हो।
  • संस्करण संपत्ति ( ro.vndk.version ). संपत्ति जो VNDK संस्करण को निर्दिष्ट करती है, वेंडर.आईएमजी में बायनेरिज़ और लिब को चलाने की आवश्यकता होती है। vendor.img में /vendor/default.prop पर संग्रहीत।