مصفوفات التوافق

يصف هذا القسم مصفوفات توافق الإطار والجهاز ومخطط مصفوفة التوافق . لقواعد المباراة ، انظر قواعد المطابقة .

مصفوفة توافق الإطار (FCM)

تصف مصفوفة توافق الإطار (FCM) متطلبات الإطار على الجهاز الذي يعمل عليه. تتكون مصفوفة توافق الإطار من مصفوفة توافق النظام ومصفوفة توافق المنتج ومصفوفة توافق نص النظام. يجب تلبية متطلبات FCM من خلال بيان الجهاز (المتطلبات التي يتم فرضها في وقت الإنشاء ووقت التشغيل وفي VTS).

يعد كل من system_ext FCM و FCM المنتج مكملين لـ FCM الخاص بالجهاز (مثبت في قسم النظام).

  • يجب أن يعكس جهاز FCM متطلبات الوحدات النمطية في قسم النظام .
  • يجب أن تعكس FCM system_ext المتطلبات من خلال الوحدات النمطية في قسم نص النظام.
  • يجب أن يعكس المنتج FCM المتطلبات حسب الوحدات في قسم المنتج .

يجب أن تتوافق جميع نماذج FCM مع تعديلات الشركة المصنعة للمعدات الأصلية لإطار العمل في أقسام النظام والمنتج و system_ext. على سبيل المثال ، إذا كان أحد التطبيقات المثبتة في قسم المنتج يستخدم امتداد مورد لواجهة HAL ، فيجب الإعلان عن متطلبات واجهة HAL في المنتج FCM.

مثال على ملف مصفوفة توافق النظام:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

لمزيد من التفاصيل ، راجع دورة حياة FCM .

مصفوفة توافق المنتج

المنتج FCM هو ملف مصفوفة توافق إطار العمل في قسم المنتج. ينضم كائن VINTF إلى المنتج FCM مع FCMs في أقسام النظام و system_ext في وقت التشغيل.

مثال على ملف FCM للمنتج:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

مصفوفة توافق نص النظام

يعد ملف system_ext FCM ملف مصفوفة توافق إطار العمل في قسم نص النظام. ينضم كائن VINTF إلى system_ext FCM مع FCMs في أقسام النظام والمنتج في وقت التشغيل. راجع مصفوفة توافق المنتج للحصول على مثال لملف system_ext FCM.

مصفوفة توافق الجهاز (DCM)

تصف مصفوفة توافق الجهاز مجموعة من المتطلبات التي يتوقعها الجهاز من إطار العمل (المتطلبات التي يتم فرضها عند الإطلاق ووقت OTA).

مثال على ملف DCM:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

مخطط مصفوفة التوافق

يصف هذا القسم معنى علامات XML هذه. يمكن أن تكون بعض العلامات "المطلوبة" مفقودة من الملف المصدر في شجرة مصدر Android ويتم كتابتها بواسطة assemble_vintf في وقت الإنشاء. يجب أن تكون العلامات "المطلوبة" موجودة في الملفات المقابلة على الجهاز.

?xml
اختياري. يوفر فقط معلومات لمحلل XML.
compatibility-matrix.version
مطلوب. نسخة ميتا من مصفوفة التوافق هذه. يصف العناصر المتوقعة في مصفوفة التوافق. لا علاقة لها بإصدار XML.
compatibility-matrix.type
مطلوب. نوع مصفوفة التوافق هذه:
  • "device" : مصفوفة توافق الجهاز.
  • "framework" : مصفوفة توافق الإطار.
manifest.level
مطلوب لمصفوفة توافق الإطار. في Android 12 والإصدارات الأحدث ، يُسمح به في ملفات مصفوفة توافق إطار العمل في أقسام المنتج و system_ext. يحدد إصدار مصفوفة توافق الإطار (إصدار FCM) لهذا الملف. لا تعلن عن ذلك في مصفوفة توافق إطار العمل الخاصة بالجهاز (مثل DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
اختياري ويمكن تكرارها. يسرد HAL واحد (HIDL أو أصلي) مطلوب من قبل مالك مصفوفة التوافق (إطار عمل أو جهاز) ليكون موجودًا. يتم تمييز إدخالات HAL بواسطة عنصر <name> ؛ يمكن أن يكون هناك العديد من إدخالات HAL بنفس الاسم (تشير إلى "و" الشرط).
compatibility-matrix.hal.format
اختياري. يمكن أن تكون القيمة واحدة مما يلي:
  • "hidl" : HIDL HALs. هذا هو الافتراضي.
  • "aidl" : AIDL HALs . صالح فقط على مصفوفة التوافق الإصدار الفوقية 2.0.
  • "native" : HALs أصلية.
compatibility-matrix.hal.optional
السمة اختيارية والافتراضيات على خطأ. يوضح ما إذا كان HAL هذا اختياريًا لمالك مصفوفة التوافق (إطار عمل أو جهاز). إذا تم وضع علامة على الإدخال <hal> على أنه اختياري ، فهذا يعني أن المالك يمكنه العمل مع HAL هذا ، إذا كان موجودًا ، ولكنه لا يتطلب أن يكون موجودًا.
compatibility-matrix.hal.name
مطلوب. اسم الحزمة الكامل لهذا HAL. أمثلة:
  • android.hardware.camera (HIDL أو AIDL HAL)
  • GLES (أصلي HAL ، يتطلب الاسم فقط)
compatibility-matrix.hal.version
قائمة نطاقات الإصدارات (راجع HAL مطابقة ) التي تحدد الإصدارات التي يتوقعها مالك مصفوفة التوافق (إطار عمل أو جهاز).

بالنسبة لـ HIDL و HALs الأصلية ، المطلوبة ، يمكن التكرار بدون تكرارات. التنسيق هو واحد مما يلي:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (ما يعادل MAJOR . MINOR - MINOR )

بالنسبة إلى AIDL HALs ، يجب ألا تكون موجودة على الأجهزة التي تعمل بنظام Android 11 والإصدارات الأقدم. اختياري على الأجهزة التي تعمل بإصدارات أحدث. إذا تم تحديد التنسيق ، فهو واحد مما يلي:
  • VERSION_MIN - VERSION_MAX
  • VERSION (ما يعادل VERSION - VERSION )
إذا لم يتم تحديدها ، يتم تعيين القيمة الافتراضية على 1 .
compatibility-matrix.hal.interface
اختياري ، يمكن أن تكرر. قائمة بالواجهات المطلوبة من HAL.
compatibility-matrix.hal.interface.name
مطلوب. اسم الواجهة.
compatibility-matrix.hal.interface.instance
اختياري ، يمكن أن تكرر. قائمة بالمثيلات المطلوبة لهذه الواجهة.
compatibility-matrix.hal.interface.regex-instance
اختياري ، يمكن أن تكرر. قائمة أنماط اسم المثيل المطلوبة على هذه الواجهة. استخدم تنسيق Extended Regular Expression .
compatibility-matrix.kernel
اختياري ، يمكن أن تكرر. حدد قائمة بتكوينات kernel التي يتطلبها إطار العمل في كل إصدار من إصدارات kernel.
يمكن أن توجد عدة <kernel> لها نفس <version> للإشارة إلى علاقة "و". كل <kernel> هو "جزء" من المتطلبات التي يتم تمكينها فقط عند <conditions> .
compatibility-matrix.kernel.version
مطلوب. إصدار النواة. التنسيق هو VERSION . MAJOR_REVISION . MINOR_REVISION . يجب أن يتطابق الإصدار والمراجعة الرئيسية تمامًا. مراجعة ثانوية تحدد الحد الأدنى لإصدار LTS من kernel الذي يتوقعه إطار العمل.
compatibility-matrix.kernel.condition
اختياري. يجب ألا يكون موجودًا لأول <kernel> من كل إصدار. يحدد قائمة الشروط. عند استيفاء الشروط ، يتم تمكين المتطلبات المذكورة في جزء <kernel> هذا.
compatibility-matrix.kernel.config
اختياري ، يمكن أن تكرر. يسرد عناصر CONFIG التي يجب مطابقتها لإصدار kernel هذا. كل عنصر من عناصر CONFIG عبارة عن زوج ذي قيمة رئيسية ؛ يتم تمييز عناصر التكوين بواسطة المفتاح.
compatibility-matrix.kernel.config.key
مطلوب. الاسم الأساسي لعنصر CONFIG . يبدأ بـ CONFIG_ .
compatibility-matrix.kernel.config.value
مطلوب. قيمة عنصر CONFIG . يعتمد التنسيق على النوع:
  • string . تم حذف الاقتباسات.
  • int . يتم قبول القيم العشرية والسداسية العشرية (يجب أن تبدأ بـ 0x أو 0X) . يتم تفسيره على أنه عدد صحيح 64 بت ؛ الفيضانات تؤدي إلى الاقتطاع. (يقبل المحلل اللغوي القيم من -2 64 + 1 إلى 2 64-1 ، يتم اقتطاع 65 بت ؛ لمزيد من التفاصيل راجع صفحة الدليل strtoull .)
  • range . التنسيق هو [int]-[int] ، على سبيل المثال 10-20 . يتم قبول القيم السداسية العشرية ويجب أن تبدأ بـ 0x أو 0X . يجب أن يكون الحدان عددًا صحيحًا 64 بت بدون إشارة.
  • tristate . القيم الصالحة هي y و m و n .
compatibility-matrix.kernel.config.value.type
مطلوب. نوع قيمة عنصر CONFIG ، أحد:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
مطلوب. يحتوي على جميع الإدخالات المتعلقة بالسياسة. تستخدم فقط من خلال مصفوفة توافق الإطار.
compatibility-matrix.sepolicy.sepolicy-version
مطلوب ، يمكن أن يكرر. يصف المتطلبات الموجودة في إصدار التأمين. يتوافق مع الإصدار manifest.sepolicy.version . يحدد كل مثيل لعنصر مجموعة من إصدارات منفصلة.
compatibility-matrix.sepolicy.kernel-sepolicy-version
مطلوب. يعلن عن إصدار policydb الذي يعمل به إطار العمل.
compatibility-matrix.avb.vbmeta-version
اختياري؛ تستخدم فقط من خلال مصفوفة توافق الإطار. تعلن عن إصدار AVB المستخدم للتوقيع على system.img . موقوف في Android 10.
compatibility-matrix.vendor-ndk
اختياري؛ تستخدم فقط من خلال مصفوفة توافق الجهاز. يعلن عن متطلبات لقطة بائع VNDK. إذا كانت مفقودة ، فلن يتم وضع متطلبات VNDK على صورة النظام.
compatibility-matrix.vendor-ndk.version
مطلوب. عدد صحيح موجب يعلن عن إصدار VNDK المطلوب بواسطة صورة البائع.
compatibility-matrix.vendor-ndk.library
اختياري ، يمكن أن تكرر. يعلن عن مجموعة من مكتبات VNDK التي تتطلبها صورة البائع. نفس الدلالات مثل manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
اختياري ، يمكن أن تكرر ؛ تستخدم فقط من خلال مصفوفة توافق الجهاز. تعلن عن متطلبات تطبيقات البائع على إصدارات System SDK. إذا كانت مفقودة ، فلن يتم وضع متطلبات System SDK على صورة النظام.