لقطة VNDK هي مجموعة من مكتبتَي VNDK-core وVNDK-SP لإصدار Android.
يمكنك ترقية قسم النظام فقط إذا كان system.img
يتضمّن لقطة VNDK المقابلة التي يحتاج إليها
vendor.img
.
يتم إنشاء نُسخ VNDK الرسمية تلقائيًا على خادم إنشاء Android
ويتم تسجيلها في /prebuilts/vndk
من شجرة مصدر Android. لأغراض تطوير التطبيقات، يمكنك إنشاء لقطات VNDK محليًا. يمكن استخدام لقطات VNDK
مع أنظمة التشغيل arm وarm64 و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
هو نفسه البنية الأساسية المستهدَفة لـ "صورة النظام العام" (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
لإنشاء جميع النُسخ المتوافقة من ملف تعريف ملف APK
باستخدام الأمر التالي.
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-private على الرابط
[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. على سبيل المثال، بالنسبة إلى android-vndk-arm64.zip
، يتم وضع المكتبات المتوافقة مع الإصدار 64 بت
ضمن arch-arm64-armv8-a
ويتم وضع المكتبات المتوافقة مع الإصدار 32 بت
ضمن arch-arm-armv8-a
. يعرض المثال أدناه بنية الدليل
لملف ZIP (android-vndk-arm64.zip
) الذي يتضمّن لقطة لنظام التشغيل VNDK
على جهاز يعمل بمعالج 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 للقطة VNDK على arm64
يتضمّن عناصر إنشاء. الملفات المميّزة بالخط الغامق هي ملفات تمت إضافتها حديثًا إلى لقطة 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 المقابل). على سبيل المثال، تحتوي لقطة VNDK لنظام التشغيل Android 8.1 على الإصدار 27.
استخدام النص البرمجي update.py
يعمل نص update.py
script
(/development/vndk/snapshot/update.py
) على التشغيل الآلي لإضافة لقطة VNDK مُسبقة الإنشاء إلى شجرة المصدر. ويرصد تلقائيًا
عناصر إنشاء التطبيق ويملؤها بشكل مناسب في المواقع المرتبطة في
Android.bp
الذي تم إنشاؤه. ينفِّذ هذا النص البرمجي المهام التالية:
- في
/prebuilts/vndk/vVER
، يستخدم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
مثال على أمر لتعديل لقطة VNDK لنظام التشغيل Android 8.1 باستخدام مواد ملف الإنشاء
المحلية في /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 prebuilt (مثل /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
يحتوي على قائمة محدّدة بالإصدارات،
يبحث نظام الإنشاء عن لقطات مُعدّة مسبقًا لقائمة الإصدارات في directory
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
الأبجدي الرقمي لنظام Android
.
ملخّص لإعدادات إصدار 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 الذي تتطلّب ملفّات bin وlibs في vendor.img بدءه . تم تخزينها فيvendor.img
في/vendor/default.prop
.