يجمّع كائن VINTF البيانات من device ملفات البيان وبيان إطار العمل (XML). كلاهما البيانات تشترك في تنسيق، على الرغم من أنه لا تنطبق جميع العناصر على كليهما (للحصول على تفاصيل في المخطط، راجِع مخطط ملف البيان).
بيان الجهاز
يتكون بيان الجهاز (الذي يقدّمه الجهاز) من بيان المورّد. وبيان ODM.
- يحدد بيان المورد HALs وإصدارات سياسة SELinux وما إلى ذلك المشتركة في SoC. أُنشأها جون هنتر، الذي كان متخصصًا
ويُنصح بوضعها في شجرة مصادر Android على
device/VENDOR/DEVICE/manifest.xml
، ولكن أجزاء متعددة استخدام الملفات. لمعرفة التفاصيل، يُرجى الاطّلاع على الأجزاء في ملف البيان و إنشاء رسالة مباشرة من الأجزاء - يسرد بيان ODM HALs الخاصة بالمنتج في
قسم ODM.
يحمّل كائن VINTF بيان ODM بهذا الترتيب:
- إذا تم تحديد
SKU
(حيثSKU
هي قيمة الخاصيةro.boot.product.hardware.sku
)،/odm/etc/vintf/manifest_SKU.xml
/odm/etc/vintf/manifest.xml
- إذا تم تحديد
SKU
،/odm/etc/manifest_SKU.xml
/odm/etc/manifest.xml
- إذا تم تحديد
- يسرد بيان البائع HALs الخاصة بالمنتج في قسم البائع.
يحمّل كائن VINTF بيان البائع بهذا الترتيب:
- إذا تم تحديد
SKU
(حيثSKU
هي قيمة الخاصيةro.boot.product.vendor.sku
)،/vendor/etc/vintf/manifest_SKU.xml
/vendor/etc/vintf/manifest.xml
- إذا تم تحديد
- يُحمِّل كائن VINTF بيان الجهاز بالترتيب التالي:
- في حال توفُّر بيان المورِّد، يمكنك دمج ما يلي:
- بيان البائع
- الأجزاء الاختيارية في بيان المورّد
- بيان ODM اختياري
- أجزاء اختيارية في بيان ODM
- بخلاف ذلك، في حال توفّر بيان ODM، يمكنك دمج بيان ODM مع ODM الاختياري. أجزاء البيان.
/vendor/manifest.xml
(قديم، بدون أجزاء)- أخيرًا، يمكنك دمج أجزاء البيان من أي واجهات برمجة تطبيقات خاصة بمورِّدين.
تجدر الإشارة إلى ما يلي:
- على الأجهزة القديمة، يتم استخدام بيان المورّد القديم وبيان ODM. تشير رسالة الأشكال البيانية قد يتجاوز بيان ODM بيان المورّد القديم بالكامل.
- على الأجهزة التي تعمل بنظام التشغيل Android 9، يتم دمج بيان ODM مع بيان البائع.
- عند الجمع بين قائمة من البيانات، قد يتم إلغاء البيانات التي تظهر لاحقًا في القائمة.
في البيانات التي تظهر في وقت سابق من القائمة، بشرط أن تكون العلامات في
يتضمن البيان السمة
override="true"
. على سبيل المثال، قد يتضمن بيان ODM إلغاء بعض علامات<hal>
من بيان المورّد. راجع وثائق السمةoverride
أدناه.
- في حال توفُّر بيان المورِّد، يمكنك دمج ما يلي:
يتيح هذا الإعداد للعديد من المنتجات المرتبطة باللوحة نفسها مشاركة المجموعة نفسها صورة البائع (التي توفر HALs شائعة) لكنها تحتوي على صور ODM مختلفة (والتي تحديد HALs الخاصة بالمنتج).
إليك مثال على بيان المورّد.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="2.0" type="device" target-level="1"> <hal> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.4</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> <instance>proprietary/0</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <version>1.0</version> <version>2.0</version> <interface> <name>INfc</name> <instance>nfc_nci</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <fqname>@2.0::INfc/default</fqname> </hal> <hal> <name>android.hardware.drm</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ICryptoFactory</name> <instance>default</instance> </interface> <interface> <name>IDrmFactory</name> <instance>default</instance> </interface> <fqname>@1.1::ICryptoFactory/clearkey</fqname> <fqname>@1.1::IDrmFactory/clearkey</fqname> </hal> <hal format="aidl"> <name>android.hardware.light</name> <version>1</version> <fqname>ILights/default</fqname> </hal> <hal format="aidl"> <name>android.hardware.power</name> <version>2</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <hal format="native"> <name>GLES</name> <version>1.1</version> <version>2.0</version> <version>3.0</version> </hal> <sepolicy> <version>25.0</version> </sepolicy> </manifest>
في ما يلي مثال على بيان ODM.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device"> <!-- camera 3.4 in vendor manifest is ignored --> <hal override="true"> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.5</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> </interface> </hal> <!-- NFC is declared to be disabled --> <hal override="true"> <name>android.hardware.nfc</name> <transport>hwbinder</transport> </hal> <hal> <name>android.hardware.power</name> <transport>hwbinder</transport> <version>1.1</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> </manifest>
في ما يلي مثال لبيان الجهاز في حزمة التحديث عبر الهواء.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device" target-level="1"> <!-- hals ommited --> <kernel version="4.4.176"> <config> <key>CONFIG_ANDROID</key> <value>y</value> </config> <config> <key>CONFIG_ARM64</key> <value>y</value> </config> <!-- other configs ommited --> </kernel> </manifest>
لمعرفة مزيد من التفاصيل، يُرجى الاطّلاع على بيان الجهاز. التطوير:
بيان إطار العمل
يتكون ملف بيان إطار العمل من بيان النظام وبيان المنتج ملف app_ext.
-
يتم إنشاء بيان النظام (المقدم من Google) يدويًا
تتوفّر في شجرة مصادر Android في
/system/libhidl/manifest.xml
- يسرد بيان المنتج (المقدم من الجهاز) HALs التي تتم خدمتها بواسطة الوحدات المثبتة على قسم المنتج.
-
يتضمّن بيان System_ext (المقدّم من الجهاز) ما يلي:
- HALs التي تتم معالجتها بواسطة وحدات مثبّتة في القسم system_ext
- إصدارات VNDK؛
- إصدار حزمة تطوير البرامج (SDK) للنظام
كما هو الحال في بيان الجهاز، يمكن استخدام ملفات أجزاء متعددة. للحصول على التفاصيل، يمكنك مراجعة الأجزاء في ملف البيان:
إليك مثال على بيان إطار العمل.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="framework"> <hal> <name>android.hidl.allocator</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <transport arch="32+64">passthrough</transport> <version>1.0</version> <interface> <name>IMapper</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.manager</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.frameworks.sensorservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <hal max-level="5"> <name>android.frameworks.schedulerservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISchedulingPolicyService</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </manifest>
أجزاء البيان
في نظام التشغيل Android 10 والإصدارات الأحدث، يمكنك ربط بيان. مع وحدة HAL في نظام التصميم. هذا يسهل تضمين وحدة HAL في نظام التصميم بشكل مشروط.
مثال
في ملف Android.bp
أو Android.mk
، أضِف
vintf_fragments
إلى أي وحدة. على سبيل المثال، يمكنك تعديل
الوحدة التي تتناول تنفيذك لخوارزمية HAL
(my.package.foo@1.0-service-bar
).
... { ... vintf_fragments: ["manifest_foo.xml"], ... }
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
في ملف باسم manifest_foo.xml
، أنشئ ملف البيان لـ
هذه الوحدة. في وقت الإصدار، تتم إضافة ملف البيان هذا إلى الجهاز. جارٍ الإضافة
يكون الإدخال هنا مماثلاً لإضافة إدخال في ملف البيان الرئيسي للجهاز.
يتيح ذلك للعملاء استخدام الواجهة ويسمح لـ VTS بتحديد طبقة تجريد الأجهزة (HAL)
عمليات التنفيذ على الجهاز. أي معلومة عادية
يفعله هذا البيان أيضًا.
ينفذ المثال أدناه
android.hardware.foo@1.0::IFoo/default
، الذي تم تثبيته على
القسم vendor
أو odm
. فإذا تم تثبيته على
القسم system
أو product
أو system_ext
، نوع الاستخدام
framework
بدلاً من
النوع device
.
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.foo</name> <transport>hwbinder</transport> <fqname>@1.0::IFoo/default</fqname> </hal> </manifest>
في حال تضمين وحدة HAL في واجهة APEX للمورّدين،
إضافة أجزاء VINTF المرتبطة به ضمن APEX نفسه باستخدام prebuilt_etc
شرحها في أجزاء VINTF.
مخطط ملف البيان
يصف هذا القسم معنى علامات XML هذه. بعض الأعمدة "مطلوبة" العلامات
قد تكون مفقودة من ملف المصدر في شجرة مصادر Android ومكتوب بواسطة
assemble_vintf
في وقت التصميم. يجب أن تكون العلامات المطلوبة موجودة في الملفات المقابلة على
الخاص بك.
?xml
- اختياري. تقدِّم المعلومات إلى محلّل XML فقط.
manifest.version
- يجب ملء الحقل. هي نسخة وصفية من هذا البيان. يصف والعناصر المتوقعة في البيان. لا صلة لها بإصدار XML.
manifest.type
- يجب ملء الحقل. نوع هذا البيان. وهي تحتوي على القيمة
device
ملف بيان الجهاز وframework
لبيان إطار العمل manifest.target-level
- مطلوب لبيان الجهاز. تحدِّد هذه السياسة مصفوفة توافق إطار العمل. (FCM) الذي يستهدف بيان الجهاز هذا أن يكون متوافقًا معهم. ويُعرف هذا أيضًا بإصدار الشحن عبر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" من الجهاز.
manifest.hal
- يمكن التكرار اختياريًا. صورة HAL واحدة (HIDL أو أصلية، مثل GL)
استنادًا إلى سمة
format
manifest.hal.format
- اختياري. يمكن أن تكون القيمة واحدة مما يلي:
hidl
: أنظمة HIDL HALs. هذا هو الخيار التلقائي.aidl
: HALs للرابطة الدولية للمعايير الدولية (AIDL). صالح فقط في الإصدار التعريفي 2.0 والإصدارات الأحدث من ملف البيان.native
: HALs أصلية
manifest.hal.max-level
- اختياري. صالح فقط في بيانات إطار العمل. في حال ضبطها، سيتم ضبط قيمة HAL على قيمة أدنى من الحدّ الأقصى. مقارنةً بإصدار FCM المستهدف في بيان إطار العمل.
manifest.hal.override
- اختياري. يمكن أن تكون القيمة واحدة مما يلي:
true
: إلغاء عناصر<hal>
الأخرى باستخدام نفس<name>
والإصدار الرئيسي. إذا كانت الإجابة "لا" تضم هذه القائمة<version>
أو<fqname>
العنصر<hal>
، ثم العنصر<hal>
يعلن عن إيقاف HAL هذا.false
: عدم إلغاء عناصر<hal>
الأخرى باستخدام<name>
نفس الإصدار الرئيسي
manifest.hal.name
- يجب ملء الحقل. تمثّل هذه السمة اسم حزمة HAL المؤهل بالكامل. يمكن أن تستخدم إدخالات HAL متعددة
بالاسم نفسه. أمثلة:
android.hardware.camera
(HIDL أو AIDL HAL)GLES
(HAL الأصلي، يتطلب الاسم فقط)
manifest.hal.transport
- مطلوبة عند
manifest.hal.format == "hidl"
. يجب ألا يكون وجوده بطريقة أخرى. توضح طريقة النقل المستخدمة عندما تكون الواجهة من تم الاستعلام عن هذه الحزمة من مدير الخدمة. يمكن أن تكون القيمة واحدة مما يلي:hwbinder
: وضع الدمجpassthrough
: وضع العبور
- اختيارية عند
manifest.hal.format == "aidl"
. يجب ألا يكون وجوده بطريقة أخرى. يحدد طريقة النقل المستخدمة عند عرض واجهة عن بُعد. يجب أن تكون القيمة:inet
: مقبس Inet
manifest.hal.transport.ip
وmanifest.hal.transport.port
لتحديد معلومات اتصال Inet بشكل أكبر. manifest.hal.transport.arch
- مطلوب من أجل
passthrough
ويجب ألا يكون موجودًا من أجلhwbinder
تصف مدى تداخل خدمة العبور المقدمة. يمكن أن تكون القيمة واحدة مما يلي:32
: وضع 32 بت64
: وضع 64 بت32+64
: كلاهما
manifest.hal.transport.ip
- مطلوبة لـ
inet
ويجب ألا تكون موجودة في أي مكان آخر. وصف عنوان IP التي يتم عرض الواجهة البعيدة منها. manifest.hal.transport.port
- مطلوبة لـ
inet
ويجب ألا تكون موجودة في أي مكان آخر. تصف المنفذ من التي يتم عرض الواجهة البعيدة لها. manifest.hal.version
- يمكن التكرار اختياريًا. نسخة من علامات
hal
في البيان.
بالنسبة إلى HIDL وHALs الأصلية، يكون التنسيقMAJOR.MINOR
بالنسبة الأمثلة، يُرجى الرجوع إلىhardware/interfaces
vendor/${VENDOR}/interfaces
,frameworks/hardware/interfaces
، أوsystem/hardware/interfaces
قد تستخدم شهادة HIDL وHALs الأصلية حقول إصدارات متعدّدة طالما أنّها تمثّل الإصدارات الرئيسية المميزة، بحيث تضم نسخة ثانوية واحدة فقط لكل رئيسي تم توفير الإصدار. على سبيل المثال، لا يمكن أن يتواجد 3.1 و3.2 لكن يمكن استخدام 1.0 و3.4. ينطبق ذلك على جميع عناصرhal
التي تحمل الاسم نفسه، ما لمoverride="true"
قيم<version>
ليست ومرتبطة بـ<fqname>
لأن<fqname>
ويحمل نسخة.
بالنسبة إلى AIDL HALs، يجب عدم توفّر<version>
على الأجهزة التي تعمل. Android 11 والإصدارات الأقدم يجب أن يكون<version>
عدد صحيح واحد على الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android والإصدارات الأحدث. يجب إدخال سمة<version>
واحدة كحدّ أقصى لكل سمة. صف واحد ((package, interface, instance)
) إذا لم تكن موجودة، تكون القيمة التلقائية1
قيمة<version>
مرتبطة بـ كل<fqname>
في<hal>
نفسها لأن<fqname>
ليس لديه نسخة. manifest.hal.interface
- مطلوب، يمكن التكرار بدون تكرار. اذكر واجهة في
حزمة لها اسم مثيل. يمكن أن يكون هناك العديد
عناصر
<interface>
في<hal>
الأسماء ويجب أن تكون فريدة. manifest.hal.interface.name
- يجب ملء الحقل. اسم الواجهة.
manifest.hal.interface.instance
- مطلوب، يمكن تكراره. اسم مثيل الواجهة. يمكن أن يحتوي على عدة
حالات لواجهة ما ولكن ليست هناك
<instance>
مكررة manifest.hal.fqname
- يمكن التكرار اختياريًا. طريقة بديلة لتحديد مثيل لـ HAL
بالاسم
manifest.hal.name
.- بالنسبة إلى HIDL HALs،
فإن التنسيق هو
@MAJOR.MINOR::INTERFACE/INSTANCE
- بالنسبة إلى AIDL HALs، يكون التنسيق
INTERFACE/INSTANCE
- بالنسبة إلى HIDL HALs،
فإن التنسيق هو
manifest.sepolicy
- يجب ملء الحقل. تحتوي على جميع الإدخالات المرتبطة بسياسة sepolicy.
manifest.sepolicy.version
- مطلوب لبيان الجهاز. يعرِّف إصدار SELinux. تحتوي على
التنسيق
SDK_INT.PLAT_INT
. manifest.vendor-ndk
- مطلوب، يمكن تكراره، المطلوبة لبيان إطار العمل. يجب ألا يكون موجودًا
في بيان الجهاز. يجب أن تحتوي إدخالات
<vendor-ndk>
المتعددة على<version>
مختلفة. تصف مجموعة من لقطات VNDK التي يوفّرها إطار العمل manifest.vendor-ndk.version
- يجب ملء الحقل. هذا عدد صحيح موجب يمثّل إصدار VNDK نبذة عني.
manifest.vendor-ndk.library
- اختياري، يمكنك التكرار بدون تكرار. تصف مجموعة من مكتبات VNDK
الذي يوفره إطار عمل للقطة بائع VNDK هذه. القيمة هي
اسم ملف مكتبة، على سبيل المثال
libjpeg.so
، بما في ذلك البادئةlib
واللاحقة.so
. لا يتم تضمين أي مكونات مسار المسموح بها. manifest.system-sdk.version
- اختياري، يمكن التكرار بدون تكرارات؛ يستخدمه إطار العمل فقط البيان. يصِف مجموعة من إصدارات حزمة تطوير البرامج (SDK) للنظام يوفّرها إطار العمل التطبيقات التابعة لموفّري الخدمات
manifest.kernel
- اختياري. تصف المعلومات الثابتة عن النواة (kernel).
manifest.kernel.target-level
- اختياري. يصف فرع النواة. يتم تعيين قيمتها الافتراضية على
manifest.target-level
إذا لم يكن متوفّرًا. يجب أن يكون أكبر من أو يساويmanifest.target-level
. عرض قواعد مطابقة النواة (kernel) لمزيد من التفاصيل.