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 החדש יש את היתרונות הבאים:
- הפרדה ברורה יותר בין המסגרת לקוד של הספק.
- יותר דרגות חופש להתאמה אישית של ספקים בדוחות של מידע רפואי.
- מידע נוסף על תקינות המכשיר, לא רק על הסוללה.
מסמכי התיעוד להטמעת HAL של Health 2.1 מופיעים בדף הזה לעיונכם.
דרישות
הקטע הזה מכיל דרישות ל-Android מגרסה 11, 12 ו-13 ואילך.
במכשירים עם Android 11 ו-Android 12
במכשירים שיושקו עם Android 11 ו-Android 12 צריך לספק את ה-HAL מגרסה 2.1 או את ה-HAL של AIDL. במכשירים שלא יושקו עם Android 11 או 12, אבל מתוכנן לעדכן את קובץ האימג' של הספק למטריצה של תאימות מסגרת היעד בגרסה 5 (שפורסמה ב-Android 11) או בגרסה 6 (שפורסמה ב-Android 12), צריך להסיר את הטמעות ה-HAL הקיימות של 2.0 ולספק את ה-HAL של 2.1 או את ה-HAL של AIDL. מומלץ גם לספק את 2.1 או את AIDL HAL במכשירים שלא מושקעים עם Android 11 ולא מתכננים לעדכן את קובץ האימג' של הספק.
AOSP כולל כמה ספריות עזר שנועדו לעזור לכם להטמיע את ה-HAL בגרסה 2.1 ולעבור מה-HALs הישנים של HIDL.
במכשירים עם Android מגרסה 13 ואילך
במכשירים שיושקו עם Android 13 חייב להיות HAL של AIDL (אסור לספק HAL של HIDL). במכשירים שלא יושקעו עם Android 13 אבל מתוכנן לעדכן את קובץ האימג' של הספק למטריצה של תאימות מסגרת היעד (Target Framework Compatibility Matrix) בגרסה 7 (שפורסמה ב-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 של HIDL לבריאות שוחררה ב-Android 11. - health AIDL HAL
- קיצור של
android.hardware.health
. גרסה 1 של HAL ל-AIDL בתחום הבריאות שוחררה ב-Android 13. - charger
- קובץ הפעלה שפועל במצב טעינה מושבתת ומציג את האנימציה של טעינת הטלפון.
- recovery
- קובץ הפעלה שפועל במצב שחזור וצריך לאחזר את פרטי הסוללה.
- storaged
- דמוין שמאחזר את פרטי האחסון ומספק אותם למסגרת.
אפליקציית Health ב-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) ] |
+-------------------------------------+
בתרשים הפשוט הבא מפורטים המצבים השונים:
איור 1. תשתית Health HIDL HAL 2.1.
אפליקציית Health ב-Android 13
ב-Android 13 מוצג ה-HAL של AIDL לבריאות. תרשים 2 מראה איך פועל רכיב בריאות האתר:
איור 2. תשתית HAL של Health AIDL.
ממשק 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
, מוחזר באמצעות פונקציות קריאה חוזרת (callbacks) ו-getHealthInfo_2_1
. המבנה הזה מכיל מידע נוסף על בריאות המכשיר שזמין דרך health@2.0 HAL, כולל:
- רמת קיבולת הסוללה
- זמן הטעינה של הסוללה עד לרמה מלאה (בשניות)
- קיבולת תכנון של סוללה בטעינה מלאה (ב-μAh)
באיור 3 מוצגת דיאגרמת UML של הכיתות ששימושיות להטמעת HAL של שירותי הבריאות:
איור 3. תרשים UML של Health HAL 2.1.
למידע נוסף על הטמעת שירות Health 2.1, ראו הטמעת Health 2.1.
ממשק AIDL HAL בגרסה 1
הקטע הזה מכיל מידע על ממשק AIDL HAL בגרסה 1.
שינויים ב-API
HAL של AIDL בגרסה 1 תומך בממשקי API דומים ל-HAL של HIDL 2.1. בהשוואה לממשק HIDL 2.1, השינויים הבאים בוצעו ב-API:
- ממשקי ה-API שקשורים למטען שהוצגו ב-HIDL HAL 2.1 לא הועברו ל-AIDL HAL. מאחר שהפונקציונליות של הטעינה במצב כבוי נמצאת רק במחיצה
/vendor
, אין צורך ב-API בממשק הספק. במאמר מטען מוסבר איך להטמיע טעינה במצב כבוי בצורה נכונה. - הסוג
StorageAttribute
והשדות הקשורים אליו יוסרו כי הם לא בשימוש. chargerDockOnline
מתווסף ל-HealthInfo
כדי לתמוך בטעינה במעמד.
הטמעה
באיור 4 מוצגת דיאגרמת UML של הכיתות ששימושיות להטמעת HAL של AIDL בתחום הבריאות:
איור 4. דיאגרמת UML של Health AIDL HAL.
מידע נוסף על הטמעת שירות ה-Health AIDL זמין במאמר הטמעת Health AIDL HAL.
שחזור
ב-Android 13 יש תמיכה ב-binder בתהליך השחזור. התקנת שירות Health AIDL לתהליך השחזור מאפשרת לו לפעול במצב שחזור.
למידע על התקנת שירות AIDL לבריאות בתהליך השחזור, תוכלו לקרוא את המאמרים הבאים:
מטען
הפונקציונליות של הטעינה במצב כבוי הועברה מ-/system
ל-/vendor
. במכשירים שיושקו עם Android 13, אם הם תומכים בטעינה במצב כבוי, קובץ ה-binary של שירות HAL חייב לתמוך במצב מטען. כדי לעשות זאת, תוכלו לעיין במאמר הטמעת מטען.
מאפייני המערכת של המטען
לא ניתן יותר לקרוא את המאפיינים ro.charger.*
בקובץ הבינארי charger
ב-/vendor
. אם במכשיר מוגדרים מאפייני מערכת מתוך ro.charger.*
, תוכלו לעיין במאמר מאפייני מערכת למטען.