feat: Set env vars for JavaVM pointers

For use primarily by mods who want to control android runtime for some
reason.
This commit is contained in:
tomikun
2026-07-30 19:02:11 +08:00
parent 8f9415146f
commit 13cec07fa3

View File

@@ -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);