يشتمل 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 9 الإصدار 2.0 HAL (ويجب ألا توفر 1.0 HAL). يجب أن تزيل الأجهزة التي لا تعمل بنظام Android 9 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix Version 3 (تم إصدارها في Android 9) تطبيقات 1.0 HAL الحالية وتوفر 2.0 HAL.
يجب أن توفر الأجهزة التي يتم تشغيلها مع Android 11 الإصدار 2.1 HAL (ويجب ألا توفر 1.0 أو 2.0 HAL). يجب أن تزيل الأجهزة التي لا تعمل مع Android 11 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix الإصدار 5 (تم إصدارها في Android 11) تطبيقات 2.0 HAL الحالية وتوفر 2.1 HAL. يوصى أيضًا بالأجهزة التي لا تعمل بنظام Android 11 ولا تخطط لتحديث صورة البائع لتوفير 2.1 HAL.
يتضمن AOSP مكتبات مساعدة متعددة مصممة لمساعدتك في تنفيذ 2.1 HAL والانتقال من 1.0 HAL القديم.
المصطلح
- 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. - الشاحن : قابل للتنفيذ يعمل في وضع إيقاف الشحن يعرض الرسوم المتحركة لشحن الهاتف.
- الاسترداد : الملف القابل للتنفيذ يعمل في وضع الاسترداد الذي يجب أن يسترد معلومات البطارية.
- healthd : برنامج خفي قديم يعمل في Android يسترد المعلومات المتعلقة بالصحة ويوفرها إلى إطار العمل.
- storaged : برنامج خفي يعمل في Android يسترد معلومات التخزين ويوفرها للإطار.
الصحة في Android 8.x
في Android 8.x ، يعمل المكون الصحي كما هو مفصل في الرسم التخطيطي التالي:
الشكل 1 . الصحة في Android 8.x
في هذا الرسم البياني:
- يتم استخدام مكالمة واحدة (1) Binder ومكالمة hwbinder واحدة (1) بواسطة إطار العمل للتواصل مع الأجهزة.
-
healthd
يربط بشكل ثابت إلىlibhealthd_android
،libbatterymonitor
، وlibbatteryservice
. - health@1.0-impl بشكل ثابت روابط لـ
libhealthd. BOARD
.
يمكن لكل لوحة تخصيص libhealthd. BOARD
مختلفة libhealthd. BOARD
يتم تحديده في وقت الإنشاء ما هو رابط الشاحن و health@1.0-impl ورابط الاسترداد.
لأوضاع أخرى:
الشكل 2. الصحة في Android 8.x ووضع الشحن خارج الوضع والاسترداد
- شاحن روابط
libhealthd. BOARD
إلىlibhealthd. BOARD
وlibhealthd_charger
وlibbatterymonitor
. - الانتعاش روابط
libhealthd. BOARD
إلىlibhealthd. BOARD
وlibbatterymonitor
.
الصحة في Android 9
في Android 9 ، يعمل المكون الصحي كما هو مفصل في الرسم البياني التالي:
الشكل 3 . الصحة في Android 9
يحاول إطار العمل استرداد خدمة hwservicemanager
من hwservicemanager
. إذا فشل ، يتم الاتصال بـ health@1.0 (في Android 8.x). يتم الاحتفاظ بمسار الرمز القديم حتى تتوافق صورة نظام Android 9 مع صورة بائع Android 8.x. لا يسترد إطار العمل المعلومات من كلتا HALs لأنه يمكن وجود إصدار خدمة واحد فقط (1.0 أو 2.0) على الجهاز.
لأوضاع أخرى:
الشكل 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) ] |
+-------------------------------------+
واجهة HAL 2.0
يوفر health@2.0 HAL الوظيفة نفسها لإطار العمل مثل البرنامج الخفي healthd القديم. كما أنه يوفر واجهات برمجة التطبيقات التي تشبه ما قدمته healthd سابقًا كخدمة ربط (أي 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 / لاسلكي ، تيار ، جهد كهربائي ، إلخ.)
- معلومات البطارية (الوجود ، مستوى البطارية ، التيار ، الجهد ، الشحن ، التكنولوجيا ، إلخ.)
- معلومات التخزين (معلومات جهاز التخزين ، إحصائيات القرص)
واجهة HAL 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)
للحصول على معلومات حول تنفيذ الخدمة الصحية ، راجع تنفيذ الصحة .