בריאות המערכת של Android

‫Android 13 כוללת android.hardware.health AIDL HAL, המרה מ-health@2.1 HAL. ל-HAL החדש יש את היתרונות הבאים:

  • הסרה של ממשקי API שקשורים למטען ולא נמצאים בשימוש
  • הסרת 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 ו-Android 12 חייבים לספק את HAL 2.1 או את AIDL HAL. מכשירים שלא הושקו עם Android 11 או 12, אבל מתוכננים לעדכן את תמונת הספק לגרסה 5 (שפורסמה ב-Android 11) או 6 (שפורסמה ב-Android 12) של מטריצת התאימות של מסגרת היעד, צריכים להסיר את ההטמעות הקיימות של HAL 2.0 ולספק את HAL 2.1 או את AIDL HAL. במכשירים שלא מופעלת בהם מערכת Android 11 ואין תוכניות לעדכן את תמונת הספק, מומלץ גם לספק את גרסה 2.1 או את AIDL HAL.

‫AOSP כולל כמה ספריות עזר שנועדו לעזור לכם להטמיע את HAL 2.1 ולעבור מ-HAL HIDL הישנים.

מכשירים עם Android מגרסה 13 ואילך

מכשירים שהושקו עם Android 13 חייבים לספק את AIDL HAL (ואסור להם לספק HIDL HAL). במכשירים שלא מופעלת בהם Android 13, אבל מתוכנן עדכון של תמונת הספק לגרסה 7 של Target Framework Compatibility Matrix (שפורסמה ב-Android 13), צריך להסיר הטמעות קיימות של HIDL HAL ולספק את AIDL HAL. במכשירים שלא מופעלים עם Android 13 ושלא מתוכננים לעדכן את תמונת הספק, מומלץ גם לספק את AIDL HAL.

‫AOSP כולל כמה ספריות עזר שנועדו לעזור לכם להטמיע את AIDL HAL ולעבור מ-HIDL HALs הישנים.

טרמינולוגיה

לפני שקוראים את שאר התיעוד בנושא תקינות המערכת של Android, כדאי להכיר את המונחים הבאים:

health@2.1
קיצור של android.hardware.health@2.1. גרסה 1 של health HIDL פורסמה ב-Android 11.
health AIDL HAL
קיצור של android.hardware.health. גרסה 1 של Health AIDL HAL פורסמה ב-Android 13.
מטען
קובץ הפעלה שפועל בטעינה במצב כבוי ומציג את האנימציה של טעינת הטלפון.
recovery
קובץ הפעלה שפועל במצב שחזור וצריך לאחזר מידע על הסוללה.
storaged
דמון שמאחזר מידע על האחסון ומספק אותו למסגרת.

נתוני בריאות ב-Android 11 וב-Android 12

ב-Android 11 וב-Android 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

איור 1. תשתית Health HIDL HAL 2.1.

הבריאות ב-Android 13

ב-Android 13, הושק AIDL HAL של בריאות. באיור 2 אפשר לראות איך פועל רכיב התקינות:

תשתית Health AIDL HAL

איור 2. תשתית Health AIDL HAL.

ממשק HIDL HAL‏ 2.1

‫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, מוחזר באמצעות קריאות חוזרות (callback) ו-getHealthInfo_2_1. המבנה הזה מכיל מידע נוסף על תקינות המכשיר שזמין דרך health@2.0 HAL, כולל:

  • רמת הקיבולת של הסוללה
  • זמן הטעינה של הסוללה עד לטעינה מלאה (בשניות)
  • קיבולת הסוללה המתוכננת לטעינה מלאה (ב-μAh)

איור 3 מציג דיאגרמת UML של המחלקות ששימושיות להטמעה של Health HAL:

דיאגרמת UML של Health 2.1 HAL

איור 3. דיאגרמת UML של Health HAL 2.1.

מידע על הטמעה של שירות Health 2.1 זמין במאמר בנושא הטמעה של Health 2.1.

גרסה 1 של ממשק AIDL HAL

בקטע הזה מופיע מידע על גרסה 1 של ממשק AIDL HAL.

שינויים ב-API

‫HAL ב-AIDL גרסה 1 תומך בממשקי API דומים ל-HAL ב-HIDL גרסה 2.1. בהשוואה לממשק HIDL 2.1, בוצעו השינויים הבאים ב-API:

  • ממשקי API שקשורים למטען שהוצגו ב-HIDL HAL 2.1 לא מועברים ל-AIDL HAL. הפונקציונליות של טעינה במצב כבוי קיימת רק במחיצה /vendor, ולכן אין צורך בממשקי API בממשק הספק. כדי להטמיע טעינה במצב כבוי בצורה נכונה, אפשר לעיין במאמר בנושא מטען.
  • השדה Type (סוג) והשדות שקשורים אליו הוסרו כי הם לא בשימוש.StorageAttribute
  • chargerDockOnline נוסף ל-HealthInfo כדי לתמוך בטעינה במעמד.

הטמעה

איור 4 מציג דיאגרמת UML של המחלקות ששימושיות להטמעה של AIDL HAL בתחום הבריאות:

דיאגרמת UML של Health AIDL HAL

איור 4. דיאגרמת UML של Health AIDL HAL.

מידע על הטמעה של שירות AIDL לבריאות זמין במאמר בנושא הטמעה של Health AIDL HAL.

שחזור

‫Android 13 תומך ב-binder בשחזור. התקנת שירות Health AIDL לשחזור מאפשרת לו לפעול במצב שחזור.

למידע על התקנת שירות AIDL של Health לשחזור, אפשר לעיין במאמרים הבאים:

מטען

הפונקציונליות של טעינה במצב כבוי הועברה מ-/system אל /vendor. במכשירים שמושקים עם Android 13, אם הם תומכים בטעינה במצב כבוי, קובץ הבינארי של שירות ה-HAL חייב לתמוך במצב מטען. הוראות מפורטות מופיעות במאמר בנושא הטמעה של מטען.

מאפייני מערכת של מטען

המאפיינים ro.charger.* כבר לא ניתנים לקריאה על ידי הקובץ הבינארי charger ב-/vendor. אם במכשיר שלכם מוגדרים מאפייני מערכת של ro.charger.*, תוכלו לעיין במאפייני המערכת של המטען.