From 13cec07fa39ec52a183f99e66df547d4c488146f 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] feat: Set env vars for JavaVM pointers For use primarily by mods who want to control android runtime for some reason. --- .../src/main/jni/input_bridge_v3.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index 409f72c03..f6805b98a 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -41,6 +41,15 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) { LOGI("Saving DVM environ..."); //Save dalvik global JavaVM pointer pojav_environ->dalvikJavaVMPtr = vm; + char buf[32] = "-1"; + int ret = snprintf(buf, sizeof(buf), "%p", pojav_environ->dalvikJavaVMPtr); + if (ret < 0 || ret >= sizeof(buf)) { + LOGE("Failed to set DALVIK_JAVAVM to pointer"); + setenv("DALVIK_JAVAVM", "-1", 1); + } else { + setenv("DALVIK_JAVAVM", buf, 1); + } + // Sets up the stuff that GLFW/JVM needs to communicate to Android // These methods are called from GLFW/JVM and connect to Android-side impls // These aren't separated out into a method because these can be ran so long as we are in Android-land @@ -57,6 +66,14 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) { } else if (pojav_environ->dalvikJavaVMPtr != vm) { LOGI("Saving JVM environ..."); pojav_environ->runtimeJavaVMPtr = vm; + char buf[32] = "-1"; + int ret = snprintf(buf, sizeof(buf), "%p", pojav_environ->runtimeJavaVMPtr); + if (ret < 0 || ret >= sizeof(buf)) { + LOGE("Failed to set OPENJDK_JAVAVM to pointer"); + setenv("OPENJDK_JAVAVM", "-1", 1); + } else { + setenv("OPENJDK_JAVAVM", buf, 1); + } JNIEnv *vmEnv; (*pojav_environ->runtimeJavaVMPtr)->GetEnv(pojav_environ->runtimeJavaVMPtr, (void**) &vmEnv, JNI_VERSION_1_4); hookExec(vmEnv);