Android 9 включает android.hardware.health HAL 2.0, основное обновление версии Health@1.0 HAL. Этот новый HAL имеет следующие преимущества:
- Более четкое разделение между фреймворком и кодом поставщика.
-  Устарел ненужный демон healthd.
- Больше степеней свободы для настройки поставщиков в отчетах с информацией о состоянии здоровья.
- Больше информации о состоянии устройства, чем просто аккумулятор.
 Android 11 включает android.hardware.health HAL 2.1, второстепенное обновление версии Health@2.0 HAL. Этот новый HAL имеет следующие преимущества:
- Легче реализовать
- Лучшее соответствие с существующими API 2.0 HAL
- Лучшее разделение высоких частот в коде зарядки в выключенном состоянии
- Улучшенная поддержка платформы для индикации состояния батареи устройства.
Требования
Устройства, запускаемые с Android 9, должны предоставлять HAL 2.0 (и не должны предоставлять HAL 1.0). Устройства, которые не запускаются с Android 9, но планируют обновить образ поставщика до версии 3 матрицы совместимости целевой платформы (выпущенной в Android 9), должны удалить существующие реализации HAL 1.0 и предоставить HAL 2.0.
Устройства, запускаемые с Android 11, должны предоставлять HAL 2.1 (и не должны предоставлять HAL 1.0 или 2.0). Устройства, которые не запускаются с Android 11, но планируют обновить образ поставщика до версии 5 матрицы совместимости целевой платформы (выпущенной в Android 11), должны удалить существующие реализации HAL 2.0 и предоставить HAL 2.1. Устройствам, которые не запускаются с Android 11 и не планируют обновлять образ поставщика, также рекомендуется предоставлять HAL версии 2.1.
AOSP включает в себя несколько вспомогательных библиотек, разработанных для помощи в реализации HAL версии 2.1 и переходе от старой версии HAL версии 1.0.
Терминология
-  здоровье@1.0 : сокращение от android.hardware.health@1.0. Относится к работоспособности HIDL HAL версии 1.0, выпущенной в Android 8.0.
-  здоровье@2.0 : сокращение от android.hardware.health@2.0. Относится к работоспособности HIDL HAL версии 2.0, выпущенной в Android 9.
-  здоровье@2.1 : сокращение от android.hardware.health@2.1. Относится к работоспособности HIDL HAL версии 2.1, выпущенной в Android 11.
- Charger : исполняемый файл, работающий в выключенном режиме зарядки, который отображает анимацию зарядки телефона.
- recovery : исполняемый файл, работающий в режиме восстановления, который должен получить информацию о батарее.
- healthd : устаревший демон, работающий в Android, который извлекает информацию, связанную со здоровьем, и предоставляет ее фреймворку.
- storaged : демон, работающий в Android, который извлекает информацию о хранилище и предоставляет ее фреймворку.
Здоровье в 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.
-  recovery статически ссылается на libhealthd. BOARDиlibbatterymonitor.
Здоровье в Android 9
 В Android 9 компонент работоспособности работает, как показано на следующей схеме: 
Рисунок 3 . Здоровье в Android 9
 Фреймворк пытается получить сервис health@2.0 от hwservicemanager . В случае сбоя он обращается к 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)      ] |
+-------------------------------------+
HAL-интерфейс 2.0
Health@2.0 HAL обеспечивает ту же функциональность для платформы, что и старый демон healthd. Он также предоставляет API, которые аналогичны тому, что Healthd ранее предоставлял в качестве связующего сервиса (например , IBatteryPropertiesRegistrar ).
Основной интерфейс IHealth предоставляет следующие функции:
-  registerCallbackдля заменыIBatteryPropertiesRegistrar.registerListener
-  unregisterCallbackдля заменыIBatteryPropertiesRegistrar.unregisterListener
-  update, чтобы заменитьIBatteryPropertiesRegistrar.scheduleUpdate
-  IBatteryPropertiesRegistrar.getPropertiesзаменяется следующим:-  getChargeCounter
-  getCurrentNow
-  getCurrentAverage
-  getCapacity
-  getEnergyCounter
-  getChargeStatus
-  getHealthInfo
 
-  
 Кроме того, IHealth предоставляет следующие новые API-интерфейсы для storaged для получения информации, связанной с хранилищем конкретного поставщика:
-  getStorageInfo
-  getDiskStats
 Новая структура @2.0::HealthInfo возвращается с помощью обратных вызовов и getHealthInfo . Эта структура содержит всю информацию о работоспособности устройства, доступную через Health@2.0 HAL, в том числе:
- Информация о зарядке (переменный ток/USB/беспроводная связь, ток, напряжение и т. д.)
- Информация о батарее (наличие, уровень заряда батареи, ток, напряжение, заряд, технология и т. д.)
- Информация о хранилище (информация об устройстве хранения, статистика диска)
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 .
 Новая структура @2.1::HealthInfo возвращается с помощью обратных вызовов и getHealthInfo_2_1 . Эта структура содержит дополнительную информацию о работоспособности устройства, доступную через Health@2.0 HAL, в том числе:
- Уровень заряда батареи
- Время полной зарядки аккумулятора сейчас (в секундах)
- Расчетная емкость аккумулятора при полном заряде (в мкАч)
Сведения о реализации службы работоспособности см. в разделе Реализация работоспособности .
