Make awt_bridge a separate lib

This commit is contained in:
Duy Tran Khanh 2021-01-15 20:56:36 +07:00
parent 18823441b7
commit 4f23a9e363
3 changed files with 35 additions and 6 deletions

View File

@ -312,5 +312,6 @@ public class JREUtils
static {
System.loadLibrary("pojavexec");
System.loadLibrary("pojavexec_awt");
}
}

View File

@ -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

View File

@ -1,20 +1,43 @@
#include <jni.h>
#include <assert.h>
#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;
}
}
}