لقطة VNDK عبارة عن مجموعة من VNDK-core وVNDK-SP libs لإصدار Android. يمكنك ترقية قسم النظام فقط إذا كان system.img
يتضمن لقطة VNDK المقابلة التي يحتاجها vendor.img
.
يتم إنشاء لقطات VNDK الرسمية تلقائيًا على خادم إنشاء Android ويتم تسجيلها في /prebuilts/vndk
لشجرة مصدر Android. لأغراض التطوير، يمكنك إنشاء لقطات VNDK محليًا. يتم دعم لقطات VNDK لنكهات TARGET_ARCH
، و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
. بالنسبة إلى snapshot v28 (Android 9) والإصدارات الأحدث، يتضمن التكوينات الشائعة المذكورة أعلاه.
بناء الأوامر
بالنسبة للقطات الرسمية، يتضمن نظام Android 9 والإصدارات الأحدث نموذجًا مستهدفًا ( 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.
- ليست هناك حاجة لمكتبات 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، وهو أمر ضروري للتحقق من أن مشاريع GPL لها مصادر تم إصدارها في شجرة مصدر Android معينة.
بالنسبة لملف ZIP للقطة VNDK محدد، android-vndk-$(TARGET_ARCH).zip
، يتم تجميع مكتبات VNDK المعدة مسبقًا في أدلة منفصلة تسمى arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
وفقًا لـ ABI bitness. على سبيل المثال، بالنسبة إلى android-vndk-arm64.zip
، يتم وضع libs 64 بت ضمن arch-arm64-armv8-a
ويتم وضع libs 32 بت ضمن arch-arm-armv8-a
. يوضح المثال أدناه بنية الدليل لملف ZIP للقطة VNDK ( android-vndk-arm64.zip
) لملف Arm64 ( TARGET_ARCH=arm64
) .
بناء لقطات البائع
يدعم 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/v VER
، حيث VER
يساوي إصدار لقطة VNDK (الذي يتبع إصدار SDK لإصدار Android المقابل). على سبيل المثال، تحتوي لقطة Android 8.1 VNDK على الإصدار 27.
باستخدام البرنامج النصي update.py
يقوم البرنامج النصي update.py
( /development/vndk/snapshot/update.py
) بأتمتة عملية إضافة لقطة VNDK مسبقة الصنع إلى الشجرة المصدر. فهو يكتشف تلقائيًا عناصر البناء ويملأ الخصائص المرتبطة بشكل مناسب في ملف Android.bp
الذي تم إنشاؤه. يقوم هذا البرنامج النصي بالمهام التالية:
- في
/prebuilts/vndk/v VER
، يستخدمrepo start
لإنشاء فرع Git جديد. - جلب وفك ضغط لقطة VNDK لبناء القطع الأثرية.
- يقوم بتشغيل
gen_buildfiles.py
لإنشاء ملفات البناء تلقائيًا (Android.bp
). - يقوم بتشغيل
check_gpl_license.py
للتحقق من أن المكتبات المنشأة مسبقًا والمرخصة بموجب الترخيص العام العام (GPL) لها مصادر تم إصدارها في شجرة المصدر الحالية. - يستخدم
git commit
لارتكاب تغييرات جديدة.
استخدام لقطات VNDK المبنية محليًا
يمكنك أيضًا استخدام لقطات 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
. يمكنك التحكم في لقطات 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.v VER
. تؤدي الإصدارات المفقودة إلى حدوث خطأ في البناء.
لا ترتبط وحدات 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.v VER
)، حيث 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؛ قبل الإصدار، يتم استخدام الاسم الرمزي الأبجدي الرقمي لنظام Android لـ PLATFORM_VNDK_VERSION
.
ملخص إعدادات إصدار VNDK
يلخص الجدول أدناه إعدادات إصدار VNDK.
بائع يبني | سبورة إصدار | SDK يطلق | منصة إصدار | إصدار ملكية | دليل التركيب |
---|---|---|---|---|---|
وحدات 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 الذي تتطلبه الثنائيات والمكتبات الموجودة في المورد.img للتشغيل. تم تخزينه فيvendor.img
على/vendor/default.prop
.