[Bug fix] x86: Unable to locate x86 JRE path correctly

This commit is contained in:
khanhduytran0 2020-11-18 20:01:40 +07:00
parent 9a95ef36eb
commit 233d82cba4
2 changed files with 41 additions and 37 deletions

View File

@ -908,8 +908,8 @@ public class BaseMainActivity extends LoggableActivity implements OnTouchListene
appendlnToLog("--------- beggining with launcher debug");
checkLWJGL3Installed();
Map<String, String> jreReleaseList = readJREReleaseProperties();
checkJavaArchitecture(jreReleaseList.get("OS_ARCH"));
Map<String, String> 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<String, String> readJREReleaseProperties() throws IOException {
Map<String, String> 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 + "\"");

View File

@ -14,9 +14,25 @@ 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(":")) {
File f = new File(libPath, libName);
@ -49,6 +65,20 @@ public class JREUtils
}
}
public static Map<String, String> readJREReleaseProperties() throws IOException {
Map<String, String> 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) {
JREUtils.redirectLogcat();
@ -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<String, String> 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);
File f = new File(Tools.homeJreDir, "lib/" + JRE_ARCHITECTURE);
if (f.exists() && f.isDirectory()) {
Tools.homeJreLib = "lib/" + arch;
break;
}
Tools.homeJreLib = "lib/" + JRE_ARCHITECTURE;
}
String libName = Tools.currentArch.contains("64") ? "lib64" : "lib";