Use tron for logging hidden API accesses.

Example output:
sysui_multi_action: [757,1391,1392,1,1394,Ldalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime;]
sysui_multi_action: [757,1391,1392,1,1393,1,1394,Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V]

Test: m
Test: $ adb shell settings put global \
Test:     hidden_api_access_log_sampling_rate 65536
Test: $ adb lolcat -b events | grep sysui_multi_action | grep 1390
Bug: 77517571
Merged-In: I23548f902d2ff56ad00534421bf8afa902edaa75
Change-Id: I23548f902d2ff56ad00534421bf8afa902edaa75
(cherry picked from commit 2d4d62f2c4cb6f4a659333263a32f7d94c08fc11)
diff --git a/Android.bp b/Android.bp
index 59f7abf..34a6469 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15,6 +15,7 @@
     "libbase",
     "liblz4",
     "liblzma",
+    "libmetricslogger_static",
 ]
 
 subdirs = [
diff --git a/runtime/Android.bp b/runtime/Android.bp
index 28bee3d..1ef5bf0 100644
--- a/runtime/Android.bp
+++ b/runtime/Android.bp
@@ -397,6 +397,7 @@
         "libbacktrace",
         "liblz4",
         "liblog",
+        "libmetricslogger",
         // For atrace, properties, ashmem, set_sched_policy and socket_peer_is_trusted.
         "libcutils",
         // For common macros.
diff --git a/runtime/hidden_api.cc b/runtime/hidden_api.cc
index e519682..612a930 100644
--- a/runtime/hidden_api.cc
+++ b/runtime/hidden_api.cc
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include <log/log_event_list.h>
+#include <metricslogger/metrics_logger.h>
 
 #include "hidden_api.h"
 
@@ -24,6 +24,12 @@
 #include "thread-current-inl.h"
 #include "well_known_classes.h"
 
+using android::metricslogger::ComplexEventLogger;
+using android::metricslogger::ACTION_HIDDEN_API_ACCESSED;
+using android::metricslogger::FIELD_HIDDEN_API_ACCESS_METHOD;
+using android::metricslogger::FIELD_HIDDEN_API_ACCESS_DENIED;
+using android::metricslogger::FIELD_HIDDEN_API_SIGNATURE;
+
 namespace art {
 namespace hiddenapi {
 
@@ -69,10 +75,6 @@
 
 namespace detail {
 
-// This is the ID of the event log event. It is duplicated from
-// system/core/logcat/event.logtags
-constexpr int EVENT_LOG_TAG_art_hidden_api_access = 20004;
-
 MemberSignature::MemberSignature(ArtField* field) {
   class_name_ = field->GetDeclaringClass()->GetDescriptor(&tmp_);
   member_name_ = field->GetName();
@@ -131,6 +133,25 @@
   LOG(WARNING) << "Accessing hidden " << (type_ == kField ? "field " : "method ")
                << Dumpable<MemberSignature>(*this) << " (" << list << ", " << access_method << ")";
 }
+// Convert an AccessMethod enum to a value for logging from the proto enum.
+// This method may look odd (the enum values are current the same), but it
+// prevents coupling the internal enum to the proto enum (which should never
+// be changed) so that we are free to change the internal one if necessary in
+// future.
+inline static int32_t GetEnumValueForLog(AccessMethod access_method) {
+  switch (access_method) {
+    case kNone:
+      return android::metricslogger::ACCESS_METHOD_NONE;
+    case kReflection:
+      return android::metricslogger::ACCESS_METHOD_REFLECTION;
+    case kJNI:
+      return android::metricslogger::ACCESS_METHOD_JNI;
+    case kLinking:
+      return android::metricslogger::ACCESS_METHOD_LINKING;
+    default:
+      DCHECK(false);
+  }
+}
 
 void MemberSignature::LogAccessToEventLog(AccessMethod access_method, Action action_taken) {
   if (access_method == kLinking) {
@@ -139,20 +160,15 @@
     // not to log these in the event log.
     return;
   }
-  uint32_t flags = 0;
+  ComplexEventLogger log_maker(ACTION_HIDDEN_API_ACCESSED);
+  log_maker.AddTaggedData(FIELD_HIDDEN_API_ACCESS_METHOD, GetEnumValueForLog(access_method));
   if (action_taken == kDeny) {
-    flags |= kAccessDenied;
+    log_maker.AddTaggedData(FIELD_HIDDEN_API_ACCESS_DENIED, 1);
   }
-  if (type_ == kField) {
-    flags |= kMemberIsField;
-  }
-  android_log_event_list ctx(EVENT_LOG_TAG_art_hidden_api_access);
-  ctx << access_method;
-  ctx << flags;
-  ctx << class_name_;
-  ctx << member_name_;
-  ctx << type_signature_;
-  ctx << LOG_ID_EVENTS;
+  std::ostringstream signature_str;
+  Dump(signature_str);
+  log_maker.AddTaggedData(FIELD_HIDDEN_API_SIGNATURE, signature_str.str());
+  log_maker.Record();
 }
 
 template<typename T>
diff --git a/runtime/hidden_api.h b/runtime/hidden_api.h
index 4325496..e117c08 100644
--- a/runtime/hidden_api.h
+++ b/runtime/hidden_api.h
@@ -52,13 +52,11 @@
   kDeny
 };
 
-// Do not change the values of items in this enum, as they are written to the
-// event log for offline analysis. Any changes will interfere with that analysis.
 enum AccessMethod {
-  kNone = 0,  // internal test that does not correspond to an actual access by app
-  kReflection = 1,
-  kJNI = 2,
-  kLinking = 3,
+  kNone,  // internal test that does not correspond to an actual access by app
+  kReflection,
+  kJNI,
+  kLinking,
 };
 
 // Do not change the values of items in this enum, as they are written to the