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, но планирующие обновить образ поставщика до Target Framework Compatibility Matrix версии 5 (выпущенной в Android 11) или 6 (выпущенной в Android 12), должны удалить существующие реализации 2.0 HAL и предоставить 2.1 HAL или AIDL HAL. Устройствам, не запускаемым с Android 11 и не планирующим обновлять образ поставщика, также рекомендуется предоставлять 2.1 или AIDL HAL.
AOSP включает в себя несколько вспомогательных библиотек, призванных помочь вам реализовать HAL 2.1 и перейти со старых HAL HIDL.
Устройства под управлением Android 13 и выше
Устройства, запускаемые с Android 13, должны предоставлять AIDL HAL (и не должны предоставлять HIDL HAL). Устройства, не запускаемые с Android 13, но планирующие обновить образ поставщика до Target Framework Compatibility Matrix Version 7 (выпущенной в Android 13), должны удалить существующие реализации HIDL HAL и предоставить AIDL HAL. Устройствам, не запускаемым с Android 13 и не планирующим обновлять образ поставщика, также рекомендуется предоставлять AIDL HAL.
AOSP включает в себя несколько вспомогательных библиотек, призванных помочь вам реализовать AIDL HAL и перейти от старых HIDL HAL.
Терминология
Ниже приведены термины, которые вам следует знать перед прочтением остальной части документации по работоспособности системы Android:
- здоровье@2.1
- Сокращение от
android.hardware.health@2.1
. Версия 1 HIDL здоровья была выпущена в Android 11. - здоровье AIDL HAL
- Сокращение от
android.hardware.health
. Версия 1 AIDL HAL для здоровья была выпущена в Android 13. - зарядное устройство
- Исполняемый файл, работающий в режиме выключенной зарядки, который отображает анимацию зарядки телефона.
- восстановление
- Исполняемый файл, работающий в режиме восстановления, который должен получить информацию о батарее.
- сохраненный
- Демон, который извлекает информацию из хранилища и предоставляет ее фреймворку.
Здоровье в 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. Инфраструктура здравоохранения HIDL HAL 2.1.
Здоровье в Android 13
В Android 13 представлен компонент Health AIDL HAL. На рисунке 2 подробно описано, как работает компонент Health:
Рисунок 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
.
Новая структура @2.1::HealthInfo
возвращается с помощью обратных вызовов и getHealthInfo_2_1
. Эта структура содержит дополнительную информацию о состоянии устройства, доступную через health@2.0 HAL, включая:
- Уровень емкости аккумулятора
- Время полной зарядки аккумулятора (в секундах)
- Расчетная емкость полного заряда аккумулятора (в мкАч)
На рисунке 3 показана UML-диаграмма классов, полезных для реализации HAL для здоровья:
Рисунок 3. UML-диаграмма Health HAL 2.1.
Информацию о внедрении услуги «Здоровье» 2.1 см. в разделе Внедрение «Здоровье» 2.1 .
Интерфейс AIDL HAL версии 1
В этом разделе содержится информация об интерфейсе AIDL HAL версии 1.
Изменения API
HAL версии AIDL 1 поддерживает API, аналогичные HAL HIDL 2.1. По сравнению с интерфейсом HIDL 2.1 в API изменено следующее:
- API, связанные с зарядным устройством, представленные в HIDL HAL 2.1, не перенесены в AIDL HAL. Поскольку функциональность зарядки в режиме off-mode существует только в разделе
/vendor
, API в интерфейсе Vendor не нужны. Чтобы правильно реализовать зарядку в режиме off-mode, см. раздел chargeer . - Тип
StorageAttribute
и связанные с ним поля удалены, поскольку они не используются. - В
HealthInfo
добавленаchargerDockOnline
для поддержки зарядки через док-станцию.
Выполнение
На рисунке 4 показана UML-диаграмма классов, полезных для реализации AIDL HAL в области здравоохранения:
Рисунок 4. Диаграмма UML Health AIDL HAL.
Информацию о внедрении службы AIDL для здравоохранения см. в разделе Внедрение HAL для здравоохранения AIDL .
Восстановление
Android 13 поддерживает binder в режиме восстановления. Установка службы Health AIDL в режиме восстановления позволяет ей работать в режиме восстановления.
Информацию об установке службы AIDL для восстановления работоспособности см. в следующих разделах:
Зарядное устройство
Функциональность зарядки в режиме off-mode перемещена из /system
в /vendor
. Для устройств, запускаемых с Android 13, если они поддерживают зарядку в режиме off-mode, двоичный файл службы HAL должен поддерживать режим зарядного устройства. Для этого см. раздел «Реализация зарядного устройства» .
Свойства системы зарядного устройства
Свойства ro.charger.*
больше не читаются двоичным файлом charger
в /vendor
. Если на вашем устройстве установлены какие-либо системные свойства ro.charger.*
, обратитесь к системным свойствам для зарядного устройства .