Android Health

Android 9에는 health@1.0 HAL의 주요 버전 업그레이드인 android.hardware.health HAL 2.0이 포함되어 있으며 이 새로운 HAL에는 다음과 같은 장점이 있습니다.

  • 프레임워크와 공급업체 코드 간의 명확한 구분.
  • 불필요한 healthd 데몬 지원 중단.
  • 상태 정보 보고서에서 공급업체 맞춤설정 사항 확대.
  • 배터리뿐 아니라 기기 상태 정보 세부화.

요구사항

Android 9로 출시되는 기기는 2.0 HAL 버전을 제공해야 합니다(1.0 HAL을 제공하면 안 됩니다). Android 9에서 출시되지 않고 벤더 이미지를 Target Framework Compatibility Matrix 버전 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에서 출시된 health HIDL HAL 버전 1.0을 참조하세요.
  • health@2.0: android.hardware.health@2.0의 약어입니다. Android 9에서 출시된 health HIDL HAL 버전 2.0을 참조하세요.
  • charger: 휴대전화 충전 애니메이션이 표시되는 오프 모드 충전으로 실행되는 파일입니다.
  • recovery: 배터리 정보를 검색해야 하는 복구 모드에서 가능한 실행입니다.
  • healthd: Android에서 실행되는 기존 데몬이며, health 관련 정보를 검색하고 이를 프레임워크에 제공합니다.
  • storaged: Android에서 실행되는 데몬이며, 저장소 정보를 검색하여 프레임워크에 제공합니다.

Android 8.x의 Health

Android 8.x에서 health 구성요소는 다음 다이어그램과 같이 작동합니다.

Android 8.x의 Health

그림 1. Android 8.x의 Health

이 다이어그램에서,

  • 프레임워크는 하드웨어와 통신하기 위해 바인더 호출 1개와 hwbinder 호출 1개를 사용합니다.
  • healthdlibhealthd_android, libbatterymonitorlibbatteryservice에 정적으로 연결됩니다.
  • health@1.0-impl이 libhealthd.BOARD에 정적으로 연결됩니다.

각 보드는 다른 libhealthd.BOARD를 맞춤설정할 수 있으므로 빌드할 때 charger, health@1.0-impl 및 복구 링크가 결정됩니다.

기타 모드:

Android 8.x의 오프 모드 충전 및 복구 모드

그림 2. Android 8.x의 Health, 오프 모드 충전 및 복구 모드

  • charger는 libhealthd.BOARD, libhealthd_chargerlibbatterymonitor에 정적으로 연결됩니다.
  • recovery는 libhealthd.BOARDlibbatterymonitor에 정적으로 연결됩니다.

Android 9의 Health

Android 9에서 health 구성요소는 다음 다이어그램과 같이 작동합니다. Android 9의 Health

그림 3. Android 9의 Health

프레임워크는 hwservicemanager에서 health@2.0 서비스를 검색하려고 시도합니다. 실패하면 Android 8.x에서 health@1.0을 호출합니다. Android 9 시스템 이미지가 Android 8.x 공급업체 이미지와 호환되도록 기존 코드 경로가 보관됩니다. 기기에 하나의 서비스 버전(1.0 또는 2.0)만 존재할 수 있으므로 프레임워크는 두 개의 HAL 모두에서 정보를 검색하지 않습니다.

기타 모드

Android 8.x의 오프 모드 충전 및 복구 모드

그림 4. Android 9의 Health, 오프 모드 충전 및 복구 모드

HAL 인터페이스

health@2.0 HAL은 프레임워크에 이전 healthd 데몬과 동일한 기능을 제공합니다. 또한 이전에 바인더 서비스로 제공된 healthd와 유사한 API도 제공합니다(예: IBatteryPropertiesRegistrar).

기본 인터페이스인 IHealth는 다음 함수를 제공합니다.

  • registerCallbackIBatteryPropertiesRegistrar.registerListener를 대체합니다.
  • unregisterCallbackIBatteryPropertiesRegistrar.unregisterListener를 대체합니다.
  • updateIBatteryPropertiesRegistrar.scheduleUpdate를 대체합니다.
  • IBatteryPropertiesRegistrar.getProperties는 다음으로 대체됩니다.
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

또한 IHealthstoraged에서 공급업체별 저장소 관련 정보를 검색할 수 있도록 다음의 새로운 API를 제공합니다.

  • getStorageInfo
  • getDiskStats

@2.0::HealthInfo라는 새로운 구조체가 콜백 및 getHealthInfo를 통해 반환됩니다. 이 구조체에는 다음을 포함하여 health@2.0 HAL을 통해 사용 가능한 모든 기기 health 정보가 포함됩니다.

  • 충전 정보(AC/USB/무선, 전류, 전압 등)
  • 배터리 정보(존재 여부, 배터리 수준, 전류, 전압, 충전, 기술 등)
  • 저장소 정보(저장소 장치 정보, 디스크 통계)

Health 서비스를 구현하는 것에 대한 자세한 내용은 Health 구현을 참조하세요.