diff --git a/Android.bp b/Android.bp
index 3b4bbdd..27dd592 100644
--- a/Android.bp
+++ b/Android.bp
@@ -633,11 +633,13 @@
     ],
     shared_libs: [
         "android.hardware.atrace@1.0",
+        "android.hardware.health-V1-ndk",
         "android.hardware.health@2.0",
         "android.hardware.power.stats-V1-cpp",
         "android.hardware.power.stats@1.0",
         "libbase",
         "libbinder",
+        "libbinder_ndk",
         "libcutils",
         "libhidlbase",
         "libincident",
diff --git a/src/android_internal/BUILD.gn b/src/android_internal/BUILD.gn
index 02d07fb..ed01121 100644
--- a/src/android_internal/BUILD.gn
+++ b/src/android_internal/BUILD.gn
@@ -37,6 +37,7 @@
     ]
     libs = [
       "android.hardware.health@2.0",
+      "android.hardware.health-V1-ndk",
       "android.hardware.power.stats@1.0",
       "android.hardware.power.stats-V1-cpp",
       "android.hardware.atrace@1.0",
@@ -45,6 +46,7 @@
       "cutils",
       "base",
       "binder",
+      "binder_ndk",
       "log",
       "hidlbase",
       "incident",
diff --git a/src/android_internal/health_hal.cc b/src/android_internal/health_hal.cc
index 194cb73..d3e0de0 100644
--- a/src/android_internal/health_hal.cc
+++ b/src/android_internal/health_hal.cc
@@ -16,35 +16,42 @@
 
 #include "src/android_internal/health_hal.h"
 
+#include <android/binder_manager.h>
+#include <aidl/android/hardware/health/IHealth.h>
 #include <android/hardware/health/2.0/IHealth.h>
 #include <healthhalutils/HealthHalUtils.h>
 
 namespace perfetto {
 namespace android_internal {
 
+using HidlHealth = ::android::hardware::health::V2_0::IHealth;
+using ::aidl::android::hardware::health::IHealth;
 using ::android::hardware::Return;
-using ::android::hardware::health::V2_0::IHealth;
 using ::android::hardware::health::V2_0::Result;
 
 namespace {
 
-android::sp<IHealth> g_svc;
+struct HealthService {
+  android::sp<HidlHealth> hidl;
+  std::shared_ptr<IHealth> aidl;
+};
+
+HealthService g_svc;
 
 void ResetService() {
-  g_svc = ::android::hardware::health::V2_0::get_health_service();
+  auto aidl_name = std::string(IHealth::descriptor) + "/default";
+  if (AServiceManager_isDeclared(aidl_name.c_str())) {
+    ndk::SpAIBinder binder(AServiceManager_waitForService(aidl_name.c_str()));
+    g_svc.aidl = IHealth::fromBinder(binder);
+    if (g_svc.aidl != nullptr) {
+      return;
+    }
+  }
+  g_svc.hidl = ::android::hardware::health::V2_0::get_health_service();
 }
 
-}  // namespace
-
-bool GetBatteryCounter(BatteryCounter counter, int64_t* value) {
-  *value = 0;
-  if (!g_svc)
-    ResetService();
-
-  if (!g_svc)
-    return false;
-
-  // The Android VNDK documentation states that for blocking services, the
+bool GetBatteryCounterHidl(BatteryCounter counter, int64_t* value) {
+  // The Android HIDL documentation states that for blocking services, the
   // caller blocks until the reply is received and the callback is called inline
   // in the same thread.
   // See https://source.android.com/devices/architecture/hidl/threading .
@@ -56,7 +63,7 @@
       break;
 
     case BatteryCounter::kCharge:
-      ret = g_svc->getChargeCounter(
+      ret = g_svc.hidl->getChargeCounter(
           [&res, value](Result hal_res, int32_t hal_value) {
             res = hal_res;
             *value = hal_value;
@@ -64,22 +71,23 @@
       break;
 
     case BatteryCounter::kCapacityPercent:
-      ret = g_svc->getCapacity([&res, value](Result hal_res, int32_t hal_value) {
-        res = hal_res;
-        *value = hal_value;
-      });
+      ret = g_svc.hidl->getCapacity(
+          [&res, value](Result hal_res, int32_t hal_value) {
+            res = hal_res;
+            *value = hal_value;
+          });
       break;
 
     case BatteryCounter::kCurrent:
-      ret =
-          g_svc->getCurrentNow([&res, value](Result hal_res, int32_t hal_value) {
+      ret = g_svc.hidl->getCurrentNow(
+          [&res, value](Result hal_res, int32_t hal_value) {
             res = hal_res;
             *value = hal_value;
           });
       break;
 
     case BatteryCounter::kCurrentAvg:
-      ret = g_svc->getCurrentAverage(
+      ret = g_svc.hidl->getCurrentAverage(
           [&res, value](Result hal_res, int32_t hal_value) {
             res = hal_res;
             *value = hal_value;
@@ -88,10 +96,62 @@
   }  // switch(counter)
 
   if (ret.isDeadObject())
-    g_svc.clear();
+    g_svc.hidl.clear();
 
   return ret.isOk() && res == Result::SUCCESS;
 }
 
+bool GetBatteryCounterAidl(BatteryCounter counter, int64_t* value) {
+  ndk::ScopedAStatus status;
+  int32_t value32;
+
+  switch (counter) {
+    case BatteryCounter::kUnspecified:
+      return false;
+
+    case BatteryCounter::kCharge:
+      status = g_svc.aidl->getChargeCounterUah(&value32);
+      break;
+
+    case BatteryCounter::kCapacityPercent:
+      status = g_svc.aidl->getCapacity(&value32);
+      break;
+
+    case BatteryCounter::kCurrent:
+      status = g_svc.aidl->getCurrentNowMicroamps(&value32);
+      break;
+
+    case BatteryCounter::kCurrentAvg:
+      status = g_svc.aidl->getCurrentAverageMicroamps(&value32);
+      break;
+  }  // switch(counter)
+
+  if (status.isOk()) {
+    *value = value32;
+    return true;
+  }
+
+  if (status.getStatus() == STATUS_DEAD_OBJECT)
+    g_svc.aidl.reset();
+
+  return false;
+}
+
+}  // namespace
+
+bool GetBatteryCounter(BatteryCounter counter, int64_t* value) {
+  *value = 0;
+  if (!g_svc.aidl && !g_svc.hidl)
+    ResetService();
+
+  if (!g_svc.aidl && !g_svc.hidl)
+    return false;
+
+  if (g_svc.aidl)
+    return GetBatteryCounterAidl(counter, value);
+
+  return GetBatteryCounterHidl(counter, value);
+}
+
 }  // namespace android_internal
 }  // namespace perfetto
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index 53dfbc0..30cd329 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -106,6 +106,7 @@
     'android',
     'android.hardware.atrace@1.0',
     'android.hardware.health@2.0',
+    'android.hardware.health-V1-ndk',
     'android.hardware.power.stats@1.0',
     "android.hardware.power.stats-V1-cpp",
     'base',
@@ -211,8 +212,9 @@
     'traced_probes': [('required', {
         'libperfetto_android_internal', 'trigger_perfetto', 'traced_perf',
         'mm_events'
-    }),],
-    'libperfetto_android_internal': [('static_libs', {'libhealthhalutils'}),],
+    }), ],
+    'libperfetto_android_internal': [
+        ('static_libs', {'libhealthhalutils'}), ],
     'trace_processor_shell': [
         ('strip', {
             'all': True
@@ -873,9 +875,10 @@
     module.defaults = [defaults_module]
     for lib in target.libs:
       # Generally library names should be mangled as 'libXXX', unless they
-      # are HAL libraries (e.g., android.hardware.health@2.0) or AIDL c++
+      # are HAL libraries (e.g., android.hardware.health@2.0) or AIDL c++ / NDK
       # libraries (e.g. "android.hardware.power.stats-V1-cpp")
-      android_lib = lib if '@' in lib or "-cpp" in lib else 'lib' + lib
+      android_lib = lib if '@' in lib or "-cpp" in lib or "-ndk" in lib \
+        else 'lib' + lib
       if lib in shared_library_allowlist:
         module.add_android_shared_lib(android_lib)
       if lib in static_library_allowlist:
