حالة نظام Android

يتضمّن Android 9 android.hardware.health HAL 2.0، ترقية إصدار رئيسية من Health@1.0 HAL. يتضمّن HAL الجديد ما يلي: الإيجابيات:

  • فصل أكثر وضوح بين إطار العمل ورمز البائع
  • لإيقاف البرنامج الخفي لـ healthd غير الضروري.
  • درجات أكبر من الحرية لتخصيص البائع في المعلومات الصحية التقارير.
  • معلومات عن سلامة الجهاز أكثر من مجرد البطارية

يشمل نظام Android 11 android.hardware.health HAL 2.1، ترقية ثانوية للإصدار من Health@2.0 HAL. يتضمّن HAL الجديد ما يلي: الإيجابيات:

  • سهولة التنفيذ
  • توافق أفضل مع واجهات 2.0 HAL API الحالية
  • فصل الصوت العالي الطبقة بشكل أفضل في رمز الشحن خارج الوضع
  • دعم أفضل لإطار العمل للإشارة إلى حالة بطارية جهاز

يتضمّن Android 13 android.hardware.health AIDL HAL إحالة ناجحة من Health@2.1 HAL. يتضمّن HAL الجديد ما يلي: الإيجابيات:

  • إزالة واجهات برمجة التطبيقات المتعلّقة بالشاحن غير المستخدَمة
  • إزالة StorageAttribute غير المستخدمة والحقول ذات الصلة
  • دعم الشحن في قاعدة الإرساء

المتطلبات

الأجهزة التي تعمل بنظامَي التشغيل Android 9 وAndroid 10

يجب أن توفّر الأجهزة التي تعمل بنظام التشغيل Android 9 الإصدار 2.x HAL (ويجب عدم تقديم HAL 1.0) أو AIDL HAL. لا يتم تشغيل الأجهزة التي تستخدم الإصدار 9 من نظام Android ولكنّها تخطط لتعديل صورة البائع إلى الإصدار 3 من مصفوفة التوافق مع إطار العمل المستهدف (Android 9) إزالة عمليات تنفيذ 1.0 HAL الحالية توفير 2.x HAL أو AIDL HAL.

يضم AOSP العديد من مكتبات المساعدة المصممة لمساعدتك في تنفيذ الإصدار 2.0. HAL والانتقال من طبقة HAL 1.0 القديمة.

الأجهزة التي تعمل بنظامَي التشغيل Android 11 وAndroid 12

إنّ الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android يجب أن توفّر الإصدار 2.1. HAL (ويجب عدم توفير 1.0 أو 2.0 HAL) أو AIDL HAL. الأجهزة غير التي تعمل على نظام التشغيل Android 11 ولكن نخطط لتحديث صورة المورّد إلى الإصدار 5 من مصفوفة التوافق مع إطار العمل المستهدف (تم إصدارها في Android 11) يجب إزالة 2.0 HAL الحالي جديدة وتوفير HAL 2.1 أو AIDL HAL. لا يتم تشغيل الأجهزة التي تعمل بنظام Android 11 ولا تخطط لإجراء تحديث نقترح أيضًا توفير 2.1 HAL.

يشمل AOSP العديد من مكتبات المساعدة المصمّمة لمساعدتك في تنفيذ الإصدار 2.1. HAL والانتقال من طبقة HAL 1.0 القديمة.

الأجهزة التي تعمل بنظام التشغيل Android 13 والإصدارات الأحدث

يجب أن توفّر الأجهزة التي تعمل بنظام التشغيل Android 13 رمز AIDL HAL (ويجب عدم توفير HIDL HAL). الأجهزة التي لا تعمل بالإصدار 13 من نظام التشغيل Android ولكنّها تخطط لتعديل صورة المورّد إلى Target يجب أن يزيل الإصدار 7 من مصفوفة التوافق مع إطار العمل (الذي تم طرحه في Android 13) عمليات تنفيذ HIDL HAL الحالية. توفير ترخيص AIDL HAL. الأجهزة التي لا تعمل بنظام التشغيل Android 13 ولا تخطِّط لتعديل صورة المورّد يُنصح بتوفير شهادة AIDL HAL.

يجب ألا توفّر الأجهزة شهادة HIDL 1.0 HAL.

يتضمّن AOSP العديد من مكتبات المساعدة المصمّمة لمساعدتك في تنفيذ AIDL. HAL والانتقال من بروتوكول HIDL HALs القديمة.

المصطلحات

  • health@1.0: اختصار android.hardware.health@1.0 يشير إلى تم طرح الإصدار 1.0 من Health HIDL HAL في Android 8.0.
  • health@2.0: اختصار android.hardware.health@2.0 يشير إلى تم طرح الإصدار 2.0 من Health HIDL HAL في Android 9.
  • health@2.1: اختصار android.hardware.health@2.1 يشير إلى تم إطلاق الإصدار 2.1 من Health HIDL HAL في Android 11.
  • صحة AIDL HAL: اختصار android.hardware.health.
    • تم طرح الإصدار 1 في الإصدار 13 من نظام التشغيل Android.
  • الشاحن: قابل للتنفيذ يتم تشغيله في وضع الشحن خارج الوضع الذي يعرض الصورة المتحركة لشحن الهاتف.
  • recovery: قابل للتنفيذ يتم تشغيله في وضع الاسترداد الذي يجب أن يسترد البطارية المعلومات.
  • healthd: برنامج خفي قديم يعمل في Android لاسترداد المعلومات ذات الصلة بالصحة المعلومات ويوفر لها إطار العمل.
  • storaged: برنامج خفي يعمل في نظام Android ويسترد معلومات مساحة التخزين ويوفرها لإطار العمل.

تطبيق Health في Android 8.x

في الإصدار Android 8.x، يعمل مكوِّن الصحة على النحو الموضَّح في المخطّط البياني التالي:

تطبيق Health في Android 8.x

الشكل 1. تطبيق Health في Android 8.x.

في هذا الرسم البياني:

  • ويستخدم إطار العمل استدعاء ملف بيندر واحد (1) واستدعاء hwbinder واحد (1) من أجل التواصل مع الأجهزة.
  • healthd ترتبط بشكل ثابت بـ libhealthd_android وlibbatterymonitor و libbatteryservice
  • Health@1.0-impl رابطًا ثابتًا إلى libhealthd.BOARD

يمكن لكل لوحة تخصيص libhealthd.BOARD مختلف. فإنه يتم تحديد كل من الشاحن وhealth@1.0-impl ورابط الاسترداد في وقت الإصدار إليه.

بالنسبة إلى الأوضاع الأخرى:

وضع الشحن والاسترداد خارج الوضع في نظام Android 8.x

الشكل 2. الصحة في الإصدار 8.x من نظام التشغيل Android، والشحن في وضع عدم الاتصال واستعادة البيانات

  • الشاحن يرتبط بشكل ثابت بـ libhealthd.BOARD، libhealthd_charger وlibbatterymonitor
  • الاسترداد يرتبط بشكل ثابت بـ libhealthd.BOARD libbatterymonitor

تطبيق Health في Android 9

في Android 9، يعمل مكوِّن الصحة على النحو المفصّل. في الرسم التخطيطي التالي: تطبيق Health في Android 9

الشكل 3. تطبيق Health في Android 9.

يحاول إطار العمل استرداد خدمة Health@2.0 من hwservicemanager. وفي حال عدم اكتمالها، يتم إرسال طلب إلى Health@1.0 (في الإصدار Android 8.x). مسار التعليمة البرمجية القديم هو حتى تتوافق صورة نظام Android 9 مع صورة بائع Android 8.x. لا يسترجع إطار العمل المعلومات من كلاهما من طبقات HALs لأنه لا يمكن أن يوجد سوى إصدار خدمة واحد (1.0 أو 2.0) على الجهاز.

بالنسبة إلى الأوضاع الأخرى:

شحن البطارية واستردادها خارج الوضع في نظام Android 9

الشكل 4. الصحة في نظام Android 9، والشحن في وضع عدم النشاط ووضع الاسترداد

تطبيق Health في Android 11

في Android 11، يعمل مكوِّن تطبيق Health على النحو المفصَّل. في الرسم التخطيطي التالي:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

في حال عدم توفّر تطبيق Health 2.1، يعود النظام إلى مسار الرمز القديم كما هو موضّح في الأقسام السابقة

بالنسبة إلى الأوضاع الأخرى:

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

يمكنك الاطّلاع على المخطّط المبسّط التالي لمعرفة الأوضاع المختلفة:

البنية الأساسية لتطبيق Health HAL 2.1

الشكل 5. البنية الأساسية HAL 2.1 للصحة.

تطبيق Health في Android 13

في Android 13، تم تقديم واجهة AIDL HAL الخاصة بالصحة. تشير رسالة الأشكال البيانية كما هو مفصل في الرسم التخطيطي التالي:

البنية الأساسية لنظام AIDL HAL

الشكل 6. بنية AIDL HAL الأساسية للصحة:

الإصدار 2.0 من واجهة HIDL HAL

يوفر Health@2.0 HAL نفس الوظائف لإطار العمل القديم برنامج خفي سليم. وهي توفر أيضًا واجهات برمجة تطبيقات مشابهة لتلك التي تم تصحيحها المقدمة سابقًا كخدمة تخزين (أي IالبطاريةPropertiesRegistrar).

الواجهة الرئيسية، IHealth الوظائف التالية:

  • registerCallback، لاستبدال IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback، لاستبدال IBatteryPropertiesRegistrar.unregisterListener
  • update، لاستبدال IBatteryPropertiesRegistrar.scheduleUpdate
  • يتم استبدال IBatteryPropertiesRegistrar.getProperties بما يلي:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

بالإضافة إلى ذلك، يوفّر IHealth واجهات برمجة التطبيقات الجديدة التالية للموقع الإلكتروني storaged استرداد المعلومات المتعلقة بمساحة التخزين الخاصة بالمورّد:

  • getStorageInfo
  • getDiskStats

يتم عرض بنية جديدة، @2.0::HealthInfo، من خلال عمليات معاودة الاتصال وgetHealthInfo. تحتوي هذه البنية على جميع معلومات سلامة الجهاز المتاحة من خلال Health@2.0. طبقة تجريد الأجهزة (HAL)، بما في ذلك:

  • معلومات الشحن (التيار المتردد/USB/لاسلكية، والتيار، والجهد الكهربائي، وما إلى ذلك)
  • معلومات البطارية (التواجد في المنزل أو مستوى البطارية أو التيار أو الجهد الكهربائي أو الشحن التكنولوجيا وما إلى ذلك)
  • معلومات مساحة التخزين (معلومات جهاز التخزين وإحصاءات القرص)

للحصول على معلومات عن تطبيق الإصدار 2.0 من "خدمات الصحة"، يُرجى الاطّلاع على تطبيق Health 2.0:

الإصدار 2.1 من واجهة HIDL HAL

تتوافق تقنية Health@2.1 HAL مع الشحن في وضع عدم الاتصال وتوفر المزيد من المعلومات. حول البطارية.

الواجهة الرئيسية، IHealth، يوفر الدوال الإضافية التالية

  • getHealthConfig: لاسترداد إعدادات HAL هذا
  • getHealthInfo_2_1: ترقية إصدار بسيط إلى getHealthInfo
  • shouldKeepScreenOn: لتحديد ما إذا كان يجب الاحتفاظ بالشاشة في وضع الشاحن

بالإضافة إلى ذلك، يجب تنفيذ @2.1::IHealth لدعم @2.1::IHealthInfoCallback لـ registerCallback unregisterCallback. واجهة معاودة الاتصال الجديدة تُعيد الحالة الصحية إلى العميل باستخدام الدالة healthInfoChanged_2_1 بدلاً من الدالة healthInfoChanged المكتسَبة.

يتم إرجاع بنية جديدة، @2.1::HealthInfo، عبر عمليات الاستدعاء getHealthInfo_2_1 تحتوي هذه البنية على معلومات إضافية عن سلامة الجهاز. المتاحة من خلال Health@2.0 HAL، بما في ذلك:

  • مستوى سعة البطارية
  • وقت شحن البطارية حتى اكتمال شحنها الآن (بالثواني)
  • سعة تصميم البطارية للشحن الكامل (بالميكرو أمبير في الساعة)

اطلع على مخطط UML التالي للفئات المفيدة لتنفيذ HAL الصحي:

مخطط Health 2.1 HAL UML

الشكل 7. مخطّط Health HAL 2.1 UML.

للحصول على معلومات عن تطبيق الإصدار 2.1 من "خدمات الصحة"، يُرجى الاطّلاع على تطبيق Health 2.1:

الإصدار 1 من واجهة AIDL HAL

التغييرات في واجهة برمجة التطبيقات

يتوافق الإصدار 1 من HAL مع AIDL مع واجهات برمجة تطبيقات مشابهة لـ HIDL 2.1 HAL. مقارنةً بـ واجهة HIDL 2.1، فسيتم تغيير ما يلي في واجهة برمجة التطبيقات:

  • إنّ واجهات برمجة التطبيقات المتعلقة بالشاحن والتي تم توفيرها في HIDL HAL 2.1 لم يتم نقلها إلى AIDL. HAL. نظرًا لأن وظيفة الشحن في وضع عدم الاتصال تتوفر فقط على قسم /vendor، لست بحاجة إلى استخدام واجهات برمجة التطبيقات في واجهة Vendor. إلى تنفيذ الشحن في وضع "خارج الوضع" بطريقة صحيحة، يُرجى الاطّلاع على الشاحن أدناه.
  • تمت إزالة النوع StorageAttribute والحقول ذات الصلة لأنها غير مستخدم.
  • تمت إضافة chargerDockOnline إلى HealthInfo لإتاحة الشحن على قاعدة الإرساء.

التنفيذ

اطلع على مخطط UML التالي للفئات المفيدة لتنفيذ HAL الصحي:

رسم بياني لـ AIDL HAL UML

الشكل 8. مخطّط AIDL HAL UML المتعلّق بالصحة

للحصول على معلومات عن تطبيق خدمة AIDL الصحية، يُرجى الاطّلاع على تطبيق Health AIDL HAL:

استعادة الكرة

يتوافق Android 13 مع أداة الربط في عملية الاسترداد. جارٍ تثبيت تتيح خدمة Health AIDL للاستعادة إمكانية تشغيلها في "وضع الاسترداد".

للحصول على معلومات عن تثبيت خدمة AIDL الصحية لاسترداد البيانات، يُرجى الاطّلاع على التالي:

شاحن

تم نقل وظيفة الشحن خارج الوضع من /system إلى /vendor. بالنسبة الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android في حال كانت متوافقة الشحن خارج الوضع، يجب أن يتيح البرنامج الثنائي لخدمة HAL وضع الشاحن. لإجراء ذلك، مراجعة استخدام الشاحن.

خصائص نظام الشاحن

لم يعُد من الممكن قراءة السمات ro.charger.* بواسطة النظام الثنائي charger في /vendor إذا كان جهازك يحتوي على أيّ من خصائص النظام البالغ عددها ro.charger.*، مراجعة خصائص النظام للشاحن.