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

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

आधिकारिक VNDK स्नैपशॉट, Android बिल्ड सर्वर पर अपने-आप बन जाते हैं और Android सोर्स ट्री के /prebuilts/vndk में जांच की. इसके लिए वीएनडीके स्नैपशॉट बनाए जा सकते हैं. VNDK स्नैपशॉट आर्म, आर्म64, x86, x86_64 TARGET_ARCH फ़्लेवर के लिए काम करता है.

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

Android बिल्ड सर्वर, बिल्ड आर्टफ़ैक्ट और VNDK स्नैपशॉट फ़ाइलें जनरेट करता है बिल्ड पैरामीटर और बिल्ड कमांड का इस्तेमाल करेंगे.

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

बिल्ड टारगेट का नाम 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, जेनेरिक सिस्टम इमेज (जीएसआई) की तरह है टारगेट आर्क (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT. स्नैपशॉट v28 (Android 9) और इसके बाद वाले वर्शन के लिए, इसमें ऊपर दिए गए लोकप्रिय कॉन्फ़िगरेशन शामिल हैं.

बिल्ड कमांड

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

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

Android बिल्ड सर्वर 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 शेयर की गई लाइब्रेरी का वेंडर वैरिएंट.
    • LL-NDK की शेयर की गई लिब्स की ज़रूरत नहीं है, क्योंकि वे पुराने सिस्टम के साथ काम करती हैं.
    • 64 बिट वाले टारगेट के लिए, TARGET_ARCH और TARGET_2ND_ARCH लाइब्रेरी बनाई गई हैं और इनमें शामिल हैं.
  • VNDK-कोर, VNDK-SP, LL-NDK, और VNDK-निजी लाइब्रेरी की सूची यहां दी गई है: [vndkcore|vndksp|llndk|vndkprivate].libraries.txt.
  • लाइसेंस फ़ाइलें.
  • module_paths.txt. सभी VNDK के लिए, मॉड्यूल पाथ रिकॉर्ड करता है लाइब्रेरी, जिनकी ज़रूरत यह देखने के लिए होती है कि GPL प्रोजेक्ट के सोर्स मौजूद हैं या नहीं दिए गए Android सोर्स ट्री में रिलीज़ किया जाता है.

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

वीएनडीके स्नैपशॉट डायरेक्ट्री स्ट्रक्चर अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
पहली इमेज. वीएनडीके स्नैपशॉट डायरेक्ट्री का स्ट्रक्चर (उदाहरण)

वेंडर के स्नैपशॉट के लिए बनाएं

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

किसी स्थानीय सोर्स से ऐसे आर्टफ़ैक्ट (वीएनडीके स्नैपशॉट के साथ) जनरेट करने के लिए ट्री के लिए, नीचे दिए गए कमांड का इस्तेमाल करें.

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

इस निर्देश से android-vndk-$(TARGET_ARCH).zip फ़ाइलें बनती हैं $DIST_DIR. नीचे दिया गया उदाहरण एक Arm64 VNDK स्नैपशॉट ZIP फ़ाइल है आर्टफ़ैक्ट इस्तेमाल करें. बोल्ड की गई फ़ाइलें, सामान्य 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/vVER, जहां VER, VNDK स्नैपशॉट के वर्शन के बराबर है (जो Android रिलीज़ के SDK वर्शन का पालन करता है). इसके लिए उदाहरण के लिए, Android 8.1 VNDK स्नैपशॉट का वर्शन 27 है.

updated.py स्क्रिप्ट का इस्तेमाल करें

update.py स्क्रिप्ट (/development/vndk/snapshot/update.py) इस प्रोसेस को ऑटोमेट करता है सोर्स ट्री में, पहले से बने VNDK स्नैपशॉट जोड़ें. यह अपने-आप, आर्टफ़ैक्ट बनाता है और संबंधित प्रॉपर्टी को सही तरीके से भरता है Android.bp जनरेट हुआ. यह स्क्रिप्ट ये काम करती है:

  1. /prebuilts/vndk/vVER में, नई Git ब्रांच बनाने के लिए repo start का इस्तेमाल करता है.
  2. VNDK स्नैपशॉट बिल्ड आर्टफ़ैक्ट को फ़ेच और अनज़िप करता है.
  3. बिल्ड फ़ाइलें अपने-आप जनरेट करने के लिए, gen_buildfiles.py पर काम करता है (Android.bp).
  4. पहले से बनी लाइब्रेरी की पुष्टि करने के लिए, check_gpl_license.py पर काम करता है जनरल पब्लिक लाइसेंस (GPL) के तहत लाइसेंस वाले स्रोत मौजूदा सोर्स ट्री.
  5. नए बदलाव करने के लिए, git commit का इस्तेमाल करता है.

स्थानीय तौर पर बनाए गए VNDK स्नैपशॉट का इस्तेमाल करें

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

सिंटैक्स:

python update.py VER --local local_path

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

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 स्नैपशॉट इंस्टॉल करें

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

  • पहला विकल्प: BOARD_VNDK_VERSION. इसका इस्तेमाल करें मौजूदा वेंडर मॉड्यूल बनाने के लिए मॉड्यूल का स्नैपशॉट मॉड्यूल पाएं और सिर्फ़ वेंडर मॉड्यूल के लिए ज़रूरी स्नैपशॉट मॉड्यूल.
  • दूसरा विकल्प: PRODUCT_EXTRA_VNDK_VERSIONS. वेंडर के मौजूदा मॉड्यूल पर ध्यान दिए बिना, VNDK स्नैपशॉट मॉड्यूल इंस्टॉल करें. ऐसा करने पर, पहले से बने VNDK स्नैपशॉट इंस्टॉल होते हैं PRODUCT_EXTRA_VNDK_VERSIONS को किसी और से लिंक किए बिना मॉड्यूल मौजूद हैं.

board_VNDK_VERSION सेट करें

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

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

PRODUCT_EXTERNAL_VNDK_VERSIONS सेट करें

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

अगर PRODUCT_EXTRA_VNDK_VERSIONS के पास वर्शन की कोई खास सूची है, तो बिल्ड सिस्टम, इसमें वर्शन सूची के पहले से बने स्नैपशॉट देखता है prebuilts/vndk डायरेक्ट्री. अगर बिल्ड सिस्टम, लिस्ट में दी गई सूची को ढूंढ लेता है स्नैपशॉट लेता है, यह उन स्नैपशॉट फ़ाइलों को हर VNDK APEX पर इंस्टॉल करता है (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. वर्शन मौजूद न होने से बिल्ड में गड़बड़ी होती है.

VNDK मॉड्यूल, बिल्ड के समय वेंडर मॉड्यूल से लिंक नहीं होता है. हालांकि, इन मॉड्यूल को रनटाइम पर इसका इस्तेमाल तब किया जाता है जब वेंडर विभाजन में वेंडर मॉड्यूल के लिए इनमें से किसी एक की ज़रूरत होती है VNDK के इंस्टॉल किए गए वर्शन हो सकते हैं. PRODUCT_EXTRA_VNDK_VERSIONS मान्य है का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब BOARD_VNDK_VERSION की वैल्यू दी गई हो.

PLATFORM_VNDK_VERSION

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.vVER), जहां VER इसमें सेव किया गया वर्शन है PLATFORM_VNDK_VERSION.

जब BOARD_VNDK_VERSION को current पर सेट किया जाता है, तो PLATFORM_VNDK_VERSION को ro.vndk.version में सेव किया गया है, नहीं तो BOARD_VNDK_VERSION यहां सेव रहेगा ro.vndk.version. PLATFORM_VNDK_VERSION इस पर सेट है Android के रिलीज़ होने पर एसडीके का वर्शन; रिलीज़ से पहले, अक्षर और अंक वाला Android कोड नाम का इस्तेमाल PLATFORM_VNDK_VERSION के लिए किया गया है.

VNDK वर्शन की सेटिंग के बारे में खास जानकारी

इस टेबल में, VNDK वर्शन की सेटिंग की खास जानकारी दी गई है.

वेंडर
बिल्ड
बोर्ड
वर्शन
SDK टूल
रिलीज़
प्लैटफ़ॉर्म
वर्शन
वर्शन
प्रॉपर्टी
डायरेक्ट्री इंस्टॉल करें
मौजूदा VNDK मॉड्यूल current पहले CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
बाद में SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
पहले से बने स्नैपशॉट मॉड्यूल स्नैपशॉट के लिए VNDK_VER
पहले या बाद में CODE_NAME
या SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • बोर्ड वर्शन (BOARD_VNDK_VERSION). वियतनामीज़ डोंग का एक वर्शन होना चाहिए, जिसे वेंडर मॉड्यूल को बनाने की ज़रूरत है. current पर सेट करें, अगर वेंडर मॉड्यूल को मौजूदा सिस्टम मॉड्यूल के साथ लिंक किया जा सकता है.
  • प्लैटफ़ॉर्म वर्शन (PLATFORM_VNDK_VERSION). VNDK वर्शन जिसे मौजूदा सिस्टम मॉड्यूल बनाया जा रहा है. सिर्फ़ तब बनाया जाता है, जब BOARD_VNDK_VERSION मौजूदा वैल्यू के बराबर है.
  • वर्शन प्रॉपर्टी (ro.vndk.version). प्रॉपर्टी जो VNDK वर्शन के बारे में बताता है. इसके लिए, sellers.img में बाइनरी और libs की ज़रूरत होती है दौड़ना. vendor.img में यहां सेव किया गया /vendor/default.prop.