دورة حياة FCM

يحتوي إصدار إطار عمل Android على عدة مصفوفات توافق إطار العمل (FCMs) - واحدة لكل إصدار Target FCM قابل للترقية - تحدد ما قد يستخدمه إطار العمل ومتطلبات إصدار الهدف من FCM. كجزء من دورة حياة FCM ، يقوم Android بإهمال وإزالة HIDL HALs ، ثم يعدل ملفات FCM لتعكس حالة إصدار HAL .

لتمكين OTAs الخاصة بإطار العمل فقط في النظم البيئية الخاصة بهم ، يجب على الشركاء الذين يقومون بتوسيع واجهات المورد أيضًا إهمال وإزالة HIDL HALs باستخدام نفس الأساليب.

المصطلح

مصفوفة توافق الإطار (FCM) ملف XML يحدد متطلبات إطار العمل على تطبيقات المورد المطابقة. يتم إصدار مصفوفة التوافق ، ويتم تجميد إصدار جديد لكل إصدار إطار عمل. يحتوي كل إصدار إطار عمل على نماذج FCM متعددة.
إصدارات FCM للنظام الأساسي (S F ) مجموعة جميع إصدارات FCM في إصدار إطار العمل. يمكن أن يعمل إطار العمل مع أي تطبيق بائع يتوافق مع أحد نماذج FCM هذه.
إصدار FCM (F) الإصدار الأعلى من بين جميع نماذج FCM في إصدار إطار العمل.
إصدار FCM المستهدف (V) إصدار FCM المستهدف (من S F ) ، المعلن صراحة في بيان الجهاز ، يرضي تطبيق البائع. يجب إنشاء تطبيق البائع مقابل FCM منشور ، على الرغم من أنه قد يعلن عن إصدارات HAL الأحدث في بيان الجهاز الخاص به.
نسخة HAL إصدار HAL له التنسيق foo@xy ، حيث foo هو اسم HAL و xy هو الإصدار المحدد ؛ على سبيل المثال ، nfc@1.0 ، keymaster@3.0 (تم حذف بادئة الجذر ، مثل android.hardware ، في هذا المستند.)
بيان الجهاز ملفات XML التي تحدد إصدارات HAL التي يوفرها جانب الجهاز لواجهة البائع ، بما في ذلك البائع وصور ODM. محتويات بيان الجهاز مقيدة بإصدار Target FCM للجهاز ولكن يمكن إدراج HALs الأحدث تمامًا بالنسبة إلى FCM المقابل لـ V.
HALs الجهاز HALs المُدرجة (المقدمة) في بيان الجهاز والمدرجة (إما مطلوبة أو اختيارية) في مصفوفة توافق إطار العمل (FCM).
مصفوفة توافق الجهاز (DCM) ملف XML يحدد متطلبات المورّد في تطبيقات إطار العمل المطابقة. يحتوي كل جهاز على DCM واحد.
بيان الإطار ملف XML يحدد إصدارات HAL التي يوفرها جانب إطار العمل لواجهة البائع ، بما في ذلك النظام ونص النظام وصور المنتج. يتم تعطيل HALs في بيان إطار العمل ديناميكيًا وفقًا لإصدار Target FCM للجهاز.
HALs الإطار HALs المُدرجة على النحو المنصوص عليه في بيان إطار العمل والمدرجة على أنها مطلوبة أو اختيارية في مصفوفة توافق الجهاز (DCM).

التطوير في إصدار FCM جديد

يعمل Android على زيادة إصدار FCM لكل إصدار إطار (مثل Android 8 ، 8.1 ، إلخ). أثناء التطوير ، يتم إنشاء compatibility_matrix.current.xml matrix.current.xml ( F ) compatibility_matrix.f.xml الحالي_matrix.f.xml (حيث f < F ) لم يعد يتغير.

لبدء التطوير في إصدار F جديد:

  1. انسخ أحدث compatibility_matrix.<F-1>.xml إلى التوافق_ compatibility_matrix.current.xml .
  2. قم بتحديث سمة level في الملف إلى F
  3. أضف قواعد البناء المقابلة لتثبيت مصفوفة التوافق هذه على الجهاز.

تقديم HAL جديد

أثناء التطوير ، عند تقديم HAL جديد (Wi-Fi و NFC وما إلى ذلك) لنظام Android على إصدار FCM الحالي F ، أضف HAL ​​إلى compatibility_matrix.current.xml matrix.current.xml بالإعدادات optional التالية:

  • optional="false" إذا كان يجب تشغيل الأجهزة المشحونة بـ V = F مع HAL هذا ،

    أو
  • optional="true" إذا كان بالإمكان تشغيل الأجهزة المشحونة بـ V = F بدون HAL.

على سبيل المثال ، قدم Android 8.1 cas@1.0 باعتباره HAL اختياريًا. الأجهزة التي تعمل بنظام Android 8.1 غير مطلوبة لتنفيذ HAL ، لذلك تمت إضافة الإدخال التالي إلى compatibility_matrix.current.xml matrix.current.xml (تمت إعادة تسميته إلى التوافق_ compatibility_matrix.2.xml بعد إصدار Android 8.1):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

ترقية HAL (صغير)

أثناء التطوير ، عندما يحتوي HAL على ترقية إصدار ثانوي من xz إلى x.(z+1) في FCM الإصدار F الحالي ، إذا كان هذا الإصدار هو:

  • مطلوب على الأجهزة التي يتم تشغيلها باستخدام V = F ، يجب أن يشير compatibility_matrix.current.xml matrix.current.xml إلى x.(z+1) optional="false" .
  • غير مطلوب على الأجهزة التي يتم تشغيلها باستخدام V = F ، يجب أن ينسخ compatibility_matrix.current.xml matrix.current.xml xy-z والاختيارية من التوافق_ماتريكس compatibility_matrix.<F-1>.xml وتغيير الإصدار إلى xw-(z+1) (حيث w >= y ).

على سبيل المثال ، قدم Android 8.1 broadcastradio@1.1 radio@1.1 كترقية إصدار ثانوي لـ 1.0 HAL. يعد الإصدار الأقدم ، broadcastradio@1.0 ، اختياريًا للأجهزة التي تعمل بنظام Android 8.0 بينما الإصدار الأحدث ، broadcastradio@1.1 @ 1.1 ، اختياري للأجهزة التي تعمل بنظام Android 8.1. في compatibility_matrix.1.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

تم نسخ هذا الإدخال إلى التوافق_ compatibility_matrix.current.xml (تمت إعادة تسميته إلى التوافق_ compatibility_matrix.2.xml بعد إصدار Android 8.1) وتم تعديله على النحو التالي:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

ترقية HAL (رئيسي)

أثناء التطوير ، عندما يحتوي HAL على ترقية إصدار رئيسي في FCM الإصدار F الحالي ، تتم إضافة الإصدار الرئيسي الجديد x.0 إلى التوافق_ compatibility_matrix.current.xml بالإعدادات optional التالية:

  • optional="false" مع الإصدار x.0 فقط ، إذا كان يجب تشغيل الأجهزة المشحونة بـ V = F بـ x.0 .
  • optional="false" ولكن مع الإصدارات الرئيسية الأقدم في نفس علامة <hal> ، إذا كان يجب تشغيل الأجهزة التي يتم شحنها مع V = F مع HAL هذا ، ولكن يمكن تشغيلها باستخدام إصدار رئيسي أقدم.
  • optional="true" إذا لم يكن على الأجهزة التي يتم شحنها مع V = F تشغيل HAL.

على سبيل المثال ، يقدم Android 9 health@2.0 إصدار رئيسي من 1.0 HAL ويبطل 1.0 HAL. الإصدار الأقدم health@1.0 اختياري للأجهزة التي تعمل بنظام Android 8.0 و Android 8.1. يجب ألا توفر الأجهزة التي تعمل بنظام Android 9 الإصدار 1.0 HAL الذي تم إيقافه ويجب أن توفر بدلاً من ذلك الإصدار 2.0 الجديد. في التوافق_matrix.legacy.xml ، compatibility_matrix.legacy.xml matrix.1.xml ، compatibility_matrix.1.xml compatibility_matrix.2.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

تم نسخ هذا الإدخال إلى التوافق_ compatibility_matrix.current.xml (تمت إعادة تسميته إلى التوافق_ compatibility_matrix.3.xml مع إصدار Android 9) وتعديله على النحو التالي:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

قيود:

  • نظرًا لأن 2.0 HAL compatibility_matrix.3.xml مع التوافق_matrix.3.xml مع الخيار optional="false" ، يجب أن يتم شحن الأجهزة التي تعمل بنظام التشغيل Android 9 مع 2.0 HAL.
  • نظرًا لأن 1.0 HAL ليس compatibility_matrix.3.xml ، فإن الأجهزة التي يتم تشغيلها باستخدام Android 9 يجب ألا توفر 1.0 HAL (حيث يعتبر HAL هذا مهملاً).
  • نظرًا لوجود 1.0 HAL في النسخة القديمة / 1 / 2.xml (إصدارات FCM الأقدم التي يمكن أن يعمل معها Android 9) كجهاز HAL اختياري ، لا يزال بإمكان إطار عمل Android 9 العمل مع 1.0 HAL (والذي لا يعتبر إصدار HAL تمت إزالته ).

إصدارات FCM الجديدة

تتم عملية إصدار إصدار FCM على قسم النظام بواسطة Google فقط كجزء من إصدار AOSP وتتضمن الخطوات التالية:

  1. أعد تسمية التوافق_ compatibility_matrix.current.xml إلى compatibility_matrix.F.xml .
  2. تأكد من أن الملف يحتوي على level="F" .
  3. قم بتحرير قواعد البناء المقابلة لتعكس تغيير اسم الملف.
  4. تأكد من بناء وتمهيد جميع الأجهزة.
  5. قم بتحديث اختبارات VTS للتأكد من أن الأجهزة التي يتم تشغيلها باستخدام أحدث إطار عمل (بناءً على مستوى واجهة برمجة تطبيقات الشحن) تحتوي على Target FCM Version V >= F
  6. انشر الملف إلى AOSP.

لا يمكن تغيير هذا الملف بمجرد إعادة تسميته ونشره. على سبيل المثال ، أثناء تطوير Android 9 ، تم إنشاء الملفات التالية hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

عندما يتم إصدار Android 9 ، يتم إعادة تسمية compatibility_matrix.current.xml matrix.current.xml إلى التوافق_ compatibility_matrix.3.xml ويتم إنشاء الملفات التالية hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

تضمن اختبارات VTS أن الأجهزة التي يتم تشغيلها باستخدام Android 9 لها إصدار الهدف من FCM> = 3.

بالإضافة إلى ذلك ، قد يسرد المنتج و system_ext FCMs أيضًا متطلبات كل إصدارات FCM للنظام الأساسي. يتم تحرير إصدارات FCM على أقسام المنتج و system_ext بواسطة مالك هذه الصور ، على التوالي. يجب أن تتوافق أرقام إصدار FCM على أقسام المنتج و system_ext مع تلك الموجودة في قسم النظام. على غرار إصدارات FCM على قسم النظام ، تعكس مصفوفة التوافق في الإصدار FCM في المنتج وأقسام نص النظام المتطلبات على جهاز بإصدار FCM الهدف F.

إهمال إصدار HAL

يعد رفض إصدار HAL قرارًا للمطور (على سبيل المثال ، بالنسبة لـ AOSP HALs ، تتخذ Google القرار). يمكن أن يحدث ذلك عند إصدار نسخة HAL أعلى (سواء كانت صغيرة أو كبيرة).

إيقاف استخدام HAL للجهاز

عندما يتم إهمال جهاز معين HAL foo@xy في FCM Version F ، فهذا يعني أن أي جهاز يتم تشغيله باستخدام Target FCM Version V = F أو أحدث يجب ألا يقوم بتطبيق foo في الإصدار xy أو أي إصدار أقدم من xy . لا يزال إصدار HAL المهمل مدعومًا بواسطة إطار العمل لترقية الأجهزة.

عند إصدار FCM الإصدار F ، يعتبر إصدار HAL foo@xy مهملًا إذا لم يتم ذكر إصدار HAL المحدد بشكل صريح في أحدث إصدار من FCM للإصدار المستهدف من FCM V = F بالنسبة للأجهزة التي يتم تشغيلها باستخدام V = F ، يكون أحد الشروط التالية صحيحًا:

  • يتطلب الإطار إصدارًا أعلى (رئيسي أو ثانوي) ؛
  • لم يعد إطار العمل يتطلب HAL بعد الآن.

على سبيل المثال ، في Android 9 ، تم تقديم health@2.0 كترقية إصدار رئيسي لـ 1.0 HAL. تم حذف health@1.0 من التوافق_ compatibility_matrix.3.xml ولكنه موجود في التوافق_ compatibility_matrix.1.xml و compatibility_matrix.2.xml .1.xml compatibility_matrix.legacy.xml .2.xml. ومن ثم ، يعتبر health@1.0 مهملاً.

نقض HAL إطار العمل

عندما يتم إهمال إطار عمل معين HAL foo@xy في FCM Version F ، فهذا يعني أن أي جهاز يتم تشغيله باستخدام Target FCM Version V = F أو أحدث يجب ألا يتوقع أن يوفر إطار العمل foo في الإصدار xy ، أو في أي إصدار أقدم من xy . لا يزال يتم توفير إصدار HAL المهمل بواسطة إطار العمل لترقية الأجهزة.

عند إصدار FCM الإصدار F ، يعتبر إصدار HAL foo@xy مهملًا إذا كان بيان إطار العمل يحدد max-level=" F - 1 " لـ foo@xy . بالنسبة للأجهزة التي يتم تشغيلها باستخدام V = F ، لا يوفر إطار العمل HAL foo@xy . يجب ألا تسرد مصفوفة توافق الجهاز على الأجهزة التي يتم تشغيلها باستخدام V = F إطارات HALs ذات max-level < V .

على سبيل المثال ، في Android 12 ، تم إهمال schedulerservice@1.0 . تم تعيين سمة max-level على 5 ، إصدار FCM المقدم في Android 11. راجع بيان إطار عمل Android 12 .

إزالة دعم إصدارات FCM المستهدفة

عندما تنخفض الأجهزة النشطة الخاصة بإصدار FCM معين من الإصدار V إلى ما دون حد معين ، تتم إزالة إصدار الهدف من FCM من المجموعة S F لإصدار إطار العمل التالي. يتم ذلك عن طريق كلتا الخطوتين التاليتين:

  • إزالة التوافق_ compatibility_matrix.V.xml من قواعد البناء (بحيث لا يتم تثبيته على صورة النظام) ، وحذف أي كود تم تنفيذه أو يعتمد على الوظيفة التي تمت إزالتها.
  • إزالة HALs الخاصة بإطار العمل ذات max-level الأدنى من V أو المساوي له من بيان إطار العمل ، وحذف أي رمز يقوم بتنفيذ HALs لإطار العمل الذي تمت إزالته.

لا يمكن ترقية الأجهزة التي لها إصدار FCM مستهدف خارج S F لإصدار إطار عمل معين إلى هذا الإصدار.

حالة إصدار HAL

تصف الأقسام التالية (بترتيب زمني) الحالات المحتملة لإصدار HAL.

غير مفرج عنه

بالنسبة لـ HALs للأجهزة ، إذا لم يكن إصدار HAL موجودًا في أي من مصفوفات التوافق العامة والمجمدة ، فسيتم اعتباره غير مطروح وربما قيد التطوير. يتضمن هذا إصدارات HAL الموجودة فقط في compatibility_matrix.current.xml . أمثلة:

  • أثناء تطوير Android 9 (قبل إعادة تسمية compatibiility_matrix.current.xml matrix.current.xml إلى التوافق_ compatibility_matrix.3.xml ) ، تم اعتبار health@2.0 HAL بمثابة HAL لم يتم إصداره.
  • لا يوجد teleportation@1.0 HAL في أي مصفوفات توافق تم إصدارها ، وتعتبر أيضًا طبقة تجريد الأجهزة (HAL) التي لم يتم إصدارها.

بالنسبة إلى HALs لإطار العمل ، إذا كان إصدار HAL موجودًا فقط في بيان إطار العمل لفرع تطوير غير ذي صلة ، فإنه يعتبر غير مطروح.

صدر والحالية

بالنسبة لـ HALs للأجهزة ، إذا كان إصدار HAL موجودًا في أي مصفوفة توافق عامة ومجمدة ، فسيتم إصدارها. على سبيل المثال ، بعد تجميد الإصدار 3 من FCM (عند إعادة تسمية compatibiility_matrix.current.xml matrix.current.xml إلى التوافق_ compatibility_matrix.3.xml ) ونشره إلى AOSP ، يعتبر health@2.0 HAL إصدارًا تم إصداره وحاليًا.

إذا كان إصدار HAL موجودًا في مصفوفة توافق عامة ومجمدة تحتوي على أعلى إصدار من FCM (باستثناء التوافق_ compatibility_matrix.current.xml ) ، فإن إصدار HAL يكون حاليًا (أي غير مهمل). على سبيل المثال ، إصدارات HAL الحالية (مثل nfc@1.0 المقدمة في التوافق_ compatibility_matrix.legacy.xml ) والتي لا تزال موجودة في compatibility_matrix.3.xml matrix.3.xml تعتبر أيضًا إصدارات تم إصدارها وإصدارات HAL الحالية.

بالنسبة إلى HALs لإطار العمل ، إذا كان إصدار HAL موجودًا في بيان إطار العمل لأحدث فرع تم إصداره بدون سمة max-level أو (بشكل غير عادي) مستوى max-level يساوي أو أعلى من إصدار FCM الذي تم إصداره في هذا الفرع ، فإنه يعتبر إصدارًا تم إصداره وإصدار HAL الحالي. على سبيل المثال ، يتم إصدار HAL displayservice في Android 12 ، كما هو محدد بواسطة Android 12framework manifest .

صدر لكنه موقوف

بالنسبة إلى HALs للأجهزة ، يتم إهمال إصدار HAL إذا وفقط إذا تم استيفاء كل ما يلي:

  • تم إصداره.
  • ليس في مصفوفة التوافق العامة والمجمدة التي تحتوي على أعلى إصدار من FCM.
  • لا يزال الإطار يدعمها في مصفوفة توافق عامة ومجمدة.

أمثلة:

ومن ثم فإن power@1.0 حالي ، ولكن لم يتم إهماله ، في Android 9.

بالنسبة لإطار HALs ، إذا كان إصدار HAL موجودًا في بيان إطار العمل لأحدث فرع تم إصداره max-level أقل من إصدار FCM الذي تم إصداره في هذا الفرع ، فإنه يعتبر إصدار HAL تم إصداره ولكن مهمل. على سبيل المثال ، تم إصدار HAL لخدمة schedulerservice ولكن تم إهماله في Android 12 ، كما هو محدد بواسطة Android 12framework manifest .

إزالة

بالنسبة إلى HALs للأجهزة ، تتم إزالة إصدار HAL إذا وفقط إذا كان ما يلي صحيحًا:

  • تم إصداره مسبقًا.
  • ليس في أي مصفوفة توافق عامة ومجمدة يدعمها إطار العمل.

يتم الاحتفاظ بمصفوفات التوافق العامة والمجمدة ولكن غير المدعومة من قبل إطار العمل في قاعدة التعليمات البرمجية لتحديد مجموعة إصدارات HAL التي تمت إزالتها بحيث يمكن كتابة اختبارات VTS لضمان عدم وجود HALs التي تمت إزالتها على الأجهزة الجديدة.

بالنسبة إلى HALs لإطار العمل ، تتم إزالة إصدار HAL إذا وفقط إذا تم استيفاء ما يلي:

  • تم إصداره مسبقًا.
  • إنه ليس في أي بيان إطاري لأحدث فرع تم إصداره.

تراث FCMs

يُعد إرث إصدار FCM المستهدف قيمة خاصة لجميع الأجهزة التي لا تحتوي على ثلاثة أضعاف. يسرد FCM القديم ، compatibility_matrix.legacy.xml matrix.legacy.xml ، متطلبات إطار العمل على الأجهزة القديمة (أي الأجهزة التي تم إطلاقها قبل Android 8.0).

إذا كان هذا الملف موجودًا لـ FCM بالإصدار F ، فيمكن ترقية أي جهاز غير ثلاثي إلى F بشرط أن يكون بيان الجهاز الخاص به متوافقًا مع هذا الملف. تتبع إزالته نفس الإجراء المتبع في FCM لإصدارات FCM الأخرى المستهدفة (تتم إزالتها بعد انخفاض عدد الأجهزة النشطة قبل 8.0 إلى ما دون حد معين).

تم إصدار إصدارات FCM

يمكن العثور على قائمة إصدارات FCM التي تم إصدارها ضمن hardware/interfaces/compatibility_matrices .

للعثور على إصدار FCM الذي تم إصداره مع إصدار Android معين ، راجع Level.h .