تتطلب مجموعة أدوات التطوير الأصلية للمورّدين (VNDK) إجراء عدة تغييرات على قاعدة الرموز لفصل المخاوف بين البائع والنظام. استخدِم الدليل التالي لتفعيل حزمة VNDK في المورّد أو المصنّع الأصلي للجهاز. أو قاعدة التعليمات البرمجية.
إنشاء مكتبات النظام
يتضمّن نظام التصميم أنواعًا عديدة من العناصر، بما في ذلك المكتبات. (مشتركة أو ثابتة أو ذات رأس) وثنائيات.
الشكل 1. إنشاء مكتبات النظام
- تستخدم صورة النظام
core
مكتبات على صورة النظام. هذه لا يمكن استخدام المكتبات من خلالvendor
أوvendor_available
vndk
أوvndk-sp
مكتباتcc_library { name: "libThatIsCore", ... }
- تُستخدم مكتبات
vendor-only
(أوproprietary
) من قِبل صورة البائع، على صورة البائع.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- تستخدم صورة المورّد
vendor_available
مكتبات صورة (قد تحتوي على نسخ مكررة منcore
).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- تستخدم صورة المورد
vndk
مكتبات على صورة النظام.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- يتم استخدام
vndk-sp
مكتبات من خلال صورة البائع وأيضًا من خلال صورة النظام بطريقة غير مباشرة.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
- يستخدم كل من صور النظام والمورد
llndk
مكتبات.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
عندما يتم وضع علامة vendor_available:true
على lib، يتم إنشاؤها
مرتين:
- مرة واحدة للنظام الأساسي (وبالتالي سيتم تثبيته على
/system/lib
) - مرة واحدة للمورّد (وبالتالي يتم تثبيته على
/vendor/lib
أو VNDK APEX)
تم إنشاء إصدارات المورّدين من libs باستخدام -D__ANDROID_VNDK__
.
مكونات النظام الخاصة التي قد تتغير بشكل كبير في الإصدارات المستقبلية من
تم إيقاف Android عند استخدام هذه العلامة. بالإضافة إلى ذلك، تصدر المكتبات المختلفة
مجموعة مختلفة من العناوين (مثل liblog
). الخيارات المتعلقة بـ
يمكن تحديد صيغة المورّد للهدف في ملف Android.bp
في:
target: { vendor: { … } }
تفعيل VNDK لقاعدة رموز
لتفعيل VNDK لقاعدة رموز:
- تحديد الأهلية من خلال حساب المقاسات المطلوبة
قسمان (
vendor.img
) وsystem.img
. - تفعيل ميزة
BOARD_VNDK_VERSION=current
يمكنك الإضافة إلىBoardConfig.mk
أو إنشاء مكونات باستخدامه مباشرةً (على سبيل المثال،m -j BOARD_VNDK_VERSION=current MY-LIB
).
بعد تفعيل BOARD_VNDK_VERSION=current
، سيوفّر نظام التصميم.
تتيح متطلبات التبعية والرأس التالية.
إدارة التبعيات
عنصر vendor
يعتمد على مكوّن core
غير موجود في vndk
أو كعنصر vendor
يجب حلها باستخدام أحد الخيارات التالية:
- يمكن إزالة التبعية.
- إذا كان المكوِّن
core
مملوكًا من قِبلvendor
، يمكنه أن يتم وضع علامةvendor_available
أوvendor
عليها. - قد يكون أي تغيير يجعل الكائن الأساسي جزءًا من
vndk
إلى Google.
وبالإضافة إلى ذلك، إذا كان المكوِّن core
يشتمل على تبعيات على
المكوِّن vendor
، يجب إنشاء المكوِّن vendor
في مكون core
أو يجب أن تكون التبعية
بطريقة أخرى (على سبيل المثال، عن طريق إزالة التبعية أو نقل
والتبعية إلى مكون vendor
).
إدارة العناوين
يجب إزالة تبعيات العناوين العامة ليتمكّن نظام الإصدار من معرفة
ما إذا كان سيتم إنشاء العناوين باستخدام السمة -D__ANDROID_VNDK__
أو بدونها.
على سبيل المثال، يمكن استخدام عناوين libutils مثل utils/StrongPointer.h
الوصول إليها باستخدام مكتبة العناوين
libutils_headers
لم يعد من الممكن تضمين بعض العناوين (مثل unistd.h
) بشكل متعدٍ.
ولكن يمكن تضمينها محليًا.
أخيرًا، الجزء العام من private/android_filesystem_config.h
تم نقل إلى cutils/android_filesystem_config.h
. للإدارة
هذه العناوين، يمكنك تنفيذ أحد الإجراءات التالية:
- قم بإزالة التبعية إلى
private/android_filesystem_config.h
عن طريق استبدال الكلAID_*
وحدة ماكرو معgetgrnam
/getpwnam
مكالمة إن أمكن. مثل:- يصبح
(uid_t)AID_WIFI
getpwnam("wifi")->pw_uid
- يصبح
(gid_t)AID_SDCARD_R
getgrnam("sdcard_r")->gr_gid
private/android_filesystem_config.h
- يصبح
- بالنسبة إلى AIS غير المعدَّلة، يجب تضمين
cutils/android_filesystem_config.h