בריאות אנדרואיד

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

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

אנדרואיד 11 כולל android.hardware.health HAL 2.1, שדרוג גרסה מינורי מ- health@2.0 HAL. ל-HAL החדש הזה יש את היתרונות הבאים:

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

דרישות

מכשירים המופעלים עם אנדרואיד 9 חייבים לספק את 2.0 HAL (ולא חייבים לספק את 1.0 HAL). מכשירים שאינם מושקים עם אנדרואיד 9 אך מתכננים לעדכן את תמונת הספק ל- Target Framework Compatibility Matrix גרסה 3 (שוחררה באנדרואיד 9) חייבים להסיר יישומי 1.0 HAL קיימים ולספק את 2.0 HAL.

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

AOSP כולל מספר ספריות עוזר שנועדו לעזור לך ליישם את 2.1 HAL ואת המעבר מהישן 1.0 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.
  • מטען : קובץ הפעלה פועל במצב טעינה כבוי המציג את הנפשה של טעינת הטלפון.
  • שחזור : קובץ הפעלה פועל במצב שחזור שחייב לאחזר מידע סוללה.
  • healthd : דמון מדור קודם הפועל באנדרואיד המאחזר מידע הקשור לבריאות ומספק אותו למסגרת.
  • storaged : דמון הפועל באנדרואיד המאחזר מידע אחסון ומספק אותו למסגרת.

בריאות באנדרואיד 8.x

באנדרואיד 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 libhealthd. BOARD

בריאות באנדרואיד 9

באנדרואיד 9, רכיב הבריאות פועל כמפורט בתרשים הבא: בריאות באנדרואיד 9

איור 3 . בריאות באנדרואיד 9

המסגרת מנסה לאחזר את שירות health@2.0 מ- hwservicemanager . אם הוא נכשל, הוא מתקשר אל health@1.0 (באנדרואיד 8.x). נתיב הקוד מדור קודם נשמר כך שתמונת מערכת אנדרואיד 9 תואמת לתמונת ספק אנדרואיד 8.x. המסגרת אינה שואבת מידע משני ה-HALs מכיוון שרק גרסת שירות אחת (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.0

ה- health@2.0 HAL מספק את אותה פונקציונליות למסגרת כמו הדמון הישן של healthd. הוא גם מספק ממשקי API הדומים למה ש- Healthd סיפק בעבר כשירות קלסר (כלומר 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 , מוחזר באמצעות התקשרויות חוזרות ו- getHealthInfo . מבנה זה מכיל את כל מידע בריאות המכשיר הזמין דרך health@2.0 HAL, כולל:

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

ממשק 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)

למידע על יישום שירות הבריאות, ראה יישום בריאות .