From 4f23a9e363551274e1a5085e454ffb1e61d8dddc Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Fri, 15 Jan 2021 20:56:36 +0700 Subject: [PATCH] Make awt_bridge a separate lib --- .../net/kdt/pojavlaunch/utils/JREUtils.java | 1 + app_pojavlauncher/src/main/jni/Android.mk | 7 +++- app_pojavlauncher/src/main/jni/awt_bridge.c | 33 ++++++++++++++++--- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 4c0816ce2..62b7864aa 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -312,5 +312,6 @@ public class JREUtils static { System.loadLibrary("pojavexec"); + System.loadLibrary("pojavexec_awt"); } } diff --git a/app_pojavlauncher/src/main/jni/Android.mk b/app_pojavlauncher/src/main/jni/Android.mk index 5d61df649..49b18a822 100644 --- a/app_pojavlauncher/src/main/jni/Android.mk +++ b/app_pojavlauncher/src/main/jni/Android.mk @@ -14,13 +14,18 @@ LOCAL_MODULE := pojavexec # LOCAL_CFLAGS += -DDEBUG # -DGLES_TEST LOCAL_SRC_FILES := \ - awt_bridge.c \ egl_bridge.c \ input_bridge_v3.c \ jre_launcher.c \ utils.c include $(BUILD_SHARED_LIBRARY) +include $(CLEAR_VARS) +LOCAL_MODULE := pojavexec_awt +LOCAL_SRC_FILES := \ + awt_bridge.c +include $(BUILD_SHARED_LIBRARY) + # Helper to get current thread # include $(CLEAR_VARS) # LOCAL_MODULE := thread64helper diff --git a/app_pojavlauncher/src/main/jni/awt_bridge.c b/app_pojavlauncher/src/main/jni/awt_bridge.c index cf7ace771..2a05d472c 100644 --- a/app_pojavlauncher/src/main/jni/awt_bridge.c +++ b/app_pojavlauncher/src/main/jni/awt_bridge.c @@ -1,20 +1,43 @@ #include #include -#include "log.h" -#include "utils.h" +static JavaVM* dalvikJavaVMPtr; +static JNIEnv* dalvikJNIEnvPtr_ANDROID; +static JNIEnv* dalvikJNIEnvPtr_JRE; -// jclass class_awt; -// jmethodID method_awt; +static JavaVM* runtimeJavaVMPtr; +static JNIEnv* runtimeJNIEnvPtr_ANDROID; +static JNIEnv* runtimeJNIEnvPtr_JRE; + +jint JNI_OnLoad(JavaVM* vm, void* reserved) { + if (dalvikJavaVMPtr == NULL) { + //Save dalvik global JavaVM pointer + dalvikJavaVMPtr = vm; + (*vm)->GetEnv(vm, (void**) &dalvikJNIEnvPtr_ANDROID, JNI_VERSION_1_4); + + isUseStackQueueCall = JNI_FALSE; + } else if (dalvikJavaVMPtr != vm) { + runtimeJavaVMPtr = vm; + (*vm)->GetEnv(vm, (void**) &runtimeJNIEnvPtr_JRE, JNI_VERSION_1_4); + } + + isGrabbing = JNI_FALSE; + + return JNI_VERSION_1_4; +} // TODO: check for memory leaks // int printed = 0; +int threadAttached = 0; JNIEXPORT jintArray JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_renderAWTScreenFrame(JNIEnv* env, jclass clazz /*, jobject canvas, jint width, jint height */) { if (runtimeJNIEnvPtr_ANDROID == NULL) { if (runtimeJavaVMPtr == NULL) { return NULL; } else { - (*runtimeJavaVMPtr)->AttachCurrentThread(runtimeJavaVMPtr, &runtimeJNIEnvPtr_ANDROID, NULL); + if (threadAttached == 0) { + (*runtimeJavaVMPtr)->AttachCurrentThread(runtimeJavaVMPtr, &runtimeJNIEnvPtr_ANDROID, NULL); + threadAttached = 1; + } } }