בריאות מערכת אנדרואיד

אנדרואיד 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
  • הפרדת טרבל טובה יותר בקוד טעינה במצב כבוי
  • תמיכה טובה יותר עבור המסגרת כדי לציין את תקינות הסוללה של המכשיר

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

  • הסר ממשקי API הקשורים למטען שאינם בשימוש
  • הסר StorageAttribute ושדות קשורים שאינם בשימוש
  • תומך בטעינת רציף.

דרישות

מכשירים עם אנדרואיד 9 ואנדרואיד 10

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

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

מכשירים עם אנדרואיד 11 ואנדרואיד 12

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

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

מכשירים עם אנדרואיד 13 ומעלה

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

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

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

טרמינולוגיה

  • 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.
  • health AIDL HAL : קיצור של android.hardware.health .
    • גרסה 1 שוחררה באנדרואיד 13.
  • מטען : קובץ הפעלה פועל במצב טעינה כבוי המציג את הנפשה של טעינת הטלפון.
  • שחזור : קובץ הפעלה פועל במצב שחזור שחייב לאחזר מידע סוללה.
  • 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 .

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

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

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

באנדרואיד 13, ה-Health AIDL HAL מוצג. מרכיב הבריאות פועל כמפורט בתרשים הבא:

בריאות AIDL HAL תשתית

איור 6. בריאות AIDL HAL תשתית

ממשק HIDL 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/אלחוטי, זרם, מתח וכו')
  • מידע על הסוללה (נוכחות, רמת סוללה, זרם, מתח, טעינה, טכנולוגיה וכו')
  • מידע אחסון (מידע על התקן אחסון, סטטיסטיקת דיסק)

למידע על יישום שירות הבריאות 2.0, ראה יישום בריאות 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 שעברו בירושה. הממשק החדש להתקשרות חוזרת מחזיר מידע בריאותי ללקוח באמצעות הפונקציה healthInfoChanged_2_1 שלו במקום הפונקציה healthInfoChanged שהורשתה.

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

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

עיין בתרשים UML הבא עבור השיעורים המועילים ליישום בריאות HAL:

תרשים בריאות 2.1 HAL UML

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

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

בריאות AIDL HAL UML דיאגרמת

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

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

התאוששות

אנדרואיד 13 תומך בקלסר בשחזור. התקנת שירות Health AIDL להתאוששות מאפשרת לו לפעול במצב התאוששות.

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

מַטעֵן

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

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

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