تقدّم الموارد التالية تفاصيل عن مواقع الرموز البرمجية والأدوات والاختبار والترخيص.
الموقع الجغرافي للرمز الذي يمكن إجراء طلب بحث عنه
ينتقل رمز عنصر واجهة المورّد القابل للبحث عنه إلى
system/libvintf
.
الأدوات
قد يكون من الصعب قراءة ملفات البيان ومصفّحات التوافق المكتوبة بخط اليد. استخدِم الأدوات التالية لإنشاء نموذج بيان/مصفوفة توافق لاستخدامه كأساس.
LSHAL
LSHAL هي أداة على الجهاز تُدرج جميع واجهات HAL المسجَّلة لملف تعريف برمجة التطبيقات
hwservicemanager
وجميع عمليات التنفيذ المتاحة للمرور المباشر
(مثل android.hardware.foo@1.0-impl.so
) على الجهاز. ويمكنه أيضًا
إنشاء ملف بيان الجهاز استنادًا إلى القائمة:
adb shell su 0 /system/bin/lshal --init-vintf
ملاحظات:
- إذا تم تسجيل حزمة على
hwservicemanager
ووجدت كوحدة HAL للمرور، يتم ضبط<transport>
علىhwbinder
. - لم يتم كتابة أي إصدار من SELinux في البيان. نقترح إدخال العنصر
من خلال
assemble_vintf
كما هو موضّح أدناه. - قد يكون ملف بيان HAL الذي تم إنشاؤه غير دقيق. يجب معالجة هذه المشكلة من قِبل أحد الأشخاص، لأنّه يتعذّر حلّ التناقضات بين بيان التطبيق المتوافق مع الجهاز وما يوفّره تطبيق
vendor.img
.
ASSEMBLE_VINTF
assemble_vintf
هي أداة من جهة المضيف تؤدي إلى ما يلي:
- للتحقّق من صلاحية مصفوفة التوافق أو ملف البيان
- تُستخدَم هذه الأداة لإدراج متغيّرات في ملفات البيان أو مصفوفات التوافق المتاحة أثناء عملية الإنشاء، وإنشاء ملف جديد يجب تثبيته على الجهاز.
- تتحقّق من التوافق بين الملف الذي تم إنشاؤه ونظيره.
- في حال توفّر ملف بيان، يتم بشكل اختياري إنشاء نموذج قياسي لمصفوفة التوافق المتوافقة مع ملف البيان.
مثال: إنشاء جدول التوافق مع الأجهزة من ملف بيان إطار عمل
assemble_vintf -m --hals-only \ -i system/libhidl/manifest.xml \ -o device/manufacturer/device_name/compatibility_matrix.xml
يُرجى العلم أنّه تم ضبط جميع HAL على optional="true"
.
مثال: إنشاء جدول كثافة توافق إطار العمل من ملف بيان الجهاز
assemble_vintf -m --hals-only \ -i device/foo/bar/manifest.xml \ -o path/to/place/output/compatibility_matrix.xml
يُرجى العلم أنّه تم ضبط جميع HAL على optional="true"
.
مثال: إنشاء ملفات XML لبيان الجهاز من المتغيّرات
في وقت التصميم، إذا تم تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk
:
# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons. DEVICE_MANIFEST_FILE := \ device/manufacturer/device_name/vendor_manifest.xml ODM_MANIFEST_FILES := \ device/manufacturer/device_name/odm_manifest.xml ODM_MANIFEST_SKUS := sku1 sku2 ODM_MANIFEST_SKU1_FILES := \ device/manufacturer/device_name/odm_manifest_sku1.xml ODM_MANIFEST_SKU2_FILES := \ device/manufacturer/device_name/odm_manifest_sku2.xml
بعد ذلك، يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ ) لإنشاء ملفات XML لبيان الجهاز:
# vendor manifest; only when DEVICE_MANIFEST_FILE is set BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \ $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml # ODM manifests assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml # ODM manifests for each sku assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml
أثناء التشغيل، يجمع عنصر VINTF بين بيانات المورّدين وبيانات المصنّعين الأصليين للأجهزة لإنشاء بيان الجهاز. راجِع ملف IDE manifest للاطّلاع على التفاصيل.
مثال: إنشاء ملفات XML لمصفوفة توافق الأجهزة من المتغيّرات
في وقت التصميم، إذا تم تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk
:
# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons. DEVICE_MATRIX_FILE := \ device/manufacturer/device_name/vendor_compatibility_matrix.xml \ device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml
بعد ذلك، يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لمصفّحة توافق الأجهزة:
# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set assemble_vintf \ $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml
أثناء التشغيل، يستخدم عنصر VINTF مصفوفة توافق المورّد بصفته مصفوفة توافق الجهاز. اطّلِع على جدول ملفّات APK المتوافقة مع الأجهزة لمعرفة التفاصيل.
مثال: إنشاء ملفات XML لبيان إطار العمل من المتغيّرات
يمكن تحديد المتغيّرات التالية في
device/manufacturer/device_name/BoardConfig.mk
:
# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons DEVICE_FRAMEWORK_MANIFEST_FILE := \ device/manufacturer/device_name/device_system_manifest.xml # Product manifest PRODUCT_MANIFEST_FILES := \ device/manufacturer/device_name/product_manifest.xml
يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لبيان إطار العمل:
# system manifest assemble_vintf \ -i system/libhidl/vintfdata/manifest.xml \ $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \ -o $(TARGET_OUT)/etc/vintf/manifest.xml # product manifest assemble_vintf \ $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \ -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml
أثناء التشغيل، يجمع عنصر VINTF بين بيان النظام واقتباسات بيان النظام ومقتطفات بيان المنتج ومقتطفات بيان المنتج كبيان إطار العمل. اطّلِع على ملف بيان الإطار العمل للاطّلاع على التفاصيل.
مثال: إنشاء ملفات XML لمصفوفة توافق الإطارات من المتغيّرات
يمكن تحديد المتغيّرات التالية في
device/manufacturer/device_name/BoardConfig.mk
لتحديد "إشعارات Google من أجل المطوّرين" للمنتج و"إشعارات Google من أجل المطوّرين" الخاصة بالنظام والخاصة بالجهاز:
DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/product_compatibility_matrix.xml # Device-specific system compatibility matrix is named # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/device_system_compatibility_matrix.xml
يجب تثبيت نظام FCM في نظام التشغيل system_ext باستخدام وحدات Soong. يمكن أيضًا تثبيت حزمة FCM للمنتج
باستخدام وحدات Soong، ولا تحدِّد DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
في حال استخدام هذه
الطريقة. بالإضافة إلى ذلك، قد يتم تثبيت إصدارات متعددة من FCM للمنتجات وإصدارات FCM من system_ext باستخدام وحدات Soong.
حدِّد ما يلي:
-
حدِّد وحدة في
device/manufacturer/device_name/Android.bp
. على سبيل المثال (استبدِل system_ext بمنتج لنظام إدارة الموافقة (FCM) للمنتج):vintf_compatibility_matrix { name: "system_ext_compatibility_matrix.xml", stem: "compatibility_matrix.xml", system_ext_specific: true, // product_specific: true, // for product FCM srcs: [ "system_ext_compatibility_matrix.xml", ], }
-
ثبِّت الوحدة على
device/manufacturer/device_name/device.mk
. مثلاً:PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لمصفّحة توافق الإطارات:
# common system compatibility matrix for each FCM version BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ POLICYVERS=$(POLICYVERS) \ BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION) assemble_vintf \ -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml # framework compatibility matrixes at each FCM version assemble_vintf -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \ --kernel=... # product framework compatibility matrix; only when # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for # product FCM is defined assemble_vintf -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE) -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml # system_ext framework compatibility matrix; only when the Soong module for # system_ext FCM is defined assemble_vintf -i <srcs for the soong module> -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml
أثناء التشغيل، يجمع عنصر VINTF مجموعة فرعية من مصفوفات ملف التوافق مع النظام ومصفوفات التوافق مع المنتجات على أنّها مصفوفة التوافق مع إطار العمل. اطّلِع على مخطّط متوافقة للاطّلاع على التفاصيل.
مثال: إنشاء بيان المورّد من الأجزاء
يمكن تجميع عدة أجزاء من بيان المورّد في وقت الإنشاء. مثلاً:
<!-- device/manufacturer/device_name/manifest_common.xml --> <manifest version="1.0" type="device"> <!-- common HALs here --> </manifest>
<!-- device/manufacturer/device_name/ir.xml --> <manifest version="1.0" type="device"> <hal> <name>android.hardware.ir</name> <version>1.0</version> <!-- other fields --> </hal> </manifest>
# device/manufacturer/device_name/BoardConfig.mk DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml ifdef BOARD_ENABLE_IR DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml endif
بعد ذلك، تُضيف assemble_vintf
واجهة برمجة التطبيقات IR HAL إلى بيان المورّد إذا كان
BOARD_ENABLE_IR
محدّدًا، وتحذفه إذا كان
BOARD_ENABLE_IR
غير محدّد. يتم تنفيذ الأوامر التالية
(المعدَّلة لحذف تفاصيل التنفيذ) لإنشاء بيان المورّد:
# if BOARD_ENABLE_IR is defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml # if BOARD_ENABLE_IR is not defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml
لمعرفة التفاصيل، راجع:
assemble_vintf --help
الاختبار
يستخدم مشروع platform/system/libvintf
مكتبة GTest لسلسلة رسائل برمجية وتحويلها إلى تنسيق ثنائي وفحص التوافق.
الترخيص
-
tinyxml2
(خارجية/tinyxml2) لتسلسل/إلغاء تسلسل العنصر إلى/من XML ترخيص مشابه لترخيص BSD libselinux
(external/selinux/libselinux) للحصول على إصدار policydb. ترخيص محتوى متاح للجميع-
libz
(خارجية/zlib) لفك الضغط عن/proc/config.gz
. ترخيص مشابه لترخيص BSD - يستخدم مشروع
libvintf
ترخيص Apache 2.0 (مع الملفَين المناسبَين MODULE_LICENSE_APACHE2 وNOTICE).