يتطلّب Vendor Native Development Kit (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 على مكتبة، يتم إنشاؤها مرتين:
- مرة واحدة للنظام الأساسي (وبالتالي يتم تثبيته على
/system/lib) - مرة واحدة للبائع (وبالتالي يتم تثبيتها في
/vendor/libأو VNDK APEX)
يتم إنشاء إصدارات المورّدين من المكتبات باستخدام -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.