mirror of
https://github.com/netbirdio/gomobile-tvos-fork.git
synced 2026-05-22 18:43:29 -07:00
bind: handle ClassNotFoundExceptions on older Androids
If a wrapped Java class is missing at runtime, for example because the app is running on an older Android version, the resulting class not found exception would cause the app to crash. Fix it by ignoring missing classes, allowing the app to avoid using them according to a runtime version check. Change-Id: I9138c4e2a905b180959306ecbb997695236ab273 Reviewed-on: https://go-review.googlesource.com/35853 Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Vendored
+29
-17
@@ -19,23 +19,35 @@ static jmethodID m_java_lang_Character_Subset_toString;
|
||||
void init_proxies() {
|
||||
JNIEnv *env = go_seq_push_local_frame(6);
|
||||
jclass clazz;
|
||||
clazz = (*env)->FindClass(env, "java/lang/Float");
|
||||
class_java_lang_Float = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Float_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
clazz = (*env)->FindClass(env, "java/lang/Long");
|
||||
class_java_lang_Long = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Long_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
clazz = (*env)->FindClass(env, "java/lang/Object");
|
||||
class_java_lang_Object = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Object_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
clazz = (*env)->FindClass(env, "java/lang/Runnable");
|
||||
class_java_lang_Runnable = (*env)->NewGlobalRef(env, clazz);
|
||||
clazz = (*env)->FindClass(env, "java/lang/Character");
|
||||
class_java_lang_Character = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Character_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
clazz = (*env)->FindClass(env, "java/lang/Character$Subset");
|
||||
class_java_lang_Character_Subset = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Character_Subset_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
clazz = go_seq_find_class("java/lang/Float");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Float = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Float_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
}
|
||||
clazz = go_seq_find_class("java/lang/Long");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Long = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Long_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
}
|
||||
clazz = go_seq_find_class("java/lang/Object");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Object = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Object_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
}
|
||||
clazz = go_seq_find_class("java/lang/Runnable");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Runnable = (*env)->NewGlobalRef(env, clazz);
|
||||
}
|
||||
clazz = go_seq_find_class("java/lang/Character");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Character = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Character_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
}
|
||||
clazz = go_seq_find_class("java/lang/Character$Subset");
|
||||
if (clazz != NULL) {
|
||||
class_java_lang_Character_Subset = (*env)->NewGlobalRef(env, clazz);
|
||||
m_java_lang_Character_Subset_toString = go_seq_get_method_id(clazz, "toString", "()Ljava/lang/String;");
|
||||
}
|
||||
go_seq_pop_local_frame(env);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user