diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index dbec8e093..438a6ccd8 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -1943,4 +1943,6 @@ public final class Tools { */ public static native void initializeControllerSubsystems(); } + public static native String jObjectToString(Object object); + public static native long getJavaVMPointer(); } 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 3e6e3dbeb..d7be8905b 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 @@ -267,6 +267,9 @@ public class JREUtils { envMap.put("POJAV_LOAD_TURNIP", "1"); } + envMap.put("DALVIK_APPLICATION", Tools.jObjectToString(activity.getApplication())); + envMap.put("DALVIK_JAVAVM", String.valueOf(Tools.getJavaVMPointer())); + readCustomEnv(envMap); // Must be last so it overrides anything the user sets for obvious reasons. for (Map.Entry env : envMap.entrySet()) { diff --git a/app_pojavlauncher/src/main/jni/utils.c b/app_pojavlauncher/src/main/jni/utils.c index 873ef3b63..aaf03e6d6 100644 --- a/app_pojavlauncher/src/main/jni/utils.c +++ b/app_pojavlauncher/src/main/jni/utils.c @@ -200,3 +200,30 @@ JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_executeForkedBina } */ +// WARNING: This does not release the global ref, this can be a memory leak +JNIEXPORT jstring JNICALL +Java_net_kdt_pojavlaunch_Tools_jObjectToString(JNIEnv *env, jclass clazz, jobject object) { + if (object == NULL) { + return NULL; + } + + jobject globalRef = (*env)->NewGlobalRef(env, object); + if (globalRef == NULL) { + return NULL; + } + + char buf[32]; + snprintf(buf, sizeof(buf), "%p", globalRef); + + return (*env)->NewStringUTF(env, buf); +} + +JNIEXPORT jlong JNICALL +Java_net_kdt_pojavlaunch_Tools_getJavaVMPointer(JNIEnv *env, jclass clazz) { + JavaVM *vm; + if ((*env)->GetJavaVM(env, &vm) != JNI_OK) { + return -1; + } + + return (jlong)(uintptr_t)vm; +} \ No newline at end of file