Android Health(运行状况)
原文:https://source.android.com/devices/tech/health
Android 9带来了health@1.0 HAL的主版本升级:android.hardware.healthHAL 2.0。这个新的HAL具有以下优点:
- Framework 和供应商代码之间更清晰的分离。
- 弃用不必要的
healthd守护进程。 - 在Health信息报告中为供应商定制提供更大的自由度。
- 比电池更多的设备Health信息。
要求
使用Android 9启动的设备必须提供2.0 HAL(并且不得提供1.0 HAL)。未使用Android 9启动但计划更新供应商映像为Target Framework Compatibility Matrix Version 3(在Android 9中发布)的设备必须删除现有的1.0 HAL实现并提供2.0 HAL。
AOSP包含多个帮助库,旨在帮助您实现2.0 HAL和从旧的1.0 HAL过渡。
术语
health@1.0:android.hardware.health@1.0的缩写。参考Android 8.0中发布的健康HIDL HAL 1.0版。
health@2.0:android.hardware.health@2.0的缩写。参考Android 9中发布的健康HIDL HAL 2.0版。
charger:关机充电模式下运行的可执行文件,显示电话充电动画。
recovery:recovery模式下运行的可执行文件,必须检索电池信息
healthd:Android中运行的遗留守护程序,用于检索与健康相关的信息并将其提供给Framework 。
storaged:Android中运行的守护程序,用于检索存储信息并将其提供给Framework 。
Android 8.x中的Health
Android 8.x中的Health组件的工作原理,如下图所示:
health-component-1.png
在此图中:
binder和hwbinder用于Framework 与硬件通信。
healthd静态链接到libhealthd_android,libbatterymonitor和libbatteryservice。
health@1.0-impl静态链接到libhealthd.BOARD。
每块板子可以定制不同的libhealthd.BOARD; 它在编译时确定charger、health@1.0-impl和recovery的指向链接。
对于其他模式:
health-1-charging-recovery.png
charger静态链接到libhealthd.BOARD、libhealthd_charger和libbatterymonitor。
recovery静态链接到libhealthd.BOARD和libbatterymonitor。
Android 9中的Health
在Android 9中,Health组件的工作原理如下图所示:
health-component-2.png
Framework尝试从hwservicemanager中检索health@2.0服务。如果失败,则调用health@1.0(在Android 8.x中)。遗留代码路径仍然保留,以便Android 9system镜像与Android 8.x vendor镜像兼容。Framework不会从两个HAL检索信息,因为设备上只能存在一个服务版本(1.0或2.0)。
注意:对于遗留代码路径,将保留处理逻辑/库直到
health@1.0废弃 。
对于其他模式:
health-2-charging-recovery.png
HAL接口
health@2.0 HAL为Framework提供与旧的healthd守护程序相同的功能。它还提供类似于以前healthd提供的作为binder服务的API(即IBatteryPropertiesRegistrar)。
主要接口 IHealth 提供了以下功能:
-
registerCallback, 取代IBatteryPropertiesRegistrar.registerListener -
unregisterCallback, 取代IBatteryPropertiesRegistrar.unregisterListener -
update, 取代IBatteryPropertiesRegistrar.scheduleUpdate -
IBatteryPropertiesRegistrar.getProperties被以下内容取代:getChargeCountergetCurrentNowgetCurrentAveragegetCapacitygetEnergyCountergetChargeStatusgetHealthInfo
此外,IHealth还提供以下新storaged API,以检索指定厂商存储相关的信息:
getStorageInfogetDiskStats
一个新的结构,@2.0::HealthInfo,通过回调和getHealthInfo返回。此结构包含通过health@2.0 HAL获取的所有设备Health信息,包括:
- 充电信息(AC / USB /无线,电流,电压等)
- 电池信息(存在,电池电量,电流,电压,电量,技术等)
- 存储信息(存储设备信息,磁盘统计信息)
有关Health服务实现的信息,请参阅 Health实现。