בריאות המערכת של 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. בנוסף, מומלץ לספק את AIDL HAL במכשירים שלא מופעלים עם Android 13 ושלא מתוכננים לעדכן את תמונת הספק.

‫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 של AIDL HAL לבריאות פורסמה ב-Android 13.
מטען
קובץ הפעלה שפועל בטעינה במצב כבוי ומציג את האנימציה של טעינת הטלפון.
recovery
קובץ הפעלה שפועל במצב שחזור וצריך לאחזר מידע על הסוללה.
storaged
Daemon שמאחזר מידע על האחסון ומספק אותו למסגרת.

הנתונים הבריאותיים ב-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, הושק health 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:

Health 2.1 HAL UML diagram

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

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

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

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

שינויים ב-API

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

  • ממשקי API שקשורים למטען שהוצגו ב-HIDL HAL 2.1 לא מועברים ל-AIDL HAL. הפונקציונליות של טעינה במצב כבוי קיימת רק במחיצה /vendor, ולכן אין צורך בממשקי API בממשק הספק. כדי להטמיע טעינה במצב כבוי בצורה נכונה, אפשר לעיין במאמר בנושא מטען.
  • הסוג 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 service binary חייב לתמוך במצב טעינה. הוראות מפורטות מופיעות במאמר בנושא הטמעה של מטען.

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

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