mirror of
https://github.com/netbirdio/gomobile-tvos-fork.git
synced 2026-05-22 18:43:29 -07:00
bind/java: Do not get ApplicationContext via reflection, ask for it when needed.
Previously any library created using gobind used reflection to get the ApplicationContext. The methods used are disallowed in Android 9 causing any library to crash. However the ApplictionContext is not required and only needed when using RunOnJvm. This change adds an method to set the ApplicationContext when needed, but will not get it by default by using reflection. Fixes #31364 Change-Id: I83ce69f3b4b59d2cc4a275928f0439e5e4651ba8 GitHub-Last-Rev: b563af1d7fa8f4b3e62751ce9a78c8e2f291d232 GitHub-Pull-Request: golang/mobile#31 Reviewed-on: https://go-review.googlesource.com/c/mobile/+/175103 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
committed by
Hyang-Ah Hana Kim
parent
6fa95d984e
commit
e47acb2ca7
+8
-13
@@ -4,6 +4,8 @@
|
||||
|
||||
package go;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import java.lang.ref.PhantomReference;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
@@ -32,23 +34,16 @@ public class Seq {
|
||||
private static final GoRefQueue goRefQueue = new GoRefQueue();
|
||||
|
||||
static {
|
||||
// Look for the shim class auto-generated by gomobile bind.
|
||||
// Its only purpose is to call System.loadLibrary.
|
||||
try {
|
||||
Class loadJNI = Class.forName("go.LoadJNI");
|
||||
setContext(loadJNI.getDeclaredField("ctx").get(null));
|
||||
} catch (ClassNotFoundException e) {
|
||||
// Ignore, assume the user will load JNI for it.
|
||||
log.warning("LoadJNI class not found");
|
||||
} catch (NoSuchFieldException e) {
|
||||
log.severe("LoadJNI class missing field: " + e);
|
||||
} catch (IllegalAccessException e) {
|
||||
log.severe("LoadJNI class bad field: " + e);
|
||||
}
|
||||
System.loadLibrary("gojni");
|
||||
init();
|
||||
Universe.touch();
|
||||
}
|
||||
|
||||
// setContext sets the context in the go-library to be used in RunOnJvm.
|
||||
public static void setContext(Context context) {
|
||||
setContext((java.lang.Object)context);
|
||||
}
|
||||
|
||||
private static native void init();
|
||||
|
||||
// Empty method to run class initializer
|
||||
|
||||
Reference in New Issue
Block a user