Drop dependency on libnativehelper

Pending changes to libnativehelper API mean modules should not depend
on it as a stable API.

Bug: 157711673
Test: atest FrameworkStatsdTest LibStatsPullTests
Change-Id: I708a1489b5a1e30185b7e3677393c446074dc96c
diff --git a/apex/statsd/Android.bp b/apex/statsd/Android.bp
index 15d7495..e75fa88 100644
--- a/apex/statsd/Android.bp
+++ b/apex/statsd/Android.bp
@@ -62,8 +62,8 @@
 cc_library_shared {
     name: "libstats_jni",
     srcs: ["jni/**/*.cpp"],
+    header_libs: ["libnativehelper_header_only"],
     shared_libs: [
-        "libnativehelper", // Has stable abi - should not be copied into apex.
         "liblog",  // Has a stable abi - should not be copied into apex.
         "libstatssocket",
     ],
diff --git a/apex/statsd/jni/android_util_StatsLog.cpp b/apex/statsd/jni/android_util_StatsLog.cpp
index 9d410eb..71ce949 100644
--- a/apex/statsd/jni/android_util_StatsLog.cpp
+++ b/apex/statsd/jni/android_util_StatsLog.cpp
@@ -17,9 +17,9 @@
 #define LOG_NAMESPACE "StatsLog.tag."
 #define LOG_TAG "StatsLog_println"
 
-#include "jni.h"
+#include <jni.h>
 #include <log/log.h>
-#include <nativehelper/JNIHelp.h>
+#include <nativehelper/scoped_local_ref.h>
 #include "stats_buffer_writer.h"
 
 namespace android {
@@ -54,8 +54,23 @@
 
 int register_android_util_StatsLog(JNIEnv* env)
 {
-    return jniRegisterNativeMethods(env, "android/util/StatsLog", gMethods, NELEM(gMethods));
+    static const char* kStatsLogClass = "android/util/StatsLog";
+
+    ScopedLocalRef<jclass> cls(env, env->FindClass(kStatsLogClass));
+    if (cls.get() == nullptr) {
+        ALOGE("jni statsd registration failure, class not found '%s'", kStatsLogClass);
+        return JNI_ERR;
+    }
+
+    const jint count = sizeof(gMethods) / sizeof(gMethods[0]);
+    int status = env->RegisterNatives(cls.get(), gMethods, count);
+    if (status < 0) {
+        ALOGE("jni statsd registration failure, status: %d", status);
+        return JNI_ERR;
+    }
+    return JNI_VERSION_1_4;
 }
+
 }; // namespace android
 
 /*
@@ -63,7 +78,6 @@
  */
 jint JNI_OnLoad(JavaVM* jvm, void* reserved) {
     JNIEnv* e;
-    int status;
 
     ALOGV("statsd : loading JNI\n");
     // Check JNI version
@@ -71,10 +85,6 @@
         ALOGE("JNI version mismatch error");
         return JNI_ERR;
     }
-    status = android::register_android_util_StatsLog(e);
-    if (status < 0) {
-        ALOGE("jni statsd registration failure, status: %d", status);
-        return JNI_ERR;
-    }
-    return JNI_VERSION_1_4;
+
+    return android::register_android_util_StatsLog(e);
 }