Android Health

يتضمن 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 APIs الموجودة
  • فصل أفضل للثلاثية في كود الشحن في وضع إيقاف التشغيل
  • دعم أفضل للإطار للإشارة إلى صحة بطارية الجهاز

يتضمن Android 13 android.hardware.health AIDL HAL ، وهو تحويل من health@2.1 HAL. يتمتع HAL الجديد بالمزايا التالية:

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

متطلبات

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

يجب أن توفر الأجهزة التي يتم تشغيلها مع Android 9 2.x HAL (ويجب ألا توفر 1.0 HAL) أو AIDL HAL. يجب أن تزيل الأجهزة التي لا تعمل مع Android 9 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix Version 3 (التي تم إصدارها في Android 9) تطبيقات 1.0 HAL الحالية وتوفر 2.x HAL أو AIDL HAL.

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

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

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

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

الأجهزة التي تعمل بنظام Android 13 وما فوق

يجب أن توفر الأجهزة التي تعمل بنظام Android 13 AIDL HAL (ويجب ألا توفر HIDL HAL). يجب أن تزيل الأجهزة التي لا تعمل مع Android 13 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix الإصدار 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 من HIDL HAL الصحي الذي تم إصداره في Android 8.0.
  • health@2.0 : اختصار android.hardware.health@2.0 . يشير إلى الإصدار 2.0 من HIDL HAL الصحي الذي تم إصداره في Android 9.
  • health@2.1 : اختصار android.hardware.health@2.1 . يشير إلى الإصدار 2.1 HIDL HAL الصحي الذي تم إصداره في Android 11.
  • health AIDL HAL : اختصار لـ android.hardware.health .
    • تم إصدار الإصدار 1 في Android 13.
  • الشاحن : قابل للتنفيذ يعمل في وضع إيقاف الشحن يعرض الرسوم المتحركة لشحن الهاتف.
  • الاسترداد : الملف القابل للتنفيذ يعمل في وضع الاسترداد الذي يجب أن يسترد معلومات البطارية.
  • healthd : برنامج خفي قديم يعمل في Android يسترد المعلومات المتعلقة بالصحة ويوفرها إلى إطار العمل.
  • storaged : برنامج خفي يعمل في Android يسترد معلومات التخزين ويوفرها للإطار.

الصحة في Android 8.x

في Android 8.x ، يعمل المكون الصحي كما هو مفصل في الرسم التخطيطي التالي:

الصحة في Android 8.x

الشكل 1 . الصحة في Android 8.x

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

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

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

لأوضاع أخرى:

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

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

  • شاحن روابط ثابتة إلى libhealthd. BOARD و libhealthd_charger و libbatterymonitor .
  • الانتعاش روابط ثابتة إلى libhealthd. BOARD و libbatterymonitor .

الصحة في Android 9

في Android 9 ، يعمل المكون الصحي كما هو مفصل في الرسم التخطيطي التالي: الصحة في Android 9

الشكل 3 . الصحة في 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 ، وضع الشحن خارج الوضع والاسترداد

الصحة في Android 11

في Android 11 ، يعمل المكون الصحي كما هو مفصل في الرسم التخطيطي التالي:

[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

الصحة في Android 13

في Android 13 ، تم تقديم health AIDL HAL. يعمل المكون الصحي على النحو المفصل في الرسم البياني التالي:

البنية التحتية الصحية AIDL HAL

الشكل 6. البنية التحتية الصحية AIDL HAL

HIDL HAL واجهة 2.0

يوفر health@2.0 HAL الوظيفة نفسها لإطار العمل مثل البرنامج الخفي healthd القديم. كما أنه يوفر واجهات برمجة التطبيقات التي تشبه ما قدمته healthd سابقًا كخدمة ربط (أي IBatteryPropertiesRegistrar ).

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

  • IBatteryPropertiesRegistrar.registerListener ليحل محل registerCallback
  • 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 / لاسلكي ، تيار ، جهد كهربائي ، إلخ.)
  • معلومات البطارية (الوجود ، مستوى البطارية ، التيار ، الجهد ، الشحن ، التكنولوجيا ، إلخ.)
  • معلومات التخزين (معلومات جهاز التخزين ، إحصائيات القرص)

للحصول على معلومات حول تنفيذ Health service 2.0 ، راجع تنفيذ Health 2.0 .

HIDL HAL interface 2.1.2 تحديث

يدعم 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 ، بما في ذلك:

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

راجع مخطط UML التالي للفئات المفيدة لتطبيق HAL الصحي:

الصحة 2.1 مخطط HAL UML

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

للحصول على معلومات حول تنفيذ الخدمة الصحية 2.1 ، راجع تنفيذ الصحة 2.1 .

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

يتغير API

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

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

تطبيق

راجع مخطط UML التالي للفئات المفيدة لتطبيق HAL الصحي:

Health AIDL HAL مخطط UML

الشكل 8. مخطط الصحة AIDL HAL UML

للحصول على معلومات حول تنفيذ خدمة AIDL الصحية ، راجع تنفيذ Health AIDL HAL .

استعادة

يدعم Android 13 Binder في الاسترداد. يسمح تثبيت خدمة Health AIDL للاسترداد بتشغيلها في وضع الاسترداد.

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

شاحن

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

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

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