תקינות מערכת Android

Android 9 כולל android.hardware.health HAL 2.0, שדרוג גרסה ראשית מ-Health@1.0 HAL. גרסת ה-HAL החדשה כוללת יתרונות:

  • קל יותר להפריד בין ה-framework לבין קוד הספק.
  • מוציא משימוש את הדימון המיותר של healthd.
  • דרגות חופש גבוהות יותר להתאמה אישית של ספקים במידע רפואי דוחות.
  • יותר מידע על תקינות המכשיר מאשר רק הסוללה.

Android 11 כולל HAL 2.1 android.hardware.health שדרוג גרסה משנית מ-Health@2.0 HAL. גרסת ה-HAL החדשה כוללת יתרונות:

  • קל יותר ליישום
  • תאימות משופרת לממשקי API קיימים מסוג 2.0 HAL
  • הפרדת טרבל טובה יותר בקוד טעינה במצב אופליין
  • תמיכה טובה יותר ל-framework כדי לציין את תקינות הסוללה של המכשיר

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

  • הסרת ממשקי API שקשורים למטענים שלא נמצאים בשימוש
  • הסרת StorageAttribute שלא בשימוש ושדות קשורים
  • תמיכה בטעינה של אביזר העגינה.

הדרישות

מכשירים עם Android 9 ו-Android 10

מכשירים שמופעלים עם Android 9 צריכים לספק את קובץ ה- 2.x HAL (ואסור לספק HAL 1.0) או AIDL HAL. המכשירים לא מופעלים עם Android 9, אבל אנחנו מתכננים לעדכן את תמונת הספק למטריצת התאימות של Target Framework גרסה 3 (הופצה ב-Android 9) להסיר הטמעות HAL 1.0 קיימות לספק 2.x HAL או AIDL HAL.

AOSP כולל ספריות מסייעות מרובות שנועדו לעזור לכם להטמיע את גרסה 2.0 HAL והמעבר מהפורמט הישן 1.0 HAL.

מכשירים עם Android 11 ו-Android 12

מכשירים שמושקים עם Android 11 חייבים לספק את הגרסה 2.1 HAL (ואסור לספק HAL 1.0 או 2.0) או AIDL HAL. מכשירים שלא עם Android 11, אבל מתכננים לעדכן תמונת ספק למטריצת התאימות של Target Framework גרסה 5 (הופצה ב Android 11) צריך להסיר את תקן 2.0 HAL הקיים ולספק 2.1 HAL או AIDL HAL. המכשירים לא מופעלים עם Android 11 ואתם לא מתכננים לעדכן את הספק מומלץ גם לספק תמונה בפורמט 2.1 HAL.

AOSP כולל כמה ספריות מסייעות שמיועדות לעזור לכם להטמיע את גרסה 2.1 HAL והמעבר מהפורמט הישן 1.0 HAL.

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

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

אסור למכשירים לספק HIDL 1.0 HAL.

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

טרמינולוגיה

  • health@1.0: קיצור של android.hardware.health@1.0. מתייחס אל Health HIDL HAL גרסה 1.0 הושקה ב-Android 8.0.
  • health@2.0: קיצור של android.hardware.health@2.0. מתייחס אל Health HIDL HAL גרסה 2.0 הושקה ב-Android 9.
  • health@2.1: קיצור של android.hardware.health@2.1. מתייחס אל Health HIDL HAL גרסה 2.1 הושקה ב-Android 11.
  • health AIDL HAL: קיצור של android.hardware.health.
    • גרסה 1 זמינה ב-Android 13.
  • מטען: קובץ הפעלה שפועל בטעינה לא במצב טעינה שמציג את אנימציה של טעינת הטלפון.
  • recovery: קובץ ההפעלה פועל במצב שחזור שצריך לאחזר את הסוללה מידע.
  • בריאות: דימון (daemon) מדור קודם שפועל ב-Android ומאחזר נתונים שקשורים לבריאות ומספקים אותו למסגרת.
  • storaged: דימון (daemon) שפועל ב-Android שמאחזר פרטי אחסון ומספקת אותו ל-framework.

בריאות ב-Android 8.x

ב-Android 8.x, רכיב הבריאות פועל כמפורט בתרשים הבא:

בריאות ב-Android 8.x

איור 1. בריאות ב-Android 8.x.

בתרשים הזה:

  • קריאה אחת (1) ל-binder וקריאה אחת (1) ל-hwbinder משמשות את ה-framework כדי תקשורת עם חומרה.
  • healthd מקשר סטטי אל libhealthd_android, libbatterymonitor וגם libbatteryservice
  • Health@1.0-impl מקושר באופן סטטי אל libhealthd.BOARD

כל לוח יכול להתאים אישית libhealthd.BOARD. בעת פיתוח גרסת ה-build ייקבע איזה מטען, Health@1.0-impl וקישור לשחזור ל.

למצבים אחרים:

מצב טעינה ושחזור במצב לא פעיל ב-Android 8.x

איור 2. תקינות ב-Android 8.x, מצב לא פעיל של טעינה ושחזור.

  • המטען מקשר באופן סטטי אל libhealthd.BOARD, libhealthd_charger וגם libbatterymonitor
  • מקשר באופן סטטי אל libhealthd.BOARD ו- libbatterymonitor.

בריאות ב-Android 9

ב-Android 9, רכיב הבריאות פועל בצורה מפורטת בתרשים הבא: בריאות ב-Android 9

איור 3. בריאות ב-Android 9.

המערכת מנסה לאחזר את שירות Health@2.0 מ-hwservicemanager. אם הפעולה נכשלת, היא שולחת קריאה אל Health@1.0 (ב-Android 8.x). נתיב הקוד מהדור הקודם הוא כדי שתמונת המערכת של Android 9 תתאים תמונה של ספק Android 8.x. ה-framework לא מאחזרת מידע מ- הן הנחיות HAL כי רק גרסת שירות אחת (1.0 או 2.0) יכולה להיות קיימת במכשיר.

למצבים אחרים:

טעינה ושחזור במצב מושבת ב-Android 9

איור 4. תקינות ב-Android 9, מצב טעינה ושחזור לא במצב מושבת.

בריאות ב-Android 11

ב-Android 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)      ] |
+-------------------------------------+

ראו את התרשים הפשוט הבא למצבים שונים:

תשתית Health HAL 2.1

איור 5. תשתית Health HAL 2.1.

בריאות ב-Android 13

ב-Android 13 אנחנו משיקים את AIDL HAL בתחום הבריאות. רכיב הבריאותי פועל כמפורט בתרשים הבא:

תשתית AIDL של Health

איור 6. תשתית AIDL של Health.

ממשק HIDL HAL 2.0

פרוטוקול Health@2.0 HAL מספק את אותה פונקציונליות ל-framework כמו דימון בריא. הוא גם מספק ממשקי API שדומים לאלה שניתן קודם לכן כשירות binders (כלומר IסוללהPropertiesRegistrar).

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

  • פרטי הטעינה (AC/USB/אלחוטי, זרם, מתח וכו')
  • מידע על הסוללה (נוכחות, רמת הטעינה של הסוללה, זרם, מתח, טעינה, טכנולוגיה וכו')
  • מידע על האחסון (מידע על התקן האחסון, נתונים סטטיסטיים של הכונן)

למידע נוסף על יישום שירות Health 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. ממשק הקריאה החוזרת (callback) החדש מחזיר תקינות את המידע ללקוח באמצעות הפונקציה healthInfoChanged_2_1 שלו במקום הפונקציה healthInfoChanged שעברה בירושה.

מבנה חדש, @2.1::HealthInfo, מוחזר באמצעות קריאות חוזרות getHealthInfo_2_1. המבנה הזה מכיל מידע נוסף על תקינות המכשיר זמין דרך Health@2.0 HAL, כולל:

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

בתרשים הבא של UML אפשר לראות את המחלקות שימושיות להטמעת HAL בתחום הבריאות:

תרשים Health 2.1 HAL UML

איור 7. תרשים Health HAL 2.1 UML.

למידע נוסף על יישום שירות הבריאות 2.1, ראו הטמעת Health 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 בתחום הבריאות:

תרשים Health AIDL HAL UML

איור 8. תרשים Health AIDL HAL UML.

למידע נוסף על הטמעת שירות AIDL בתחום הבריאות: הטמעת Health AIDL HAL

התאוששות

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

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

מטען

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

מאפייני מערכת המטען

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