Android 9 內含 android.hardware.health
HAL 2.0、
Health@1.0 HAL 的主要版本升級這個新的 HAL 具備以下功能:
優點:
- 為架構和供應商程式碼提供更明確的區隔。
- 淘汰不必要的
healthd
Daemon。 - 供應商自訂健康資訊的自由度較高 報表。
- 不只是電池,裝置健康資訊也更豐富。
Android 11 包含 android.hardware.health
HAL 2.1、
從 health@2.0 HAL 升級子版本這個新的 HAL 具備以下功能:
優點:
- 導入簡單
- 更符合現有 2.0 HAL API 的要求
- 在偏離模式下的充電代碼中提供更強的 Treble 區隔功能
- 更完善的架構支援,以指出電池的電池健康度 裝置
Android 13 包含 android.hardware.health
AIDL HAL、
Health@2.1 HAL 帶來的轉換。這個新的 HAL 具備以下功能:
優點:
- 移除未使用的充電器相關 API
- 移除未使用的
StorageAttribute
和相關欄位 - 支援座架充電。
需求條件
搭載 Android 9 和 Android 10 的裝置
搭載 Android 9 的裝置必須提供 2.x HAL (且不得提供 1.0 HAL) 或 AIDL HAL。裝置無法啟動 搭載 Android 9,但打算更新供應商圖片 至目標架構相容性矩陣第 3 版 (於 Android 9 中推出) 必須移除現有的 1.0 HAL 實作項目, 可提供 2.x HAL 或 AIDL HAL。
Android 開放原始碼計畫包含多個輔助程式庫,旨在協助您實作 2.0 HAL 和舊版 1.0 HAL 的轉換作業。
搭載 Android 11 和 Android 12 的裝置
搭載 Android 11 的裝置必須提供 2.1 HAL (且不得提供 1.0 或 2.0 HAL) 或 AIDL HAL。不符合以下目標的裝置: 推出時搭載 Android 11,但計劃更新 供應商映像檔至目標架構相容性矩陣第 5 版 (發布於 Android 11) 必須移除現有的 2.0 HAL 並提供 2.1 HAL 或 AIDL HAL。裝置無法啟動 搭載 Android 11,且不打算更新供應商 建議使用 2.1 HAL 映像檔
Android 開放原始碼計畫包含多個輔助程式庫,旨在協助您實作 2.1 版 HAL 和舊版 1.0 HAL 的轉換作業。
搭載 Android 13 以上版本的裝置
搭載 Android 13 的裝置必須提供 AIDL HAL (且不得提供 HIDL HAL)。裝置無法搭載 Android 13,但計劃將供應商映像檔更新為 Target Framework Compatibility Matrix 第 7 版 (於 Android 13 推出) 必須移除現有的 HIDL HAL 實作項目,以及 可提供 AIDL HAL裝置未搭載 Android 13 且不打算更新供應商圖片 建議使用 AIDL HAL
裝置不得提供 HIDL 1.0 HAL。
Android 開放原始碼計畫包含多個輔助程式庫,旨在協助您導入 AIDL HAL 和舊 HIDL HAL 的轉換作業。
術語
- health@1.0:
android.hardware.health@1.0
的縮寫。指的是 在 Android 8.0 中發布的 Health HIDL HAL 1.0 版。 - health@2.0:
android.hardware.health@2.0
的縮寫。指的是 在 Android 9 中發布的 Health HIDL HAL 2.0 版。 - health@2.1:
android.hardware.health@2.1
的縮寫。指的是 在 Android 11 中發布的 Health HIDL HAL 2.1 版。 - health AIDL HAL:
android.hardware.health
的縮寫。- 版本 1 已在 Android 13 中發布。
- charger:以非模式充電的執行檔,顯示 手機充電動畫。
- recovery:在復原模式下執行,且必須擷取電池的執行檔 可能不準確或不適當
- healthd:在 Android 中執行的舊版 Daemon,可擷取健康相關 並提供給架構
- storaged:在 Android 中執行的 Daemon,可以擷取儲存空間資訊 並提供給架構
Android 8.x 中的健康狀態
在 Android 8.x 中,健康元件的運作方式如下圖所示:
圖 1. Android 8.x 中的健康狀態。
下圖:
- 架構會使用一 (1) 繫結器呼叫和一 (1) hwbinder 呼叫 與硬體通訊
healthd
的靜態連結連至libhealthd_android
、libbatterymonitor
和libbatteryservice
。- health@1.0-impl 靜態連結至
libhealthd.BOARD
。
每個主面板都可以自訂不同的 libhealthd.BOARD
;
裝置在建構期間判定為搭載「Health@1.0-impl」和「修復」的連結
。
其他模式:
圖 2. Android 8.x 中的健康狀態,關閉模式充電和復原模式。
- 充電器靜態連結至
libhealthd.BOARD
,libhealthd_charger
和libbatterymonitor
。 - 復原的靜態連結至
libhealthd.BOARD
libbatterymonitor
。
Android 9 中的健康狀態
在 Android 9 中,健康元件的運作方式和細節 如下圖所示:
圖 3. Android 9 中的健康狀態。
這個架構會嘗試從 hwservicemanager
擷取 health@2.0 服務。
如果失敗,系統會呼叫 health@1.0 (Android 8.x)。舊版程式碼路徑
確保 Android 9 系統映像檔可與
Android 8.x 廠商映像檔這個架構不會從
和 HAL,因為裝置上只有一個服務版本 (1.0 或 2.0)。
其他模式:
圖 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) ] |
+-------------------------------------+
如果健康狀態 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) ] |
+-------------------------------------+
請參閱以下的簡化圖表瞭解不同模式:
圖 5. Health HAL 2.1 基礎架構。
Android 13 中的健康狀態
我們在 Android 13 中導入了健康 AIDL HAL。 健康狀態元件的運作方式如下圖所示:
圖 6. 健康 AIDL HAL 基礎架構。
HIDL HAL 介面 2.0
health@2.0 HAL 提供與舊版架構相同的功能 健康的 Daemon同時提供與健康狀態相似的 API 先前以繫結器服務的形式提供 (即 IBatteryPropertiesRegistrar)。
主要介面 健康 後,提供以下函式:
registerCallback
,即將取代IBatteryPropertiesRegistrar.registerListener
unregisterCallback
,即將取代IBatteryPropertiesRegistrar.unregisterListener
update
,取代IBatteryPropertiesRegistrar.scheduleUpdate
- 將
IBatteryPropertiesRegistrar.getProperties
取代為:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
此外,IHealth
會為 storaged
提供下列新的 API,以便
擷取供應商專屬的儲存空間相關資訊:
getStorageInfo
getDiskStats
系統會透過回呼和 getHealthInfo
傳回新的結構 @2.0::HealthInfo
。
這個結構體包含透過 health@2.0 取得的所有裝置健康資訊
HAL,包括:
- 充電資訊 (AC/USB/無線、電流、電壓等)
- 電池資訊 (裝置狀態、電池電量、電流、電壓、充電 技術等)
- 儲存空間資訊 (儲存裝置資訊、磁碟統計資料)
如要瞭解如何實作健康服務 2.0,請參閱 實作 Health 2.0。
HIDL HAL 介面 2.1
health@2.1 HAL 支援離線充電功能,並提供更多資訊 電池相關資訊
主要介面 IHealth、 提供下列額外的函式
getHealthConfig
:擷取這個 HAL 的設定getHealthInfo_2_1
:將子版本升級至getHealthInfo
shouldKeepScreenOn
:指定是否應持續顯示螢幕 充電模式
此外,您必須導入 @2.1::IHealth
才能支援。
針對其繼承的 registerCallback
和 @2.1::IHealthInfoCallback
unregisterCallback
函式。新的回呼介面會傳回健康狀態
透過 healthInfoChanged_2_1
函式 (而不是
沿用的 healthInfoChanged
函式
系統會透過回呼傳回新的結構 @2.1::HealthInfo
,並
getHealthInfo_2_1
。這個結構體內含額外的裝置健康資訊
可透過 health@2.0 HAL 取得,包括:
- 電池容量等級
- 電池充飽電後 (以秒為單位)
- 電池充飽電設計容量 (以 μAh 為單位)
請參閱下列 UML 圖表,瞭解對健康 HAL 實作有幫助的類別:
圖 7. Health HAL 2.1 UML 圖表。
如要瞭解如何實作健康服務 2.1,請參閱 實作 Health 2.1。
AIDL HAL 介面 1 版
API 變更
AIDL 1 HAL 支援與 HIDL 2.1 HAL 類似的 API。相較於 HIDL 2.1 介面的功用,在 API 中會有以下異動:
- HIDL HAL 2.1 中導入的充電器相關 API 未轉移至 AIDL
HAL。因為處於關閉模式的充電功能只
/vendor
分區,且不需要供應商介面上的 API。目的地: 正確實作離線充電,請參閱下方的充電器。 - 類型「
StorageAttribute
」和相關欄位已遭移除 未使用的。 - 將
chargerDockOnline
新增至HealthInfo
,以便支援座架充電。
實作
請參閱下列 UML 圖表,瞭解對健康 HAL 實作有幫助的類別:
圖 8. 醫療照護 AIDL HAL UML 圖表。
如要瞭解如何導入 Health AIDL 服務,請參閱 實作 Health AIDL HAL。
搶球
Android 13 支援復原繫結器。安裝 Health AIDL 服務復原功能,允許在復原模式中執行。
如要進一步瞭解如何安裝要復原的 Health AIDL 服務,請參閱 包括:
充電器
非模式充電功能已從「/system
」移至「/vendor
」。適用對象
搭載 Android 13 的裝置,必須支援
模式關閉,HAL 服務二進位檔必須支援充電器模式。方法如下
提及
實作充電器。
充電器系統屬性
charger
二進位檔無法再讀取 ro.charger.*
的屬性
/vendor
。如果裝置已設定任何 ro.charger.*
系統屬性,
提及
充電器系統屬性。