From 6c5759d5b38fb6f4072f3a470e253eda5c119bcb Mon Sep 17 00:00:00 2001 From: tomikun <60690056+alexytomi@users.noreply.github.com> Date: Thu, 30 Jul 2026 19:02:11 +0800 Subject: [PATCH 1/2] feat: Set env var for Dalvik JavaVM* For use primarily by mods who want to access android on a deeper level --- .../src/main/java/net/kdt/pojavlaunch/Tools.java | 1 + .../main/java/net/kdt/pojavlaunch/utils/JREUtils.java | 2 ++ app_pojavlauncher/src/main/jni/utils.c | 10 ++++++++++ 3 files changed, 13 insertions(+) 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..1febf5244 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,5 @@ public final class Tools { */ public static native void initializeControllerSubsystems(); } + 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..cfdbfaece 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,8 @@ public class JREUtils { envMap.put("POJAV_LOAD_TURNIP", "1"); } + 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..f9aedf9ac 100644 --- a/app_pojavlauncher/src/main/jni/utils.c +++ b/app_pojavlauncher/src/main/jni/utils.c @@ -200,3 +200,13 @@ JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_executeForkedBina } */ + +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 From 32d8b69d640594303c5ebf3b9b01c0f0de3b6429 Mon Sep 17 00:00:00 2001 From: tomikun <60690056+alexytomi@users.noreply.github.com> Date: Sun, 2 Aug 2026 20:33:59 +0800 Subject: [PATCH 2/2] feat: Set env var for Application jobject For use by mods who need to load their own classes or something --- .../main/java/net/kdt/pojavlaunch/Tools.java | 1 + .../net/kdt/pojavlaunch/utils/JREUtils.java | 1 + app_pojavlauncher/src/main/jni/utils.c | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) 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 1febf5244..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,5 +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 cfdbfaece..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,7 @@ 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. diff --git a/app_pojavlauncher/src/main/jni/utils.c b/app_pojavlauncher/src/main/jni/utils.c index f9aedf9ac..aaf03e6d6 100644 --- a/app_pojavlauncher/src/main/jni/utils.c +++ b/app_pojavlauncher/src/main/jni/utils.c @@ -200,6 +200,23 @@ 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) {