Be sure to clear exceptions after a failed JNI lookup (flutter/engine#44293)

In the case that methods don't exist because we are running on an old
Android SDK, clear the exception that the failed JNI lookup threw.
This commit is contained in:
John McCutchan 2023-08-02 13:10:20 -07:00 committed by GitHub
parent dedec555f2
commit 32135ec2e0

View File

@ -1185,6 +1185,9 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
return false;
}
// Ensure we don't have any pending exceptions.
FML_CHECK(fml::jni::CheckException(env));
g_image_get_hardware_buffer_method =
env->GetMethodID(g_image_class->obj(), "getHardwareBuffer",
"()Landroid/hardware/HardwareBuffer;");
@ -1193,6 +1196,7 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
FML_LOG(WARNING) << "Could not locate getHardwareBuffer on "
"android.media.Image";
// Continue on as this method may not exist at API <= 29.
fml::jni::ClearException(env);
}
g_image_close_method = env->GetMethodID(g_image_class->obj(), "close", "()V");
@ -1202,6 +1206,8 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
return false;
}
// Ensure we don't have any pending exceptions.
FML_CHECK(fml::jni::CheckException(env));
g_hardware_buffer_class = new fml::jni::ScopedJavaGlobalRef<jclass>(
env, env->FindClass("android/hardware/HardwareBuffer"));
@ -1212,6 +1218,7 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
FML_LOG(WARNING)
<< "Could not locate android.hardware.HardwareBuffer class";
// Continue on as this class may not exist at API <= 26.
fml::jni::ClearException(env);
}
g_compute_platform_resolved_locale_method = env->GetMethodID(