Fix ACameraMetadata_fromCameraMetadata crash.

Root cause was that jclass instances acquired from JNIEnv::FindClass are
not pinned and become invalidated due to Java garbage collection. Adding
a new global ref pins the pointer.

FIXED=148174094

Test: atest android.hardware.camera2.cts.CameraManagerTest#testCameraCharacteristicsNdkFromSdk android.hardware.camera2.cts.CaptureResultTest#testCameraCaptureResultAllKeys
Test: atest NativeCameraDeviceTest NativeCameraManagerTest NativeImageReaderTest NativeStillCaptureTest

Change-Id: Id0601b9c01e1a58485e3b039a87a5cf56a19e0af
diff --git a/camera/ndk/NdkCameraMetadata.cpp b/camera/ndk/NdkCameraMetadata.cpp
index 99691ed..1fec3e1 100644
--- a/camera/ndk/NdkCameraMetadata.cpp
+++ b/camera/ndk/NdkCameraMetadata.cpp
@@ -50,24 +50,31 @@
         if (cameraMetadataClazz == nullptr) {
             return false;
         }
-        android_hardware_camera2_CameraMetadata_getNativeMetadataPtr =
+        const jmethodID cameraMetadata_getNativeMetadataPtr =
             env->GetMethodID(cameraMetadataClazz, "getNativeMetadataPtr", "()J");
-        if (android_hardware_camera2_CameraMetadata_getNativeMetadataPtr == nullptr) {
+        if (cameraMetadata_getNativeMetadataPtr == nullptr) {
             return false;
         }
 
-        android_hardware_camera2_CameraCharacteristics_clazz = env->FindClass(
+        const jclass cameraCharacteristics_clazz = env->FindClass(
             android_hardware_camera2_CameraCharacteristics_jniClassName);
-        if (android_hardware_camera2_CameraCharacteristics_clazz == nullptr) {
+        if (cameraCharacteristics_clazz == nullptr) {
             return false;
         }
 
-        android_hardware_camera2_CaptureResult_clazz = env->FindClass(
+        const jclass captureResult_clazz = env->FindClass(
             android_hardware_camera2_CaptureResult_jniClassName);
-        if (android_hardware_camera2_CaptureResult_clazz == nullptr) {
+        if (captureResult_clazz == nullptr) {
             return false;
         }
 
+        android_hardware_camera2_CameraMetadata_getNativeMetadataPtr =
+            cameraMetadata_getNativeMetadataPtr;
+        android_hardware_camera2_CameraCharacteristics_clazz =
+            static_cast<jclass>(env->NewGlobalRef(cameraCharacteristics_clazz));
+        android_hardware_camera2_CaptureResult_clazz =
+            static_cast<jclass>(env->NewGlobalRef(captureResult_clazz));
+
         return true;
     }();
     return ok;