כל הקודים של healthd
עברו ארגון מחדש ל-health@2.0-impl ו
libhealthservice
, ואז שונה כדי להטמיע את Health@2.0 HAL. שני המושגים האלה
מקושרות באופן סטטי באמצעות Health@2.0-service, וכך הן יכולות
את העבודה שהתבצעה בעבר על ידי healthd
(כלומר, להריץ את healthd_mainloop
). בהתחלה, השירות Health@2.0 רושם יישום של
ממשק IHealth
ל-hwservicemanager
. כשמשדרגים מכשירים עם
תמונה של ספק Android 8.x ומסגרת Android 9,
יכול להיות שתמונת הספק לא תספק את שירות Health@2.0. האכיפה הזו מתבצעת
על ידי
לוח הזמנים להוצאה משימוש.
כדי לפתור את הבעיה:
healthd
רושם אתIHealth
ל-hwservicemanager
(למרות שהוא מערכת דימון).IHealth
מתווסף למניפסט של המערכת, עם שם המכונה"backup"
.- המסגרת הרעיונית ו-
storaged
מתקשרים עםhealthd
באמצעותhwbinder
במקוםbinder
. - הקוד של framework ו-
storaged
משתנים כדי לאחזר את המכונה"default"
אם זמין, ואז"backup"
.- קוד הלקוח של C++ משתמש בלוגיקה שהוגדרה ב-
libhealthhalutils
. - קוד הלקוח של Java משתמש בלוגיקה שהוגדרה ב-
HealthServiceWrapper
.
- קוד הלקוח של C++ משתמש בלוגיקה שהוגדרה ב-
- אחרי שהגישה ל-IHealth/ברירת המחדל היא רחבה, ותמונות של ספקי Android 8.1 זמינות
הוצאו משימוש, אפשר לצאת משימוש ב-IHealth/backup וב-
healthd
. לקבלת מידע נוסף פרטים נוספים זמינים במאמר Deprecatinghealth@1.0.
משתני build ספציפיים ללוח עבור תקינות
BOARD_PERIODIC_CHORES_INTERVAL_*
הם משתנים ספציפיים ללוח שמשמשים לפיתוח
healthd
. כחלק מחלוקת ה-build של מערכת/ספק, ערכים ספציפיים ללוח
לא ניתן להגדיר למודולים של המערכת. ב-Health@2.0, הספקים יכולים לשנות את ברירת המחדל
שני הערכים האלה ב-healthd_mode_ops->init
(על ידי שחרור של libhealthservice
או התלות ב-health@2.0-service.<device>
והטמעה מחדש של הפונקציה).
ספריית הטמעה סטטית
בניגוד לספריות אחרות של הטמעת HAL, ספריית ההטמעה Health@2.0-impl היא ספרייה סטטית שאליה Health@2.0-service, מטען, שחזור וקישור תקין מדור קודם.
Health@2.0.impl מטמיעה את IHealth
כפי שמתואר למעלה והמטרה שלו היא לגלוש
בסביבות libbatterymonitor
ו-libhealthd.BOARD
. האלה
למשתמשים ב-Health@2.0-impl אסור להשתמש ב-BatteryMonitor
או בפונקציות
libhealthd
באופן ישיר; במקום זאת, צריך להחליף את הקריאות האלה בשיחות
המחלקה Health
, הטמעה של הממשק IHealth
. כדי ליצור הכללות
בנוסף, הקוד healthd_common
כלול גם ב-Health@2.0-impl. הגרסה החדשה
healthd_common
מכיל את שאר הקוד הנפוץ בין Health@2.0-service,
ומטען, healthd
ושיחות לשיטות IHealth במקום ל-סוללה Monitor.
הטמעת שירות Health 2.0
בעת הטמעת שירות Health@2.0 למכשיר, אם הטמעת ברירת המחדל היא:
- מספיק למכשיר, צריך להשתמש ב-
android.hardware.health@2.0-service
ישירות. לא מספיק עבור המכשיר. יש ליצור את קובץ הפעלה של
android.hardware.health@2.0-service.(device)
ולכלול:#include <health2/service.h> int main() { return health_service_main(); }
לאחר מכן:
אם הוא ספציפי ללוח
libhealthd:
- קיים, קישור אליו.
- לא קיים, יש לספק הטמעות ריקות עבור
healthd_board_init
ו-healthd_board_battery_update
.
אם משתני
BOARD_PERIODIC_CHORES_INTERVAL_*
ספציפיים ללוח:- מוגדרים, יש ליצור
HealthServiceCommon.cpp
ספציפי למכשיר (מועתק) מ-hardware/interfaces/health/2.0/utils/libhealthservice
) וגם אפשר להתאים אותו אישית ב-healthd_mode_service_2_0_init
. - לא מוגדרות, יש ליצור קישור אל
libhealthservice
באופן סטטי.
- מוגדרים, יש ליצור
אם המכשיר:
- בהטמעה של ממשקי ה-API של
getStorageInfo
ושלgetDiskStats
, יש לספק את בפונקציותget_storage_info
ו-get_disk_stats
. - לא צריך להטמיע את ממשקי ה-API האלה, צריך לקשר אל
libstoragehealthdefault
באופן סטטי.
- בהטמעה של ממשקי ה-API של
מעדכנים את ההרשאות הנחוצות ל-SELinux.
להטמיע HAL בשחזור על ידי התקנה של הטמעה מסוג passthrough קובץ אימג' לשחזור מערכת ההפעלה. דוגמה:
// Android.bp cc_library_shared { name: "android.hardware.health@2.0-impl-<device>", recovery_available: true, relative_install_path: "hw", static_libs: [ "android.hardware.health@2.0-impl", "libhealthd.<device>" // Include the following or implement device-specific storage APIs "libhealthstoragedefault", ], srcs: [ "HealthImpl.cpp", ], overrides: [ "android.hardware.health@2.0-impl-default", ], }
// HealthImpl.cpp #include <health2/Health.h> #include <healthd/healthd.h> using android::hardware::health::V2_0::IHealth; using android::hardware::health::V2_0::implementation::Health; extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) { const static std::string providedInstance{"default"}; if (providedInstance != name) return nullptr; return Health::initInstance(&gHealthdConfig).get(); }
# device.mk PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
פרטים נוספים זמינים במאמר hardware/interfaces/health/2.0/README.md.
לקוחות בתחום הבריאות
למידע נוסף על לקוחות בתחום הבריאות בנוגע ל-Health 2.1 HAL.
שינויים ב-SELinux
גרסת Health@2.0 HAL החדשה כוללת את השינויים הבאים ב-SELinux:
- הוספת Health@2.0-service ל-
file_contexts
. - ל-
system_server
ול-storaged
תהיה אפשרות להשתמש ב-hal_health
. - מאפשרת ל-
system_server
(BatteryService
) להירשםbatteryproperties_service
(IBatteryPropertiesRegistrar
). - ל-
healthd
תהיה אפשרות לספקhal_health
. - הסרת כללים שמאפשרים ל
system_server
ולstoraged
להתקשר אלhealthd
באמצעות binder. - הסרת כללים שמאפשרים ל-
healthd
לרשום אתbatteryproperties_service
(IBatteryPropertiesRegistrar
).
במכשירים עם הטמעה משלהם, ייתכן שחלק מהשינויים ב-SELinux של הספק הנחוצים. דוגמה:
# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0
# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.
ממשקי ליבה
ראו ממשקי ליבה ל-Health 2.1 HAL.
בדיקה
Android 9 כולל בדיקות VTS חדשות
נכתב במיוחד עבור Health@2.0 HAL. אם מכשיר מצהיר על לספק
Health@2.0 HAL במניפסט של המכשיר צריך לעבור את בדיקות ה-VTS המתאימות.
הבדיקות נכתבות עבור מופע ברירת המחדל (כדי לוודא שהמכשיר
מממשת את ה-HAL בצורה נכונה) ואת המופע של הגיבוי (כדי לוודא ש-healthd
ממשיך לפעול כראוי לפני ההסרה).
דרישות לגבי מידע על הסוללה
כדאי לעיין בדרישות לגבי מידע על הסוללה.