diff --git a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp index 9e1cc70738..3c353e6a78 100644 --- a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp +++ b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp @@ -25,7 +25,26 @@ namespace health { namespace V2_0 { sp get_health_service() { - for (auto&& instanceName : {"default", "backup"}) { + // For the core and vendor variant, the "backup" instance points to healthd, + // which is removed. + // For the recovery variant, the "backup" instance has a different + // meaning. It points to android.hardware.health@2.0-impl-default.recovery + // which was assumed by OEMs to be always installed when a + // vendor-specific libhealthd is not necessary. Hence, its behavior + // is kept. See health/2.0/README.md. + // android.hardware.health@2.0-impl-default.recovery, and subsequently the + // special handling of recovery mode below, can be removed once health@2.1 + // is the minimum required version (i.e. compatibility matrix level 5 is the + // minimum supported level). Health 2.1 requires OEMs to install the + // implementation to the recovery partition when it is necessary (i.e. on + // non-A/B devices, where IsBatteryOk() is needed in recovery). + for (auto&& instanceName : +#ifdef __ANDROID_RECOVERY__ + { "default", "backup" } +#else + {"default"} +#endif + ) { auto ret = IHealth::getService(instanceName); if (ret != nullptr) { return ret;