Android Health ، 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 غير المستخدمة والحقول ذات الصلة
  • دعم شحن قفص الاتهام.

متطلبات

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

يجب أن توفر الأجهزة التي يتم تشغيلها باستخدام Android 9 2.x HAL (ويجب ألا توفر 1.0 HAL) أو AIDL HAL. يجب على الأجهزة التي لا تعمل بنظام Android 9 ولكنها تخطط لتحديث صورة البائع إلى الإصدار 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 ولكنها تخطط لتحديث صورة البائع إلى الإصدار 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 ولكنها تخطط لتحديث صورة البائع إلى الإصدار 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 . يشير إلى إصدار HIDL HAL الصحي 1.0 الذي تم إصداره في Android 8.0.
  • health@2.0 : اختصار android.hardware.health@2.0 . يشير إلى إصدار HIDL HAL الصحي 2.0 الذي تم إصداره في Android 9.
  • health@2.1 : اختصار android.hardware.health@2.1 . يشير إلى إصدار HIDL HAL الصحي 2.1 الذي تم إصداره في 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 .

الصحة في أندرويد 9

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

الشكل 3 . الصحة في أندرويد 9

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

للأوضاع الأخرى:

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

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

الصحة في أندرويد 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)      ] |
+-------------------------------------+

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

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

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

الصحة في أندرويد 13

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

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

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

واجهة هيدل هال 2.0

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

توفر الواجهة الرئيسية 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، راجع تنفيذ الخدمة الصحية 2.0 .

واجهة هيدل هال 2.1

يدعم 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. مخطط الصحة HAL 2.1 UML

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

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

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

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

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

تطبيق

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

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

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

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

استعادة

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

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

شاحن

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

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

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