From 7c0f688f895dfd2d947f4dfcd7ff7647927dd6da Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Thu, 5 Nov 2020 19:53:34 +0700 Subject: [PATCH] [Code cleanup] Unnecessary codes, JVM launch types --- .../java/com/oracle/dalvik/VMLauncher.java | 2 - .../kdt/pojavlaunch/InstallModActivity.java | 2 +- .../java/net/kdt/pojavlaunch/JREUtils.java | 33 +++--- .../main/java/net/kdt/pojavlaunch/Tools.java | 112 ++++-------------- app/src/main/jni/jre_launcher.c | 60 ---------- 5 files changed, 39 insertions(+), 170 deletions(-) diff --git a/app/src/main/java/com/oracle/dalvik/VMLauncher.java b/app/src/main/java/com/oracle/dalvik/VMLauncher.java index 70d7aefdc..9586e15fc 100644 --- a/app/src/main/java/com/oracle/dalvik/VMLauncher.java +++ b/app/src/main/java/com/oracle/dalvik/VMLauncher.java @@ -4,6 +4,4 @@ public final class VMLauncher { private VMLauncher() { } public static native int launchJVM(String[] args); - - public static native int createLaunchMainJVM(String[] vmArgs, String mainClass, String[] mainArgs); } diff --git a/app/src/main/java/net/kdt/pojavlaunch/InstallModActivity.java b/app/src/main/java/net/kdt/pojavlaunch/InstallModActivity.java index 7d5e88d2a..2068de56e 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/InstallModActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/InstallModActivity.java @@ -141,7 +141,7 @@ public class InstallModActivity extends LoggableActivity { System.out.println(Arrays.toString(javaArgList.toArray(new String[0]))); //JREUtils.redirectStdio(false); - JREUtils.setJavaEnvironment(this, Tools.LAUNCH_TYPE); + JREUtils.setJavaEnvironment(this); JREUtils.initJavaRuntime(); JREUtils.chdir(Tools.MAIN_PATH); diff --git a/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java b/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java index 0f167eb81..da042596b 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java +++ b/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java @@ -150,21 +150,21 @@ public class JREUtils LD_LIBRARY_PATH = ldLibraryPath.toString(); } - public static void setJavaEnvironment(Context ctx, int launchType) throws Throwable { - setEnvironment(launchType, "JAVA_HOME", Tools.homeJreDir); - setEnvironment(launchType, "HOME", Tools.MAIN_PATH); - setEnvironment(launchType, "TMPDIR", ctx.getCacheDir().getAbsolutePath()); - setEnvironment(launchType, "LIBGL_MIPMAP", "3"); - setEnvironment(launchType, "MESA_GLSL_CACHE_DIR", ctx.getCacheDir().getAbsolutePath()); - setEnvironment(launchType, "LD_LIBRARY_PATH", LD_LIBRARY_PATH); - setEnvironment(launchType, "PATH", Tools.homeJreDir + "/bin:" + Os.getenv("PATH")); + public static void setJavaEnvironment(Context ctx) throws Throwable { + setEnvironment("JAVA_HOME", Tools.homeJreDir); + setEnvironment("HOME", Tools.MAIN_PATH); + setEnvironment("TMPDIR", ctx.getCacheDir().getAbsolutePath()); + setEnvironment("LIBGL_MIPMAP", "3"); + setEnvironment("MESA_GLSL_CACHE_DIR", ctx.getCacheDir().getAbsolutePath()); + setEnvironment("LD_LIBRARY_PATH", LD_LIBRARY_PATH); + setEnvironment("PATH", Tools.homeJreDir + "/bin:" + Os.getenv("PATH")); - setEnvironment(launchType, "REGAL_GL_VENDOR", "Android"); - setEnvironment(launchType, "REGAL_GL_RENDERER", "Regal"); - setEnvironment(launchType, "REGAL_GL_VERSION", "4.5"); + setEnvironment("REGAL_GL_VENDOR", "Android"); + setEnvironment("REGAL_GL_RENDERER", "Regal"); + setEnvironment("REGAL_GL_VERSION", "4.5"); - setEnvironment(launchType, "AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth)); - setEnvironment(launchType, "AWTSTUB_HEIGHT", Integer.toString(CallbackBridge.windowHeight)); + setEnvironment("AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth)); + setEnvironment("AWTSTUB_HEIGHT", Integer.toString(CallbackBridge.windowHeight)); File customEnvFile = new File(Tools.MAIN_PATH, "custom_env.txt"); if (customEnvFile.exists() && customEnvFile.isFile()) { @@ -173,7 +173,7 @@ public class JREUtils while ((line = reader.readLine()) != null) { // Not use split() as only split first one int index = line.indexOf("="); - setEnvironment(launchType, line.substring(0, index), line.substring(index + 1)); + setEnvironment(line.substring(0, index), line.substring(index + 1)); } reader.close(); } @@ -185,10 +185,7 @@ public class JREUtils // return ldLibraryPath; } - private static void setEnvironment(int launchType, String name, String value) throws Throwable { - if (launchType == Tools.LTYPE_PROCESS) { - Tools.mLaunchShell.writeToProcess("export " + name + "=" + value); - } + private static void setEnvironment(String name, String value) throws Throwable { Os.setenv(name, value, true); } diff --git a/app/src/main/java/net/kdt/pojavlaunch/Tools.java b/app/src/main/java/net/kdt/pojavlaunch/Tools.java index d5eebc3f7..97627af2f 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -67,12 +67,6 @@ public final class Tools "1.9" }; - - public static final int LTYPE_PROCESS = 0; - public static final int LTYPE_INVOCATION = 1; - public static final int LTYPE_CREATEJAVAVM = 2; - public static final int LAUNCH_TYPE = LTYPE_INVOCATION; - public static ShellProcessOperation mLaunchShell; private static int exitCode = 0; public static void launchMinecraft(final LoggableActivity ctx, MCProfile.Builder profile, JMinecraftVersionList.Version versionInfo) throws Throwable { @@ -88,100 +82,40 @@ public final class Tools String launchClassPath = generateLaunchClassPath(profile.getVersion()); System.out.println("Java Classpath: " + launchClassPath); - if (LAUNCH_TYPE == LTYPE_CREATEJAVAVM) { - javaArgList.add("-Djava.class.path=" + launchClassPath); - } else { - /* - if (LAUNCH_TYPE == LTYPE_PROCESS) { - javaArgList.add("-Dglfwstub.eglContext=" + Tools.getEGLAddress("Context", AndroidContextImplementation.context)); - String eglDisplay = Tools.getEGLAddress("Display", AndroidContextImplementation.display); - if (eglDisplay.equals("1")) { - eglDisplay = Tools.getEGLAddress("Display", ((EGL10) EGLContext.getEGL()).eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY)); - } - javaArgList.add("-Dglfwstub.eglDisplay=" + eglDisplay); - javaArgList.add("-Dglfwstub.eglSurfaceRead=" + Tools.getEGLAddress("Surface", AndroidContextImplementation.read)); - javaArgList.add("-Dglfwstub.eglSurfaceDraw=" + Tools.getEGLAddress("Surface", AndroidContextImplementation.draw)); - } - */ + getJavaArgs(ctx, javaArgList); - getJavaArgs(ctx, javaArgList); - - javaArgList.add("-cp"); - /* - if (versionInfo.mainClass.equals("net.minecraft.launchwrapper.Launch")) { - // Also preload LWJGL3 to fix crash on send input events - javaArgList.add(Tools.MAIN_PATH + "/lwjgl3/ClassWrapper.jar:" + getLWJGL3ClassPath()); - javaArgList.add("ClassWrapper"); - javaArgList.add(launchClassPath); - } else { */ - javaArgList.add(getLWJGL3ClassPath() + ":" + launchClassPath); - // } + javaArgList.add("-cp"); + /* + if (versionInfo.mainClass.equals("net.minecraft.launchwrapper.Launch")) { + // Also preload LWJGL3 to fix crash on send input events + javaArgList.add(Tools.MAIN_PATH + "/lwjgl3/ClassWrapper.jar:" + getLWJGL3ClassPath()); + javaArgList.add("ClassWrapper"); + javaArgList.add(launchClassPath); + } else { */ + javaArgList.add(getLWJGL3ClassPath() + ":" + launchClassPath); + // } - javaArgList.add(versionInfo.mainClass); - javaArgList.addAll(Arrays.asList(launchArgs)); - /* - javaArgList.add("-cp"); - javaArgList.add(launchClassPath); - javaArgList.add(versionInfo.mainClass); - javaArgList.addAll(Arrays.asList(launchArgs)); - */ - } - - if (LAUNCH_TYPE == LTYPE_PROCESS) { - mLaunchShell = new ShellProcessOperation(new ShellProcessOperation.OnPrintListener(){ - - @Override - public void onPrintLine(String text) { - // ctx.appendToLog(text, false); - } - }); - mLaunchShell.initInputStream(ctx); - } + javaArgList.add(versionInfo.mainClass); + javaArgList.addAll(Arrays.asList(launchArgs)); // can fix java? // setEnvironment("ORIGIN", Tools.homeJreDir + "/lib"); - JREUtils.setJavaEnvironment(ctx, Tools.LAUNCH_TYPE); + JREUtils.setJavaEnvironment(ctx); - if (LAUNCH_TYPE == LTYPE_PROCESS) { - mLaunchShell.writeToProcess("cd $HOME"); + JREUtils.initJavaRuntime(); + JREUtils.chdir(Tools.MAIN_PATH); - mLaunchShell.writeToProcess(javaArgList.toArray(new String[0])); - int exitCode = mLaunchShell.waitFor(); - if (exitCode != 0) { - Tools.showError(ctx, new ErrnoException("java", exitCode), false); - } - } else { // Type Invocation - // Is it need? - /* - Os.dup2(FileDescriptor.err, OsConstants.STDERR_FILENO); - Os.dup2(FileDescriptor.out, OsConstants.STDOUT_FILENO); - */ - - JREUtils.initJavaRuntime(); - JREUtils.chdir(Tools.MAIN_PATH); - - if (new File(Tools.MAIN_PATH, "strace.txt").exists()) { - startStrace(android.os.Process.myTid()); - } - - if (LAUNCH_TYPE == LTYPE_CREATEJAVAVM) { - VMLauncher.createLaunchMainJVM(javaArgList.toArray(new String[0]), versionInfo.mainClass, launchArgs); - } else { - // Test - /* - VMLauncher.launchJVM(new String[]{ - Tools.homeJreDir + "/bin/java", - "-invalidarg" - }); - */ - - exitCode = VMLauncher.launchJVM(javaArgList.toArray(new String[0])); - ctx.appendlnToLog("Java Exit code: " + exitCode); - } + if (new File(Tools.MAIN_PATH, "strace.txt").exists()) { + startStrace(android.os.Process.myTid()); } + exitCode = VMLauncher.launchJVM(javaArgList.toArray(new String[0])); + ctx.appendlnToLog("Java Exit code: " + exitCode); + + + ctx.runOnUiThread(new Runnable(){ @Override public void run() { diff --git a/app/src/main/jni/jre_launcher.c b/app/src/main/jni/jre_launcher.c index d2b1b9334..05ddf2031 100644 --- a/app/src/main/jni/jre_launcher.c +++ b/app/src/main/jni/jre_launcher.c @@ -55,67 +55,7 @@ typedef jint JLI_Launch_func(int argc, char ** argv, /* main argc, argc */ jint ergo /* ergonomics class policy */ ); -static void logArgs(int argc, char** argv) { -/* BlockLauncher: disable logging - int i; - - for (i = 0; i < argc; i++) { - LOGD("arg[%d]: %s", i, argv[i]); - } -*/ -} - -JNIEXPORT jint JNICALL Java_com_oracle_dalvik_VMLauncher_createLaunchMainJVM(JNIEnv *env, jclass clazz, jobjectArray vmArgArr, jstring mainClassStr, jobjectArray mainArgArr) { - void *libjvm = dlopen("libjvm.so", RTLD_NOW + RTLD_GLOBAL); - if (libjvm == NULL) { - LOGE("dlopen failed to open libjvm.so (dlerror %s).", dlerror()); - return -1; - } - - JNI_CreateJavaVM_func *jl_JNI_CreateJavaVM = (JNI_CreateJavaVM_func *) dlsym(libjvm, "JNI_CreateJavaVM"); - if (jl_JNI_CreateJavaVM == NULL) { - LOGE("dlsym failed to get JNI_CreateJavaVM (dlerror %s).", dlerror()); - return -1; - } - - int vm_argc = (*env)->GetArrayLength(env, vmArgArr); - char **vm_argv = convert_to_char_array(env, vmArgArr); - - int main_argc = (*env)->GetArrayLength(env, mainArgArr); - char **main_argv = convert_to_char_array(env, mainArgArr); - - JavaVMInitArgs vm_args; - JavaVMOption options[vm_argc]; - for (int i = 0; i < vm_argc; i++) { - options[i].optionString = vm_argv[i]; - } - vm_args.version = JNI_VERSION_1_6; - vm_args.options = options; - vm_args.nOptions = vm_argc; - vm_args.ignoreUnrecognized = JNI_FALSE; - - jint res = (jint) jl_JNI_CreateJavaVM(&runtimeJavaVMPtr, (void**)&runtimeJNIEnvPtr_JRE, &vm_args); - // delete options; - - char *main_class_c = (*env)->GetStringUTFChars(env, mainClassStr, 0); - - jclass mainClass = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, main_class_c); - jmethodID mainMethod = (*runtimeJNIEnvPtr_JRE)->GetStaticMethodID(runtimeJNIEnvPtr_JRE, mainClass, "main", "([Ljava/lang/String;)V"); - - // Need recreate jobjectArray to make JNIEnv is 'runtimeJNIEnvPtr_JRE'. - jobjectArray runtime_main_argv = convert_from_char_array(runtimeJNIEnvPtr_JRE, main_argv, main_argc); - (*runtimeJNIEnvPtr_JRE)->CallStaticVoidMethod(runtimeJNIEnvPtr_JRE, mainClass, mainMethod, runtime_main_argv); - - (*env)->ReleaseStringUTFChars(env, mainClassStr, main_class_c); - free_char_array(env, mainArgArr, main_argv); - free_char_array(env, vmArgArr, vm_argv); - - return res; -} - static jint launchJVM(int argc, char** argv) { - logArgs(argc, argv); - void* libjli = dlopen("libjli.so", RTLD_LAZY | RTLD_GLOBAL); // Boardwalk: silence