سلامت سیستم اندروید

اندروید 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، مؤلفه سلامت به شرح نمودار زیر کار می کند:

سلامت در اندروید 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 و بازیابی به چه لینکی هستند.

برای حالت های دیگر:

حالت شارژ و بازیابی خارج از حالت در Android 8.x

شکل 2. سلامت در اندروید 8.x، حالت شارژ و بازیابی حالت خاموش.

  • شارژر به صورت ایستا به libhealthd. BOARD , libhealthd_charger و libbatterymonitor .
  • بازیابی به طور ایستا به libhealthd. BOARD و libbatterymonitor .

سلامتی در اندروید 9

در اندروید 9، مؤلفه سلامتی مطابق نمودار زیر کار می کند: سلامتی در اندروید 9

شکل 3 . سلامتی در اندروید 9.

این چارچوب تلاش می‌کند تا سرویس health@2.0 را از hwservicemanager بازیابی کند. اگر خراب شود، به health@1.0 (در اندروید 8.x) فراخوانی می‌کند. مسیر کد قدیمی حفظ می‌شود، بنابراین تصویر سیستم Android 9 با تصویر فروشنده Android 8.x سازگار است. چارچوب اطلاعات هر دو HAL را بازیابی نمی کند زیرا فقط یک نسخه سرویس (1.0 یا 2.0) می تواند در دستگاه وجود داشته باشد.

برای حالت های دیگر:

شارژ و ریکاوری خارج از حالت در اندروید 9

شکل 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)      ] |
+-------------------------------------+

نمودار ساده شده زیر را برای حالت های مختلف ببینید:

زیرساخت بهداشت HAL 2.1

شکل 5. زیرساخت بهداشت HAL 2.1.

سلامت در اندروید 13

در اندروید 13 سلامت AIDL HAL معرفی شده است. مؤلفه سلامتی مطابق با جزئیات در نمودار زیر کار می کند:

زیرساخت بهداشت 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 سلامت ببینید:

نمودار سلامت 2.1 HAL UML

شکل 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 سلامت ببینید:

نمودار سلامت AIDL HAL UML

شکل 8. نمودار سلامت AIDL HAL UML.

برای اطلاعات در مورد اجرای خدمات AIDL بهداشتی، به اجرای Health AIDL HAL مراجعه کنید.

بازیابی

اندروید 13 از بایندر در بازیابی پشتیبانی می کند. نصب سرویس Health AIDL به بازیابی به آن اجازه می دهد تا در حالت ریکاوری اجرا شود.

برای اطلاع از نصب سرویس AIDL سلامت تا ریکاوری به موارد زیر مراجعه کنید:

شارژر

عملکرد شارژ خارج از حالت از /system به /vendor منتقل می شود. برای دستگاه‌هایی که با Android 13 راه‌اندازی می‌شوند، اگر از شارژ کردن حالت خاموش پشتیبانی می‌کنند، باینری سرویس HAL باید از حالت شارژر پشتیبانی کند. برای این کار به نصب شارژر مراجعه کنید.

ویژگی های سیستم شارژر

ویژگی های ro.charger.* دیگر توسط charger باینری در /vendor قابل خواندن نیستند. اگر دستگاه شما دارای یکی از ویژگی های سیستم ro.charger.* است، به ویژگی های سیستم برای شارژر مراجعه کنید.