diff --git a/app/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index 508545485..762570b68 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -908,8 +908,8 @@ public class BaseMainActivity extends LoggableActivity implements OnTouchListene appendlnToLog("--------- beggining with launcher debug"); checkLWJGL3Installed(); - Map jreReleaseList = readJREReleaseProperties(); - checkJavaArchitecture(jreReleaseList.get("OS_ARCH")); + Map jreReleaseList = JREUtils.readJREReleaseProperties(); + JREUtils.checkJavaArchitecture(this, jreReleaseList.get("OS_ARCH")); checkJavaArgsIsLaunchable(jreReleaseList.get("JAVA_VERSION")); // appendlnToLog("Info: Custom Java arguments: \"" + LauncherPreferences.PREF_CUSTOM_JAVA_ARGS + "\""); @@ -917,34 +917,6 @@ public class BaseMainActivity extends LoggableActivity implements OnTouchListene Tools.launchMinecraft(this, mProfile, mVersionInfo); } - private Map readJREReleaseProperties() throws IOException { - Map jreReleaseMap = new ArrayMap<>(); - BufferedReader jreReleaseReader = new BufferedReader(new FileReader(Tools.homeJreDir + "/release")); - String currLine; - while ((currLine = jreReleaseReader.readLine()) != null) { - if (!currLine.isEmpty() || currLine.contains("=")) { - String[] keyValue = currLine.split("="); - jreReleaseMap.put(keyValue[0], keyValue[1].replace("\"", "")); - } - } - jreReleaseReader.close(); - return jreReleaseMap; - } - - private void checkJavaArchitecture(String jreArch) throws Exception { - String[] argName = Tools.currentArch.split("/"); - appendlnToLog("Architecture: " + Tools.currentArch); - if (!(jreArch.contains(argName[0]) || jreArch.contains(argName[1]))) { - // x86 check workaround - if (jreArch.startsWith("i") && jreArch.endsWith("86") && Tools.currentArch.contains("x86") && !Tools.currentArch.contains("64")) { - return; - } - - appendlnToLog("Architecture " + Tools.currentArch + " is incompatible with Java Runtime " + jreArch); - throw new RuntimeException(getString(R.string.mcn_check_fail_incompatiblearch, Tools.currentArch, jreArch)); - } - } - private void checkJavaArgsIsLaunchable(String jreVersion) throws Throwable { appendlnToLog("Info: Custom Java arguments: \"" + LauncherPreferences.PREF_CUSTOM_JAVA_ARGS + "\""); diff --git a/app/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 2d81a707b..7fd3e5af1 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -14,8 +14,24 @@ public class JREUtils { private JREUtils() {} + public static String JRE_ARCHITECTURE; + public static String LD_LIBRARY_PATH; private static String nativeLibDir; + + public static void checkJavaArchitecture(LoggableActivity act, String jreArch) throws Exception { + String[] argName = Tools.currentArch.split("/"); + act.appendlnToLog("Architecture: " + Tools.currentArch); + if (!(jreArch.contains(argName[0]) || jreArch.contains(argName[1]))) { + // x86 check workaround + if (jreArch.startsWith("i") && jreArch.endsWith("86") && Tools.currentArch.contains("x86") && !Tools.currentArch.contains("64")) { + return; + } + + act.appendlnToLog("Architecture " + Tools.currentArch + " is incompatible with Java Runtime " + jreArch); + throw new RuntimeException(act.getString(R.string.mcn_check_fail_incompatiblearch, Tools.currentArch, jreArch)); + } + } public static String findInLdLibPath(String libName) { for (String libPath : Os.getenv("LD_LIBRARY_PATH").split(":")) { @@ -48,6 +64,20 @@ public class JREUtils dlopen(nativeLibDir + "/libgl04es.so"); } } + + public static Map readJREReleaseProperties() throws IOException { + Map jreReleaseMap = new ArrayMap<>(); + BufferedReader jreReleaseReader = new BufferedReader(new FileReader(Tools.homeJreDir + "/release")); + String currLine; + while ((currLine = jreReleaseReader.readLine()) != null) { + if (!currLine.isEmpty() || currLine.contains("=")) { + String[] keyValue = currLine.split("="); + jreReleaseMap.put(keyValue[0], keyValue[1].replace("\"", "")); + } + } + jreReleaseReader.close(); + return jreReleaseMap; + } private static boolean checkAccessTokenLeak = true; public static void redirectAndPrintJRELog(final LoggableActivity act, final String accessToken) { @@ -118,15 +148,17 @@ public class JREUtils Log.i("jrelog-logcat","Logcat thread started"); } - public static void relocateLibPath(Context ctx) { + public static void relocateLibPath(Context ctx) throws Exception { + if (JRE_ARCHITECTURE == null) { + Map jreReleaseList = JREUtils.readJREReleaseProperties(); + JRE_ARCHITECTURE = jreReleaseList.get("OS_ARCH"); + } + nativeLibDir = ctx.getApplicationInfo().nativeLibraryDir; - for (String arch : Tools.currentArch.split("/")) { - File f = new File(Tools.homeJreDir, "lib/" + arch); - if (f.exists() && f.isDirectory()) { - Tools.homeJreLib = "lib/" + arch; - break; - } + File f = new File(Tools.homeJreDir, "lib/" + JRE_ARCHITECTURE); + if (f.exists() && f.isDirectory()) { + Tools.homeJreLib = "lib/" + JRE_ARCHITECTURE; } String libName = Tools.currentArch.contains("64") ? "lib64" : "lib";