سلامت سیستم Android

‫Android 13 شامل android.hardware.health AIDL HAL، تبدیلی از health@2.1 HAL است. این HAL جدید مزایای زیر را دارد:

  • برداشتن میاناهای برنامه‌سازی کاربردی مربوط به شارژر استفاده‌نشده
  • برداشتن StorageAttribute استفاده‌نشده و فیلدهای مرتبط
  • از شارژ پایه پشتیبانی می‌کند.

‫Android 11 شامل android.hardware.health HAL 2.1 است، که ارتقای نسخه جزئی از health@2.0 HAL است. این HAL جدید مزایای زیر را دارد:

  • جداسازی تمیزتر بین چارچوب و کد فروشنده.
  • درجه آزادی بیشتر برای سفارشی‌سازی فروشنده در گزارش‌های اطلاعات بهداشتی.
  • اطلاعات بیشتر درباره سلامت دستگاه، نه فقط باتری.

اسناد مربوط به پیاده‌سازی Health 2.1 HAL در این صفحه به‌عنوان مرجع قرار دارد.

الزامات

این بخش حاوی الزامات Android 11،‏ 12، و 13 یا بالاتر است.

دستگاه‌های دارای Android 11 و Android 12

دستگاه‌هایی که با Android 11 و 12 راه‌اندازی می‌شوند باید HAL نسخه 2.1 یا AIDL HAL را ارائه دهند. دستگاه‌هایی که با Android نسخه ۱۱ یا ۱۲ عرضه نمی‌شوند اما قصد دارند تصویر فروشنده را به «نسخه ۵ ماتریس سازگاری چارچوب هدف» (عرضه‌شده در Android نسخه ۱۱) یا «نسخه ۶» (عرضه‌شده در Android نسخه ۱۲) به‌روز کنند باید پیاده‌سازی‌های HAL نسخه ۲.۰ موجود را بردارند و HAL نسخه ۲.۱ یا AIDL HAL را ارائه دهند. به دستگاه‌هایی که با Android 11 راه‌اندازی نمی‌شوند و قصد ندارند تصویر فروشنده را به‌روز کنند نیز توصیه می‌شود که HAL نسخه ۲.۱ یا AIDL را ارائه دهند.

AOSP شامل چندین کتابخانه کمکی است که برای کمک به شما در پیاده‌سازی 2.1 HAL و انتقال از HALهای قدیمی HIDL طراحی شده‌اند.

دستگاه‌های دارای Android 13 و بالاتر

دستگاه‌هایی که با Android 13 عرضه می‌شوند باید AIDL HAL را ارائه دهند (و نباید HIDL HAL را ارائه دهند). دستگاه‌هایی که با Android 13 راه‌اندازی نمی‌شوند اما قصد دارند تصویر فروشنده را به «نسخه ۷ ماتریس سازگاری چارچوب هدف» (منتشرشده در Android 13) به‌روزرسانی کنند باید پیاده‌سازی‌های HIDL HAL موجود را بردارند و AIDL HAL را ارائه دهند. به دستگاه‌هایی که با Android 13 راه‌اندازی نمی‌شوند و قصد ندارند تصویر فروشنده را به‌روز کنند نیز توصیه می‌شود که AIDL HAL را ارائه دهند.

‫AOSP شامل چندین کتابخانه کمکی است که برای کمک به شما در پیاده‌سازی AIDL HAL و انتقال از HIDL HAL قدیمی طراحی شده‌اند.

اصطلاحات

در زیر اصطلاحاتی را می‌بینید که باید قبل‌از خواندن بقیه اسناد سلامت سیستم Android بدانید:

health@2.1
حروف اختصاری android.hardware.health@2.1. نسخه ۱ از health HIDL در Android 11 منتشر شد.
health AIDL HAL
حروف اختصاری android.hardware.health. نسخه ۱ از health AIDL HAL در Android 13 منتشر شد.
شارژر
برنامه اجرایی درحال اجرا در حالت شارژ خاموش که پویانمایی شارژ تلفن را نمایش می‌دهد.
بازیابی
«اجرایی» در حالت بازیابی اجرا می‌شود که باید اطلاعات باتری را بازیابی کند.
ذخیره‌شده
Daemon که اطلاعات فضای ذخیره‌سازی را بازیابی می‌کند و آن را دراختیار چارچوب قرار می‌دهد.

«سلامت» در Android 11 و 12

در Android 11 و 12، مؤلفه سلامت طبق جزئیات نمودار زیر کار می‌کند:

[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)      ] |
+-------------------------------------+

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

[       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 HIDL HAL 2.1

شکل ۱. زیرساخت Health HIDL HAL 2.1.

سلامت در Android 13

در Android 13،‏ AIDL HAL سلامت معرفی شده است. شکل ۲ جزئیات نحوه عملکرد مؤلفه سلامت را نشان می‌دهد:

زیرساخت Health AIDL HAL

شکل ۲. زیرساخت Health AIDL HAL.

میانای HIDL HAL نسخه ۲.۱

‫HAL health@2.1 از شارژ در حالت خاموش پشتیبانی می‌کند و اطلاعات بیشتری درباره باتری ارائه می‌دهد.

میانای اصلی، 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 دردسترس است، ازجمله:

  • سطح ظرفیت باتری
  • زمان شارژ باتری تا شارژ کامل (به ثانیه)
  • ظرفیت طراحی شارژ کامل باتری (برحسب میکروآمپرساعت)

شکل ۳ نمودار UML از کلاس‌های مفید برای پیاده‌سازی HAL سلامت را نشان می‌دهد:

نمودار UML «لایه انتزاع سخت‌افزار» Health 2.1

شکل ۳. نمودار UML مربوط به Health HAL 2.1.

برای کسب اطلاعات درباره پیاده‌سازی «خدمات سلامتی ۲.۱»، به پیاده‌سازی «سلامتی ۲.۱» مراجعه کنید.

نسخه ۱ میانای AIDL HAL

این بخش حاوی اطلاعاتی درباره میانای AIDL HAL نسخه ۱ است.

تغییرات میانای برنامه‌سازی کاربردی

نسخه ۱ از AIDL HAL از میاناهای برنامه‌سازی کاربردی مشابه با HIDL 2.1 HAL پشتیبانی می‌کند. درمقایسه با میانای HIDL 2.1، موارد زیر در API تغییر کرده است:

  • میاناهای برنامه‌سازی کاربردی مربوط به شارژر که در HIDL HAL 2.1 معرفی شده‌اند به AIDL HAL منتقل نشده‌اند. ازآنجایی‌که عملکرد شارژ در حالت خاموش فقط در پارتیشن /vendor وجود دارد، استفاده از «میاناهای برنامه‌سازی کاربردی» در «میانای فروشنده» ضروری نیست. برای پیاده‌سازی صحیح شارژ در حالت خاموش، شارژر را ببینید.
  • نوع StorageAttribute و فیلدهای مربوطه برداشته شد زیرا استفاده نشده است.
  • ‫chargerDockOnline به HealthInfo اضافه شده است تا از شارژ با پایه پشتیبانی کند.

پیاده‌سازی

شکل ۴ نمودار UML کلاس‌های مفید برای پیاده‌سازی AIDL HAL سلامت را نشان می‌دهد:

نمودار UML مربوط به Health AIDL HAL

شکل ۴. نمودار UML مربوط به Health AIDL HAL.

برای کسب اطلاعات درباره پیاده‌سازی سرویس AIDL سلامت، به پیاده‌سازی Health AIDL HAL مراجعه کنید.

بازیابی

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

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

شارژر

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

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

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