mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2026-04-19 17:17:04 -04:00
Try fix JavaVM and JNIEnv "maze"
This commit is contained in:
@@ -11,28 +11,39 @@ JNIEnv* firstJNIEnv;
|
||||
JavaVM* secondJavaVM;
|
||||
JNIEnv* secondJNIEnv;
|
||||
|
||||
void attachThreadIfNeed(bool* isAttached) {
|
||||
if (!*isAttached && secondJavaVM && secondJNIEnv) {
|
||||
(*secondJavaVM)->AttachCurrentThread(secondJavaVM, &secondJNIEnv, NULL);
|
||||
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
if (dalvikJavaVMPtr_ANDROID == NULL) {
|
||||
//Save dalvik global JavaVM pointer
|
||||
dalvikJavaVMPtr_ANDROID = vm;
|
||||
(*vm)->GetEnv(vm, (void**) &dalvikJNIEnvPtr_ANDROID, JNI_VERSION_1_4);
|
||||
} else if (dalvikJavaVMPtr_ANDROID != vm) {
|
||||
runtimeJavaVMPtr_JRE = vm;
|
||||
(*vm)->GetEnv(vm, (void**) &runtimeJNIEnvPtr_JRE, JNI_VERSION_1_4);
|
||||
}
|
||||
return JNI_VERSION_1_4;
|
||||
}
|
||||
|
||||
void attachThreadIfNeed(bool* isAttached, JNIEnv** secondJNIEnvPtr) {
|
||||
if (!*isAttached && secondJavaVM) {
|
||||
(*secondJavaVM)->AttachCurrentThread(secondJavaVM, secondJNIEnvPtr, NULL);
|
||||
*isAttached = true;
|
||||
}
|
||||
secondJNIEnv = *secondJNIEnvPtr;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendData(JNIEnv* env, jclass clazz, jboolean isAndroid, jint type, jstring data) {
|
||||
if (isAndroid == JNI_TRUE) {
|
||||
firstJavaVM = dalvikJavaVMPtr;
|
||||
firstJNIEnv = dalvikJNIEnvPtr;
|
||||
firstJNIEnv = dalvikJNIEnvPtr_ANDROID;
|
||||
secondJavaVM = runtimeJavaVMPtr;
|
||||
secondJNIEnv = runtimeJNIEnvPtr;
|
||||
|
||||
attachThreadIfNeed(&isAndroidThreadAttached);
|
||||
attachThreadIfNeed(&isAndroidThreadAttached, &runtimeJNIEnvPtr_ANDROID);
|
||||
} else {
|
||||
firstJavaVM = runtimeJavaVMPtr;
|
||||
firstJNIEnv = runtimeJNIEnvPtr;
|
||||
firstJNIEnv = runtimeJNIEnvPtr_JRE;
|
||||
secondJavaVM = dalvikJavaVMPtr;
|
||||
secondJNIEnv = dalvikJNIEnvPtr;
|
||||
|
||||
attachThreadIfNeed(&isRuntimeThreadAttached);
|
||||
attachThreadIfNeed(&isRuntimeThreadAttached, dalvikJNIEnvPtr_JRE);
|
||||
}
|
||||
|
||||
if (secondJavaVM != NULL) {
|
||||
|
||||
@@ -55,27 +55,6 @@ typedef jint JLI_Launch_func(int argc, char ** argv, /* main argc, argc */
|
||||
jint ergo /* ergonomics class policy */
|
||||
);
|
||||
|
||||
jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
||||
{
|
||||
if (dalvikJavaVMPtr == NULL) {
|
||||
//Save dalvik global JavaVM pointer
|
||||
dalvikJavaVMPtr = vm;
|
||||
(*vm)->GetEnv(vm, (void**) &dalvikJNIEnvPtr, JNI_VERSION_1_4);
|
||||
/* Boardwalk: not used
|
||||
LOGD("JNI_OnLoad calling GetEnv()");
|
||||
JNIEnv* env = NULL;
|
||||
(*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4);
|
||||
LOGD("JNI_OnLoad calling initDalvikProxySelectorData()");
|
||||
initDalvikProxySelectorData(env);
|
||||
*/
|
||||
} else if (&dalvikJavaVMPtr != &vm) {
|
||||
runtimeJavaVMPtr = vm;
|
||||
// (*vm)->GetEnv(vm, (void**) &runtimeJNIEnvPtr, JNI_VERSION_1_4);
|
||||
}
|
||||
LOGD("JNI_OnLoad returning()");
|
||||
return JNI_VERSION_1_4;
|
||||
}
|
||||
|
||||
static void logArgs(int argc, char** argv) {
|
||||
/* BlockLauncher: disable logging
|
||||
int i;
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
JavaVM* runtimeJavaVMPtr;
|
||||
JNIEnv* runtimeJNIEnvPtr;
|
||||
JNIEnv* runtimeJNIEnvPtr_ANDROID;
|
||||
JNIEnv* runtimeJNIEnvPtr_JRE;
|
||||
|
||||
JavaVM* dalvikJavaVMPtr;
|
||||
JNIEnv* dalvikJNIEnvPtr;
|
||||
JNIEnv* dalvikJNIEnvPtr_ANDROID;
|
||||
JNIEnv* dalvikJNIEnvPtr_JRE;
|
||||
|
||||
bool isAndroidThreadAttached, isRuntimeThreadAttached;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user