From 12aa44587053cd40c5884759e46c6b2acb6256ee Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Tue, 29 Sep 2020 16:35:29 +0700 Subject: [PATCH] Bridge between 'libcore.io.Os' and 'android.system.Os' --- .../java/net/kdt/pojavlaunch/JREUtils.java | 21 +++++++++++++++++-- .../kdt/pojavlaunch/PojavLoginActivity.java | 3 +-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java b/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java index 0588ab137..e26659bd9 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java +++ b/app/src/main/java/net/kdt/pojavlaunch/JREUtils.java @@ -1,9 +1,11 @@ package net.kdt.pojavlaunch; import android.content.*; +import android.os.*; import android.system.*; import android.util.*; import java.io.*; +import java.lang.reflect.*; import net.kdt.pojavlaunch.prefs.*; public class JREUtils @@ -91,7 +93,7 @@ public class JREUtils // setEnvironment(launchType, "LIBGL_MIPMAP", "3"); setEnvironment(launchType, "MESA_GLSL_CACHE_DIR", ctx.getCacheDir().getAbsolutePath()); setEnvironment(launchType, "LD_LIBRARY_PATH", ldLibraryPath); - setEnvironment(launchType, "PATH", Tools.homeJreDir + "/bin:" + libcore.io.Libcore.os.getenv("PATH")); + setEnvironment(launchType, "PATH", Tools.homeJreDir + "/bin:" + getBridgeOs("getenv", "PATH")); setEnvironment(launchType, "REGAL_GL_VENDOR", "Android"); setEnvironment(launchType, "REGAL_GL_RENDERER", "Regal"); @@ -108,7 +110,7 @@ public class JREUtils Tools.mLaunchShell.writeToProcess("export " + name + "=" + value); } else { // Libcore one support all Android versions - libcore.io.Libcore.os.setenv(name, value, true); + getBridgeOs("setenv", name, value, true); // Class.forName("libcore.io.Os").getMethod("setenv", String.class, String.class, boolean.class).invoke(null, name, value, true); /* if (Build.VERSION.SDK_INT < 21) { @@ -119,6 +121,21 @@ public class JREUtils */ } } + + public static Object getBridgeOs(String methodName, Object... objs) throws Throwable { + Class[] classes = new Class[objs.length]; + for (int i = 0; i < classes.length; i++) { + classes[i] = objs[i].getClass(); + } + if (Build.VERSION.SDK_INT < 21) { + Class libcoreClass = Class.forName("libcore.io.Libcore"); + Object libcoreOs = libcoreClass.getField("os").get(null); + return Class.forName("libcore.io.Os").getMethod(methodName, classes).invoke(libcoreOs, objs); + } else { + // Avoid Android < 5 get ClassNotFoundException + return Class.forName("android.system.Os").getMethod(methodName, classes).invoke(null, objs); + } + } public static native int chdir(String path); public static native boolean dlopen(String libPath); diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index cde58bed0..07dfead6d 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -17,7 +17,6 @@ import com.kdt.filermod.*; import com.kdt.mojangauth.*; import java.io.*; import java.util.*; -import libcore.io.*; import net.kdt.pojavlaunch.update.*; import net.kdt.pojavlaunch.value.customcontrols.*; import org.apache.commons.compress.archivers.tar.*; @@ -427,7 +426,7 @@ public class PojavLoginActivity extends AppCompatActivity try { // android.system.Os // Libcore one support all Android versions - libcore.io.Libcore.os.symlink(tarEntry.getName(), tarEntry.getLinkName()); + JREUtils.getBridgeOs("symlink", tarEntry.getName(), tarEntry.getLinkName()); } catch (Throwable e) { e.printStackTrace(); }