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 具有下列優點:
- 架構和供應商程式碼之間的區隔更清楚。
- 在健康資訊報告中,供應商可自由自訂的程度更高。
- 除了電池外,還有更多裝置健康資訊。
本頁面提供實作 Health 2.1 HAL 的說明文件供您參考。
需求條件
本節包含 Android 11、12 和 13 以上版本的相關規定。
搭載 Android 11 和 Android 12 的裝置
搭載 Android 11 和 12 的裝置必須提供 2.1 HAL 或 AIDL HAL。如果裝置未搭載 Android 11 或 12,但打算將供應商映像檔更新至目標架構相容性矩陣第 5 版 (在 Android 11 中發布) 或第 6 版 (在 Android 12 中發布),則必須移除現有的 2.0 HAL 實作,並提供 2.1 HAL 或 AIDL HAL。如果裝置未搭載 Android 11,且不打算更新供應商映像檔,建議您提供 2.1 或 AIDL HAL。
AOSP 包含多個輔助程式庫,可協助您實作 2.1 HAL 並從舊版 HIDL 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。
AOSP 包含多個輔助程式庫,可協助您實作 AIDL HAL 和從舊版 HIDL HAL 進行轉換。
術語
在閱讀 Android 系統健康度說明文件的其餘部分之前,請先瞭解下列術語:
- health@2.1
- 是
android.hardware.health@2.1
的縮寫。健康 HIDL 的 1.0 版已在 Android 11 中發布。 - health AIDL HAL
- 是
android.hardware.health
的縮寫。健康 AIDL HAL 的 1 版已在 Android 13 中發布。 - 充電器
- 在關機充電模式下執行的執行檔,會顯示手機充電動畫。
- recovery
- 在復原模式下執行的執行檔,必須擷取電池資訊。
- storaged
- Daemon,可擷取儲存空間資訊並提供給架構。
Android 11 和 12 中的健康
在 Android 11 和 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 基礎架構。
Android 13 中的健康
Android 13 中引入了健康 AIDL HAL。圖 2 詳細說明健康元件的運作方式:
圖 2. Health AIDL HAL 基礎架構。
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
函式,將健康狀態資訊傳回給用戶端。
使用回呼和 getHealthInfo_2_1
傳回新的結構體 @2.1::HealthInfo
。這個結構體包含可透過 health@2.0 HAL 取得的其他裝置健康資訊,包括:
- 電池容量
- 電池充電至滿電所需時間 (以秒為單位)
- 電池充飽電設計容量 (以 μAh 為單位)
圖 3 顯示健康 HAL 實作所需的類別 UML 圖表:
圖 3. Health HAL 2.1 UML 圖表。
如要瞭解如何實作 Health 2.1 服務,請參閱「實作 Health 2.1」。
AIDL HAL 介面第 1 版
本節提供 AIDL HAL 介面第 1 版的相關資訊。
API 變更
AIDL 1.0 HAL 支援與 HIDL 2.1 HAL 相似的 API。與 HIDL 2.1 介面相比,API 中的以下項目已變更:
- 在 HIDL HAL 2.1 中引入的充電器相關 API 並未移植至 AIDL HAL。由於離線充電功能只會在
/vendor
分區中執行,因此供應商介面上的 API 並非必要。如要正確實作離線充電功能,請參閱充電器。 - 系統會移除未使用的
StorageAttribute
類型和相關欄位。 chargerDockOnline
已新增至HealthInfo
,以支援充電座充電功能。
實作
圖 4 顯示健康 AIDL HAL 實作所需的類別 UML 圖表:
圖 4. Health AIDL HAL UML 圖表。
如要瞭解如何實作健康 AIDL 服務,請參閱「實作 Health AIDL HAL」。
復原
Android 13 支援復原程序中的繫結器。將 Health AIDL 服務安裝至復原模式,即可在復原模式下執行。
如要瞭解如何安裝健康 AIDL 服務來進行復原,請參閱下列說明:
充電器
關機充電功能已從 /system
移至 /vendor
。如果裝置支援關機充電,則 HAL 服務二進位檔必須支援充電器模式。如要這麼做,請參閱「實作充電器」一文。
充電器系統屬性
ro.charger.*
屬性不再可供 /vendor
中的 charger
二進位檔讀取。如果裝置已設定任何 ro.charger.*
系統屬性,請參閱充電器的系統屬性。