原文: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.pngcharger
静态链接到libhealthd.BOARD
、libhealthd_charger
和libbatterymonitor
。
recovery
静态链接到libhealthd.BOARD
和libbatterymonitor
。
Android 9中的Health
在Android 9中,Health组件的工作原理如下图所示:
health-component-2.pngFramework尝试从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.pngHAL接口
health@2.0
HAL为Framework提供与旧的healthd
守护程序相同的功能。它还提供类似于以前healthd
提供的作为binder
服务的API(即IBatteryPropertiesRegistrar)。
主要接口 IHealth 提供了以下功能:
-
registerCallback
, 取代IBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
, 取代IBatteryPropertiesRegistrar.unregisterListener
-
update
, 取代IBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
被以下内容取代:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
此外,IHealth
还提供以下新storaged
API,以检索指定厂商存储相关的信息:
getStorageInfo
getDiskStats
一个新的结构,@2.0::HealthInfo
,通过回调和getHealthInfo
返回。此结构包含通过health@2.0 HAL
获取的所有设备Health信息,包括:
- 充电信息(AC / USB /无线,电流,电压等)
- 电池信息(存在,电池电量,电流,电压,电量,技术等)
- 存储信息(存储设备信息,磁盘统计信息)
有关Health服务实现的信息,请参阅 Health实现。
网友评论