البيانات

يجمّع كائن VINTF البيانات من device ملفات البيان وبيان إطار العمل (XML). كلاهما البيانات تشترك في تنسيق، على الرغم من أنه لا تنطبق جميع العناصر على كليهما (للحصول على تفاصيل في المخطط، راجِع مخطط ملف البيان).

بيان الجهاز

يتكون بيان الجهاز (الذي يقدّمه الجهاز) من بيان المورّد. وبيان ODM.

  • يحدد بيان المورد HALs وإصدارات سياسة SELinux وما إلى ذلك المشتركة في SoC. أُنشأها جون هنتر، الذي كان متخصصًا ويُنصح بوضعها في شجرة مصادر Android على device/VENDOR/DEVICE/manifest.xml، ولكن أجزاء متعددة استخدام الملفات. لمعرفة التفاصيل، يُرجى الاطّلاع على الأجزاء في ملف البيان و إنشاء رسالة مباشرة من الأجزاء
  • يسرد بيان ODM HALs الخاصة بالمنتج في قسم ODM. يحمّل كائن VINTF بيان ODM بهذا الترتيب:
    1. إذا تم تحديد SKU (حيث SKU هي قيمة الخاصية ro.boot.product.hardware.sku/odm/etc/vintf/manifest_SKU.xml
    2. /odm/etc/vintf/manifest.xml
    3. إذا تم تحديد SKU، /odm/etc/manifest_SKU.xml
    4. /odm/etc/manifest.xml
  • يسرد بيان البائع HALs الخاصة بالمنتج في قسم البائع. يحمّل كائن VINTF بيان البائع بهذا الترتيب:
    1. إذا تم تحديد SKU (حيث SKU هي قيمة الخاصية ro.boot.product.vendor.sku/vendor/etc/vintf/manifest_SKU.xml
    2. /vendor/etc/vintf/manifest.xml
  • يُحمِّل كائن VINTF بيان الجهاز بالترتيب التالي:
    1. في حال توفُّر بيان المورِّد، يمكنك دمج ما يلي:
      1. بيان البائع
      2. الأجزاء الاختيارية في بيان المورّد
      3. بيان ODM اختياري
      4. أجزاء اختيارية في بيان ODM
    2. بخلاف ذلك، في حال توفّر بيان ODM، يمكنك دمج بيان ODM مع ODM الاختياري. أجزاء البيان.
    3. /vendor/manifest.xml (قديم، بدون أجزاء)
    4. أخيرًا، يمكنك دمج أجزاء البيان من أي واجهات برمجة تطبيقات خاصة بمورِّدين.

    تجدر الإشارة إلى ما يلي:

    • على الأجهزة القديمة، يتم استخدام بيان المورّد القديم وبيان 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
اختياري. يمكن أن تكون القيمة واحدة مما يلي:
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
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) لمزيد من التفاصيل.