mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-19 01:27:18 -04:00
Fix crash
This commit is contained in:
parent
e9b231b866
commit
389919d81a
@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
jclass inputBridgeClass;
|
jclass inputBridgeClass_ANDROID;
|
||||||
jmethodID inputBridgeMethod;
|
jmethodID inputBridgeMethod_ANDROID;
|
||||||
|
|
||||||
|
jclass inputBridgeClass_JRE;
|
||||||
|
jmethodID inputBridgeMethod_JRE;
|
||||||
|
|
||||||
JavaVM* firstJavaVM;
|
JavaVM* firstJavaVM;
|
||||||
JNIEnv* firstJNIEnv;
|
JNIEnv* firstJNIEnv;
|
||||||
@ -31,6 +34,13 @@ void attachThreadIfNeed(bool* isAttached, JNIEnv** secondJNIEnvPtr) {
|
|||||||
secondJNIEnv = *secondJNIEnvPtr;
|
secondJNIEnv = *secondJNIEnvPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getJavaInputBridge(jclass* clazz, jmethod* method) {
|
||||||
|
if (*method == NULL) {
|
||||||
|
*clazz = (*secondJNIEnv)->FindClass(secondJNIEnv, "org/lwjgl/glfw/CallbackBridge");
|
||||||
|
*method = (*secondJNIEnv)->GetStaticMethodID(secondJNIEnv, *clazz, "receiveCallback", "(ILjava/lang/String;)V");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendData(JNIEnv* env, jclass clazz, jboolean isAndroid, jint type, jstring data) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendData(JNIEnv* env, jclass clazz, jboolean isAndroid, jint type, jstring data) {
|
||||||
if (isAndroid == JNI_TRUE) {
|
if (isAndroid == JNI_TRUE) {
|
||||||
firstJavaVM = dalvikJavaVMPtr;
|
firstJavaVM = dalvikJavaVMPtr;
|
||||||
@ -38,12 +48,14 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendData(JNIEnv*
|
|||||||
secondJavaVM = runtimeJavaVMPtr;
|
secondJavaVM = runtimeJavaVMPtr;
|
||||||
|
|
||||||
attachThreadIfNeed(&isAndroidThreadAttached, &runtimeJNIEnvPtr_ANDROID);
|
attachThreadIfNeed(&isAndroidThreadAttached, &runtimeJNIEnvPtr_ANDROID);
|
||||||
|
getJavaInputBridge(&inputBridgeClass_ANDROID, &inputBridgeMethod_ANDROID);
|
||||||
} else {
|
} else {
|
||||||
firstJavaVM = runtimeJavaVMPtr;
|
firstJavaVM = runtimeJavaVMPtr;
|
||||||
firstJNIEnv = runtimeJNIEnvPtr_JRE;
|
firstJNIEnv = runtimeJNIEnvPtr_JRE;
|
||||||
secondJavaVM = dalvikJavaVMPtr;
|
secondJavaVM = dalvikJavaVMPtr;
|
||||||
|
|
||||||
attachThreadIfNeed(&isRuntimeThreadAttached, &dalvikJNIEnvPtr_JRE);
|
attachThreadIfNeed(&isRuntimeThreadAttached, &dalvikJNIEnvPtr_JRE);
|
||||||
|
getJavaInputBridge(&inputBridgeClass_JRE, &inputBridgeMethod_JRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("isAndroid=%p, isSecondJVMNull=%p\n", isAndroid, secondJavaVM == NULL);
|
// printf("isAndroid=%p, isSecondJVMNull=%p\n", isAndroid, secondJavaVM == NULL);
|
||||||
@ -53,12 +65,13 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendData(JNIEnv*
|
|||||||
// printf("data=%s\n", data_c);
|
// printf("data=%s\n", data_c);
|
||||||
jstring data_jre = (*secondJNIEnv)->NewStringUTF(secondJNIEnv, data_c);
|
jstring data_jre = (*secondJNIEnv)->NewStringUTF(secondJNIEnv, data_c);
|
||||||
(*env)->ReleaseStringUTFChars(env, data, data_c);
|
(*env)->ReleaseStringUTFChars(env, data, data_c);
|
||||||
|
(*secondJNIEnv)->CallStaticVoidMethod(
|
||||||
if (inputBridgeMethod == NULL) {
|
secondJNIEnv,
|
||||||
inputBridgeClass = (*secondJNIEnv)->FindClass(secondJNIEnv, "org/lwjgl/glfw/CallbackBridge");
|
isAndroid == JNI_TRUE ? inputBridgeClass_ANDROID : inputBridgeClass_JRE,
|
||||||
inputBridgeMethod = (*secondJNIEnv)->GetStaticMethodID(secondJNIEnv, inputBridgeClass, "receiveCallback", "(ILjava/lang/String;)V");
|
isAndroid == JNI_TRUE ? inputBridgeMethod_ANDROID : inputBridgeMethod_JRE,
|
||||||
}
|
type,
|
||||||
(*secondJNIEnv)->CallStaticVoidMethod(secondJNIEnv, inputBridgeClass, inputBridgeMethod, type, data_jre);
|
data_jre
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// else: too early!
|
// else: too early!
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user