اندروید 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 جدید دارای مزایای زیر است:
- پیاده سازی آسان تر
- انطباق بهتر با API های 2.0 HAL موجود
- جداسازی تربل بهتر در کد شارژ خارج از حالت
- پشتیبانی بهتر از چارچوب برای نشان دادن سلامت باتری دستگاه
Android 13 شامل android.hardware.health
AIDL HAL است، تبدیلی از health@2.1 HAL. این HAL جدید دارای مزایای زیر است:
- APIهای استفاده نشده مرتبط با شارژر را حذف کنید
-
StorageAttribute
و فیلدهای مرتبط استفاده نشده را حذف کنید - پشتیبانی از شارژ داک
الزامات
دستگاه های دارای اندروید 9 و اندروید 10
دستگاههایی که با Android 9 راهاندازی میشوند باید HAL 2.x (و نباید 1.0 HAL) یا AIDL HAL را ارائه کنند. دستگاه هایی که با Android 9 راه اندازی نمی شوند اما قصد دارند تصویر فروشنده را به Target Framework Compatibility Matrix نسخه 3 (منتشر شده در Android 9) به روز کنند، باید اجرای 1.0 HAL موجود را حذف کنند و HAL 2.x یا AIDL HAL را ارائه دهند.
AOSP شامل چندین کتابخانه کمکی است که برای کمک به پیاده سازی HAL 2.0 و انتقال از HAL 1.0 قدیمی طراحی شده اند.
دستگاه های دارای اندروید 11 و اندروید 12
دستگاههایی که با Android 11 راهاندازی میشوند باید HAL 2.1 (و نباید 1.0 یا 2.0 HAL) یا AIDL HAL ارائه کنند. دستگاه هایی که با Android 11 راه اندازی نمی شوند اما قصد دارند تصویر فروشنده را به Target Framework Compatibility Matrix نسخه 5 (منتشر شده در Android 11) به روز کنند، باید اجرای 2.0 HAL موجود را حذف کنند و HAL 2.1 یا AIDL HAL را ارائه دهند. دستگاههایی که با Android 11 راهاندازی نمیشوند و برنامهای برای بهروزرسانی تصویر فروشنده ندارند نیز توصیه میشود HAL 2.1 را ارائه کنند.
AOSP شامل چندین کتابخانه کمکی است که برای کمک به پیاده سازی 2.1 HAL و انتقال از 1.0 HAL قدیمی طراحی شده اند.
دستگاههای دارای اندروید ۱۳ و بالاتر
دستگاههایی که با 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 HAL های قدیمی طراحی شده اند.
اصطلاحات
- health@1.0 : مخفف
android.hardware.health@1.0
. به سلامت HIDL HAL نسخه 1.0 منتشر شده در اندروید 8.0 اشاره دارد. - health@2.0 : مخفف
android.hardware.health@2.0
. اشاره به سلامت HIDL HAL نسخه 2.0 منتشر شده در اندروید 9 است. - health@2.1 : مخفف
android.hardware.health@2.1
. اشاره به سلامت HIDL HAL نسخه 2.1 منتشر شده در اندروید 11 است. - Health AIDL HAL : مخفف
android.hardware.health
.- نسخه 1 در اندروید 13 منتشر شده است.
- شارژر : قابل اجرا در حالت شارژ خارج از حالت که انیمیشن شارژ تلفن را نمایش می دهد.
- بازیابی : قابل اجرا در حالت بازیابی که باید اطلاعات باتری را بازیابی کند.
- Healthd : دیمون قدیمی که در اندروید اجرا میشود و اطلاعات مربوط به سلامت را بازیابی میکند و در چارچوب ارائه میکند.
- storaged : دیمون در حال اجرا در اندروید که اطلاعات ذخیره سازی را بازیابی کرده و در فریم ورک ارائه می کند.
سلامت در اندروید 8.x
در Android 8.x، مؤلفه سلامت به شرح نمودار زیر کار می کند:
شکل 1 . سلامت در اندروید 8.x.
در این نمودار:
- یک (1) تماس بایندر و یک (1) تماس hwbinder توسط فریمورک برای برقراری ارتباط با سخت افزار استفاده می شود.
-
healthd
به صورت استاتیک بهlibhealthd_android
،libbatterymonitor
وlibbatteryservice
پیوند میدهد. - Health@1.0-impl به صورت ایستا به
libhealthd. BOARD
.
هر تخته می تواند یک libhealthd. BOARD
; در زمان ساخت مشخص می شود که شارژر، health@1.0-impl و بازیابی به چه لینکی هستند.
برای حالت های دیگر:
شکل 2. سلامت در اندروید 8.x، حالت شارژ و بازیابی حالت خاموش.
- شارژر به صورت ایستا به
libhealthd. BOARD
,libhealthd_charger
وlibbatterymonitor
. - بازیابی به طور ایستا به
libhealthd. BOARD
وlibbatterymonitor
.
سلامت در اندروید 9
در اندروید 9، مؤلفه سلامتی مطابق نمودار زیر کار می کند:
شکل 3 . سلامت در اندروید 9.
این چارچوب تلاش میکند تا سرویس health@2.0 را از hwservicemanager
بازیابی کند. اگر خراب شود، به health@1.0 (در اندروید 8.x) فراخوانی میکند. مسیر کد قدیمی حفظ میشود، بنابراین تصویر سیستم Android 9 با تصویر فروشنده Android 8.x سازگار است. چارچوب اطلاعات هر دو HAL را بازیابی نمی کند زیرا فقط یک نسخه سرویس (1.0 یا 2.0) می تواند در دستگاه وجود داشته باشد.
برای حالت های دیگر:
شکل 4. سلامت در اندروید 9، حالت شارژ و بازیابی حالت خاموش.
سلامت در اندروید 11
در اندروید 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) ] |
+-------------------------------------+
نمودار ساده شده زیر را برای حالت های مختلف ببینید:
شکل 5. زیرساخت بهداشت HAL 2.1.
سلامت در اندروید 13
در اندروید 13 سلامت AIDL HAL معرفی شده است. مؤلفه سلامتی مطابق با جزئیات در نمودار زیر کار می کند:
شکل 6. زیرساخت بهداشت AIDL HAL.
رابط HIDL HAL 2.0
Health@2.0 HAL همان عملکردی را به فریمورک ارائه میکند که دیمون سالم قدیمی. همچنین APIهایی را ارائه می دهد که شبیه به آنچه که قبلاً به عنوان یک سرویس بایندر ارائه می شد (به عنوان مثال IBatteryPropertiesRegistrar ) هستند.
رابط اصلی، IHealth ، عملکردهای زیر را ارائه می دهد:
-
registerCallback
، برای جایگزینیIBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
، برای جایگزینیIBatteryPropertiesRegistrar.unregisterListener
-
update
، برای جایگزینیIBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
با موارد زیر جایگزین می شود:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
علاوه بر این، IHealth
API های جدید زیر را برای storaged
برای بازیابی اطلاعات مربوط به ذخیره سازی خاص فروشنده ارائه می دهد:
-
getStorageInfo
-
getDiskStats
یک ساختار جدید، @2.0::HealthInfo
، از طریق callbacks و getHealthInfo
برگردانده میشود. این ساختار شامل تمام اطلاعات سلامت دستگاه در دسترس از طریق health@2.0 HAL است، از جمله:
- اطلاعات شارژ (AC/USB/بی سیم، جریان، ولتاژ و غیره)
- اطلاعات باتری (حضور، سطح باتری، جریان، ولتاژ، شارژ، تکنولوژی و غیره)
- اطلاعات ذخیره سازی (اطلاعات دستگاه ذخیره سازی، آمار دیسک)
برای اطلاعات در مورد اجرای Health Service 2.0، به اجرای Health 2.0 مراجعه کنید.
رابط HIDL 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
، از طریق callbacks و getHealthInfo_2_1
برگردانده میشود. این ساختار حاوی اطلاعات اضافی سلامت دستگاه است که از طریق health@2.0 HAL در دسترس است، از جمله:
- سطح ظرفیت باتری
- زمان پر شدن باتری اکنون (در ثانیه)
- ظرفیت طراحی شارژ کامل باتری (به μAh)
نمودار UML زیر را برای کلاس های مفید برای اجرای HAL سلامت ببینید:
شکل 7. نمودار UML سلامت HAL 2.1.
برای کسب اطلاعات در مورد اجرای خدمات سلامت 2.1، به اجرای سلامت 2.1 مراجعه کنید.
رابط AIDL HAL نسخه 1
API تغییر می کند
AIDL نسخه 1 HAL از APIهای مشابه HIDL 2.1 HAL پشتیبانی می کند. در مقایسه با رابط HIDL 2.1، موارد زیر در API تغییر کرده است:
- API های مربوط به شارژر معرفی شده در HIDL HAL 2.1 به AIDL HAL منتقل نمی شوند. از آنجایی که عملکرد شارژ خارج از حالت فقط در پارتیشن
/vendor
موجود است، API در رابط فروشنده ضروری نیست. برای اجرای صحیح شارژ کردن حالت خاموش، شارژر زیر را ببینید. - نوع
StorageAttribute
و فیلدهای مربوطه به دلیل استفاده نشده حذف می شوند. -
chargerDockOnline
برای پشتیبانی از شارژ داک بهHealthInfo
اضافه شده است.
پیاده سازی
نمودار UML زیر را برای کلاس های مفید برای اجرای HAL سلامت ببینید:
شکل 8. نمودار سلامت AIDL HAL UML.
برای اطلاعات در مورد اجرای خدمات AIDL بهداشتی، به اجرای Health AIDL HAL مراجعه کنید.
بازیابی
اندروید 13 از بایندر در بازیابی پشتیبانی می کند. نصب سرویس Health AIDL به بازیابی به آن اجازه می دهد تا در حالت ریکاوری اجرا شود.
برای اطلاع از نصب سرویس AIDL سلامت تا ریکاوری به موارد زیر مراجعه کنید:
شارژر
عملکرد شارژ خارج از حالت از /system
به /vendor
منتقل می شود. برای دستگاههایی که با Android 13 راهاندازی میشوند، اگر از شارژ کردن حالت خاموش پشتیبانی میکنند، باینری سرویس HAL باید از حالت شارژر پشتیبانی کند. برای این کار به نصب شارژر مراجعه کنید.
ویژگی های سیستم شارژر
ویژگی های ro.charger.*
دیگر توسط charger
باینری در /vendor
قابل خواندن نیستند. اگر دستگاه شما دارای یکی از ویژگی های سیستم ro.charger.*
است، به ویژگی های سیستم برای شارژر مراجعه کنید.