1Upgrading from health@1.0 HAL 2 30. Remove android.hardware.health@1.0* from PRODUCT_PACKAGES 4 in device/<manufacturer>/<device>/device.mk 5 61. If the device does not have a vendor-specific libhealthd AND does not 7 implement storage-related APIs, just do the following: 8 9 1.1 (recommended) To remove healthd from the build, 10 PRODUCT_PACKAGES += android.hardware.health@2.0-service.override 11 DEVICE_FRAMEWORK_MANIFEST_FILE += \ 12 system/libhidl/vintfdata/manifest_healthd_exclude.xml 13 1.2 To keep healthd in the build, 14 PRODUCT_PACKAGES += android.hardware.health@2.0-service 15 16 Otherwise, continue to Step 2. 17 182. Create directory 19 device/<manufacturer>/<device>/health 20 213. Create device/<manufacturer>/<device>/health/Android.bp 22 (or equivalent device/<manufacturer>/<device>/health/Android.mk) 23 24cc_binary { 25 name: "android.hardware.health@2.0-service.<device>", 26 init_rc: ["android.hardware.health@2.0-service.<device>.rc"], 27 proprietary: true, 28 relative_install_path: "hw", 29 srcs: [ 30 "HealthService.cpp", 31 ], 32 33 cflags: [ 34 "-Wall", 35 "-Werror", 36 ], 37 38 static_libs: [ 39 "android.hardware.health@2.0-impl", 40 "android.hardware.health@1.0-convert", 41 "libhealthservice", 42 "libbatterymonitor", 43 ], 44 45 shared_libs: [ 46 "libbase", 47 "libcutils", 48 "libhidlbase", 49 "libhidltransport", 50 "libutils", 51 "android.hardware.health@2.0", 52 ], 53 54 header_libs: ["libhealthd_headers"], 55 56 // Uncomment the following to remove healthd from the build. 57 // overrides: [ 58 // "healthd", 59 // ], 60} 61 62 3.1 (recommended) To remove healthd from the build, keep "overrides" 63 section, and include the following in device.mk: 64 DEVICE_FRAMEWORK_MANIFEST_FILE += \ 65 system/libhidl/vintfdata/manifest_healthd_exclude.xml 66 3.2 To keep healthd in the build, remove "overrides" section. 67 684. Create device/<manufacturer>/<device>/health/android.hardware.health@2.0-service.<device>.rc 69 70service vendor.health-hal-2-0 /vendor/bin/hw/android.hardware.health@2.0-service.<device> 71 class hal 72 user system 73 group system 74 file /dev/kmsg w 75 765. Create device/<manufacturer>/<device>/health/HealthService.cpp: 77 78#include <health2/service.h> 79int main() { return health_service_main(); } 80 816. libhealthd dependency: 82 836.1 If the device has a vendor-specific libhealthd.<soc>, add it to static_libs. 84 856.2 If the device does not have a vendor-specific libhealthd, add the following 86 lines to HealthService.cpp: 87 88#include <healthd/healthd.h> 89void healthd_board_init(struct healthd_config*) {} 90 91int healthd_board_battery_update(struct android::BatteryProperties*) { 92 // return 0 to log periodic polled battery status to kernel log 93 return 0; 94} 95 967. Storage related APIs: 97 987.1 If the device does not implement IHealth.getDiskStats and 99 IHealth.getStorageInfo, add libstoragehealthdefault to static_libs. 100 1017.2 If the device implements one of these two APIs, add and implement the 102 following functions in HealthService.cpp: 103 104void get_storage_info(std::vector<struct StorageInfo>& info) { 105 // ... 106} 107void get_disk_stats(std::vector<struct DiskStats>& stats) { 108 // ... 109} 110 1118. Update necessary SELinux permissions. For example, 112 113# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts 114/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0 115 116# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te 117# Add device specific permissions to hal_health_default domain, especially 118# if Step 6.1 or Step 7.2 is done. 119