diff --git a/app/internal/window/os_android.c b/app/internal/window/os_android.c index 8d0c9588..63448e9b 100644 --- a/app/internal/window/os_android.c +++ b/app/internal/window/os_android.c @@ -10,8 +10,6 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { return -1; } - setJVM(vm); - jclass viewClass = (*env)->FindClass(env, "org/gioui/GioView"); if (viewClass == NULL) { return -1; @@ -105,6 +103,10 @@ jint gio_jni_GetEnv(JavaVM *vm, JNIEnv **env, jint version) { return (*vm)->GetEnv(vm, (void **)env, version); } +jint gio_jni_GetJavaVM(JNIEnv *env, JavaVM **jvm) { + return (*env)->GetJavaVM(env, jvm); +} + jint gio_jni_AttachCurrentThread(JavaVM *vm, JNIEnv **p_env, void *thr_args) { return (*vm)->AttachCurrentThread(vm, p_env, thr_args); } diff --git a/app/internal/window/os_android.go b/app/internal/window/os_android.go index ae47a6ed..85b46ad8 100644 --- a/app/internal/window/os_android.go +++ b/app/internal/window/os_android.go @@ -88,6 +88,9 @@ func jniGetStaticMethodID(env *C.JNIEnv, class C.jclass, method, sig string) C.j //export runGoMain func runGoMain(env *C.JNIEnv, class C.jclass, jdataDir C.jbyteArray, context C.jobject) { + if res := C.gio_jni_GetJavaVM(env, &theJVM); res != 0 { + panic("gio: GetJavaVM failed") + } dirBytes := C.gio_jni_GetByteArrayElements(env, jdataDir) if dirBytes == nil { panic("runGoMain: GetByteArrayElements failed") @@ -113,11 +116,6 @@ func GetDataDir() string { return <-dataDirChan } -//export setJVM -func setJVM(vm *C.JavaVM) { - theJVM = vm -} - //export onCreateView func onCreateView(env *C.JNIEnv, class C.jclass, view C.jobject) C.jlong { view = C.gio_jni_NewGlobalRef(env, view) diff --git a/app/internal/window/os_android.h b/app/internal/window/os_android.h index 321d7596..db34ad3b 100644 --- a/app/internal/window/os_android.h +++ b/app/internal/window/os_android.h @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Unlicense OR MIT __attribute__ ((visibility ("hidden"))) jint gio_jni_GetEnv(JavaVM *vm, JNIEnv **env, jint version); +__attribute__ ((visibility ("hidden"))) jint gio_jni_GetJavaVM(JNIEnv *env, JavaVM **jvm); __attribute__ ((visibility ("hidden"))) jint gio_jni_AttachCurrentThread(JavaVM *vm, JNIEnv **p_env, void *thr_args); __attribute__ ((visibility ("hidden"))) jint gio_jni_DetachCurrentThread(JavaVM *vm);