إنشاء لقطات VNDK

لقطة VNDK هي مجموعة من ملفات VNDK-core وVNDK-SP لإصدار Android. لا يمكنك ترقية قسم النظام إلا إذا كانت سياسة system.img يتضمن لقطة VNDK المقابلة التي يحتاجها vendor.img

تم إنشاء لقطات VNDK الرسمية تلقائيًا على خادم إصدار Android وتم تسجيل الوصول إلى /prebuilts/vndk في شجرة مصادر Android. بالنسبة تطوير البرامج، يمكنك إنشاء لقطات VNDK محليًا. تكون لقطات VNDK متوافقة مع نكهات TARGET_ARCH Arm و arm64 وx86 وx86_64

إنشاء لقطات

ينشئ خادم إصدار 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 هي نفس صورة النظام العامة (GSI). الأقواس المستهدفة (arm، arm64، x86، x86_64).
  • TARGET_ARCH_VARIANT بالنسبة إلى الإصدار 28 من اللقطة (Android 9) والإصدارات الأحدث، يتضمن الإعدادات الشائعة المدرجة أعلاه.

إصدار الأوامر

للحصول على اللقطات الرسمية، يمكنك استخدام الإصدار 9 من نظام Android والإصدارات الأحدث يحتوي على نموذج هدف (vndk) في vndk.mk الذي ينشئ ويخرج VNDK لقطة إلى $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

يتم إنشاء لقطة VNDK لإصدار Android من ملف فرع الإصدار.

الإنشاء محليًا

أثناء التطوير، يمكنك إنشاء لقطات 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-core وVNDK-SP
    • وليست هناك حاجة إلى ملفات libs المشتركة الخاصة بـ LL-NDK لأنها متوافقة مع الأنظمة القديمة.
    • بالنسبة إلى استهدافات 64 بت، يمكن استخدام TARGET_ARCH و تم إنشاء وإدراج TARGET_2ND_ARCH مكتبة.
  • تتوفر قائمة مكتبات VNDK-core وVNDK-SP وLL-NDK وVNDK على [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • ملفات الترخيص
  • module_paths.txt تسجيل مسارات الوحدات لجميع VNDK وهي مطلوبة للتحقّق من اشتمال مشاريع GPC على مصادر إصداره في شجرة مصادر بيانات Android محددة.

بالنسبة إلى ملف ZIP للقطة VNDK، android-vndk-$(TARGET_ARCH).zip، يتم إنشاء مكتبات VNDK مسبقًا مجمعة في أدلة منفصلة تسمى arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) وفقًا لواجهة التطبيق الثنائية (ABI) البت. على سبيل المثال، بالنسبة إلى android-vndk-arm64.zip، libs 64 بت يتم وضعها ضمن arch-arm64-armv8-a ويتم وضع libs 32 بت وضعها ضمن arch-arm-armv8-a. يوضح المثال أدناه بنية الدليل لـ Arm64 (TARGET_ARCH=arm64) VNDK .SIP (android-vndk-arm64.zip).

هيكل دليل VNDK Snapshot
الشكل 1 هيكل دليل لقطة VNDK (مثال)

إنشاء لقطات سريعة للمورّدين

يتوافق مع Android 11 مورِّد لقطات الشاشة، التي تمكّنك من إنشاء vendor.img بغض النظر عن إصدار Android في شجرة المصدر. تحتوي لقطة VNDK الافتراضية على ملفات المكتبة المشتركة (.so) التي يمكن تثبيتها على الأجهزة ثم يتم ربطها من البرامج الثنائية للمورّد C++ في وقت التشغيل. للبناء ضد لقطة VNDK هذه، فأنت بحاجة إلى عناصر إضافية مثل ملفات الرأس التي تم تصديرها.

إنشاء مثل هذه العناصر (إلى جانب لقطة VNDK) من مصدر محلي الشجرة، استخدم الأمر التالي.

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

ينشئ هذا الأمر android-vndk-$(TARGET_ARCH).zip ملف ضمن $DIST_DIR المثال أدناه هو ملف ZIP للقطة Arm64 VNDK من خلال أدوات الإنشاء. تتم إضافة الملفات المكتوبة بخط غامق حديثًا إلى ملف 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 (الذي يتوافق مع إصدار حزمة تطوير البرامج (SDK) لإصدار Android ذي الصلة). بالنسبة على سبيل المثال، تحتوي لقطة Android 8.1 VNDK على الإصدار 27.

استخدام النص البرمجي update.py

نص update.py البرمجي (/development/vndk/snapshot/update.py) تلقائيًا إضافة لقطة VNDK مُنشأة مسبقًا إلى شجرة المصدر. يكتشف تلقائيًا وإنشاء الأدوات وملء الخصائص المرتبطة بشكل مناسب في تم إنشاء Android.bp. ينفّذ هذا النص البرمجي المهام التالية:

  1. في /prebuilts/vndk/vVER، يتم استخدام repo start لإنشاء فرع جديد في Git.
  2. لجلب عناصر إنشاء لقطة VNDK وفك ضغطها.
  3. يتم تشغيل gen_buildfiles.py لإنشاء ملفات الإصدار تلقائيًا. (Android.bp).
  4. تشغيل check_gpl_license.py للتحقّق من المكتبات المنشأة مسبقًا المرخص لهم بموجب الترخيص العام (GPL) لديهم مصادر تم إصدارها في شجرة المصدر الحالية
  5. يتم استخدام git commit لتنفيذ تغييرات جديدة.

استخدام لقطات VNDK تم إنشاؤها محليًا

ويمكنك أيضًا استخدام لقطات VNDK تم إنشاؤها محليًا. عندما --local تحديد الخيار، يجلب النص البرمجي update.py لقطة VNDK إنشاء عناصر من الدليل المحلي المحدد (بدلاً من نظام التشغيل Android إصدار الخادم) الذي يحتوي على ملفات android-vndk-$(TARGET_ARCH).zip التي تم إنشاؤها من development/vndk/snapshot/build.sh. مع --local، يتخطى النص البرمجي update.py بروتوكول الترخيص المفتوح التحقّق من الترخيص و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 يمكنك التحكم في لقطات VNDK التي يتم تثبيتها من ملف VNDK المُنشأ مسبقًا أدلة لقطة (على سبيل المثال، /prebuilts/vndk/v29 أو /prebuilts/vndk/v30) باستخدام أحد الخيارات التالية.

  • الخيار 1: BOARD_VNDK_VERSION. يمكنك استخدام لقطات سريعة لإنشاء وحدات الموردين الحالية وتثبيت لقطات الشاشة المطلوبة لوحدات المورد.
  • الخيار 2: PRODUCT_EXTRA_VNDK_VERSIONS. ثبِّت وحدات لقطات VNDK بغض النظر عن وحدات المورّد الحالية. يؤدي هذا إلى تثبيت لقطات VNDK المنشأة مسبقًا المدرجة في PRODUCT_EXTRA_VNDK_VERSIONS بدون ربطها بأي حساب آخر وحدتها في وقت الإنشاء.

تعيين BOARD_VNDK_VERSION

تعرض الدالة BOARD_VNDK_VERSION إصدار VNDK الذي يستخدمه المورّد الحالي. مطلوبة لإنشاء وحدات. إذا كان لدى BOARD_VNDK_VERSION نسخة لقطة VNDK المتوفرة في الدليل /prebuilts/vndk، تم تثبيت لقطة VNDK المُشار إليها في BOARD_VNDK_VERSION. في حال حذف لقطة VNDK غير متاحة في الدليل، يحدث خطأ في الإصدار.

يؤدي تحديد BOARD_VNDK_VERSION أيضًا إلى السماح بتخزين وحدات VNDK مثبت. ترتبط وحدات المورّدين بإصدار لقطة VNDK المحدّد في BOARD_VNDK_VERSION في وقت الإصدار (لا يتم إنشاء الإصدار الحالي وحدات VNDK في مصدر النظام). عند تنزيل شجرة المصدر الكاملة من أي مستودع، يعتمد كل من مصادر النظام والمورّدين على نظام التشغيل Android .

تعيين PRODUCT_EXTRA_VNDK_VERSIONS

يسرد PRODUCT_EXTRA_VNDK_VERSIONS إصدارات VNDK الإضافية التي سيتم مثبت. عادةً ما يكفي الحصول على لقطة VNDK واحدة للحساب الحالي قسم البائع. ومع ذلك، في بعض الحالات قد تحتاج إلى تضمين وثائق متعددة اللقطات في صورة نظام واحدة. على سبيل المثال، لدى GSI لقطات متعددة إتاحة استخدام العديد من إصدارات البائعين بصورة نظام واحدة. حسب الإعداد PRODUCT_EXTRA_VNDK_VERSIONS، يمكنك تثبيت لقطة VNDK بالإضافة إلى إصدار VNDK في BOARD_VNDK_VERSION.

إذا كان لدى 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 على إصدار حزمة تطوير البرامج (SDK) عند إصدار 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). الدونغ الفيتنامي (VNDK) الإصدار الذي تتطلب وحدات البائع إنشاءه. يتم الضبط على current إذا يمكن ربطها بوحدات النظام الحالية.
  • إصدار النظام الأساسي (PLATFORM_VNDK_VERSION). إصدار VNDK الذي تنشئه وحدات النظام الحالية. يتم إنشاؤها فقط عندما BOARD_VNDK_VERSION يساوي الحالي.
  • خاصية الإصدار (ro.vndk.version). الموقع يحدد إصدار VNDK الذي تتطلبه البرامج الثنائية وlibs في seller.img إلى الجري. سيتم التخزين في vendor.img في /vendor/default.prop