mirror of
https://github.com/2009scape/2009Scape-mobile.git
synced 2026-08-01 14:19:12 -06:00
Remove the dependency on a static variable for JRE switching
Also: fix crashing on CustomSeekBarPreferences
This commit is contained in:
parent
a7809df1a5
commit
a6a5675b9c
6 changed files with 59 additions and 59 deletions
|
|
@ -20,6 +20,7 @@ import com.kdt.LoggerView;
|
|||
import net.kdt.pojavlaunch.customcontrols.keyboard.AwtCharSender;
|
||||
import net.kdt.pojavlaunch.customcontrols.keyboard.TouchCharInput;
|
||||
import net.kdt.pojavlaunch.multirt.MultiRTUtils;
|
||||
import net.kdt.pojavlaunch.multirt.Runtime;
|
||||
import net.kdt.pojavlaunch.prefs.LauncherPreferences;
|
||||
import net.kdt.pojavlaunch.utils.JREUtils;
|
||||
import net.kdt.pojavlaunch.utils.MathUtils;
|
||||
|
|
@ -141,18 +142,19 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||
|
||||
final File modFile = (File) getIntent().getExtras().getSerializable("modFile");
|
||||
final String javaArgs = getIntent().getExtras().getString("javaArgs");
|
||||
|
||||
int javaVersion = getJavaVersion(modFile);
|
||||
String jreName = javaVersion == -1 ? null : MultiRTUtils.getNearestJreName(javaVersion);
|
||||
if(jreName != null) {
|
||||
MultiRTUtils.setRuntimeNamed(jreName);
|
||||
}else{
|
||||
MultiRTUtils.setRuntimeNamed(LauncherPreferences.PREF_DEFAULT_RUNTIME);
|
||||
String jreName = LauncherPreferences.PREF_DEFAULT_RUNTIME;
|
||||
if(modFile != null) {
|
||||
int javaVersion = getJavaVersion(modFile);
|
||||
if(javaVersion != -1) {
|
||||
String autoselectRuntime = MultiRTUtils.getNearestJreName(javaVersion);
|
||||
if (autoselectRuntime != null) jreName = autoselectRuntime;
|
||||
}
|
||||
}
|
||||
final Runtime runtime = MultiRTUtils.forceReread(jreName);
|
||||
|
||||
mSkipDetectMod = getIntent().getExtras().getBoolean("skipDetectMod", false);
|
||||
if (mSkipDetectMod) {
|
||||
new Thread(() -> launchJavaRuntime(modFile, javaArgs), "JREMainThread").start();
|
||||
new Thread(() -> launchJavaRuntime(runtime, modFile, javaArgs), "JREMainThread").start();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +162,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||
openLogOutput(null);
|
||||
new Thread(() -> {
|
||||
try {
|
||||
final int exit = doCustomInstall(modFile, javaArgs);
|
||||
final int exit = doCustomInstall(runtime, modFile, javaArgs);
|
||||
Logger.getInstance().appendToLog(getString(R.string.toast_optifine_success));
|
||||
if (exit != 0) return;
|
||||
runOnUiThread(() -> {
|
||||
|
|
@ -274,13 +276,13 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public int launchJavaRuntime(File modFile, String javaArgs) {
|
||||
public int launchJavaRuntime(Runtime runtime, File modFile, String javaArgs) {
|
||||
JREUtils.redirectAndPrintJRELog();
|
||||
try {
|
||||
List<String> javaArgList = new ArrayList<>();
|
||||
|
||||
// Enable Caciocavallo
|
||||
Tools.getCacioJavaArgs(javaArgList,MultiRTUtils.getSelectedRuntime().javaVersion == 8);
|
||||
Tools.getCacioJavaArgs(javaArgList,runtime.javaVersion == 8);
|
||||
|
||||
if (javaArgs != null) {
|
||||
javaArgList.addAll(Arrays.asList(javaArgs.split(" ")));
|
||||
|
|
@ -300,7 +302,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||
|
||||
Logger.getInstance().appendToLog("Info: Java arguments: " + Arrays.toString(javaArgList.toArray(new String[0])));
|
||||
|
||||
return JREUtils.launchJavaVM(this, null,javaArgList, LauncherPreferences.PREF_CUSTOM_JAVA_ARGS);
|
||||
return JREUtils.launchJavaVM(this, runtime,null,javaArgList, LauncherPreferences.PREF_CUSTOM_JAVA_ARGS);
|
||||
} catch (Throwable th) {
|
||||
Tools.showError(this, th, true);
|
||||
return -1;
|
||||
|
|
@ -309,9 +311,9 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||
|
||||
|
||||
|
||||
private int doCustomInstall(File modFile, String javaArgs) {
|
||||
private int doCustomInstall(Runtime runtime, File modFile, String javaArgs) {
|
||||
mSkipDetectMod = true;
|
||||
return launchJavaRuntime(modFile, javaArgs);
|
||||
return launchJavaRuntime(runtime, modFile, javaArgs);
|
||||
}
|
||||
|
||||
public void toggleKeyboard(View view) {
|
||||
|
|
|
|||
|
|
@ -127,14 +127,6 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
|
|||
GLOBAL_CLIPBOARD = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
|
||||
touchCharInput.setCharacterSender(new LwjglCharSender());
|
||||
|
||||
|
||||
String runtime = LauncherPreferences.PREF_DEFAULT_RUNTIME;
|
||||
if(minecraftProfile.javaDir != null && minecraftProfile.javaDir.startsWith(Tools.LAUNCHERPROFILES_RTPREFIX)) {
|
||||
String runtimeName = minecraftProfile.javaDir.substring(Tools.LAUNCHERPROFILES_RTPREFIX.length());
|
||||
if(MultiRTUtils.forceReread(runtimeName).versionString != null) {
|
||||
runtime = runtimeName;
|
||||
}
|
||||
}
|
||||
if(minecraftProfile.pojavRendererName != null) {
|
||||
Log.i("RdrDebug","__P_renderer="+minecraftProfile.pojavRendererName);
|
||||
Tools.LOCAL_RENDERER = minecraftProfile.pojavRendererName;
|
||||
|
|
@ -142,7 +134,6 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
|
|||
|
||||
setTitle("Minecraft " + minecraftProfile.lastVersionId);
|
||||
|
||||
MultiRTUtils.setRuntimeNamed(runtime);
|
||||
// Minecraft 1.13+
|
||||
|
||||
String version = getIntent().getStringExtra(INTENT_MINECRAFT_VERSION);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ import com.google.gson.Gson;
|
|||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import net.kdt.pojavlaunch.multirt.MultiRTUtils;
|
||||
import net.kdt.pojavlaunch.multirt.Runtime;
|
||||
import net.kdt.pojavlaunch.plugins.FFmpegPlugin;
|
||||
import net.kdt.pojavlaunch.prefs.LauncherPreferences;
|
||||
import net.kdt.pojavlaunch.utils.DownloadUtils;
|
||||
|
|
@ -96,7 +97,6 @@ public final class Tools {
|
|||
public static String DIR_GAME_NEW;
|
||||
|
||||
// New since 3.0.0
|
||||
public static String DIR_HOME_JRE;
|
||||
public static String DIRNAME_HOME_JRE = "lib";
|
||||
|
||||
// New since 2.4.2
|
||||
|
|
@ -168,6 +168,7 @@ public final class Tools {
|
|||
memoryErrorLock.wait();
|
||||
}
|
||||
}
|
||||
Runtime runtime = MultiRTUtils.forceReread(Tools.pickRuntime(minecraftProfile));
|
||||
JMinecraftVersionList.Version versionInfo = Tools.getVersionInfo(versionId);
|
||||
LauncherProfiles.update();
|
||||
File gamedir = Tools.getGameDirPath(minecraftProfile);
|
||||
|
|
@ -185,7 +186,7 @@ public final class Tools {
|
|||
|
||||
List<String> javaArgList = new ArrayList<>();
|
||||
|
||||
getCacioJavaArgs(javaArgList, MultiRTUtils.getSelectedRuntime().javaVersion == 8);
|
||||
getCacioJavaArgs(javaArgList, runtime.javaVersion == 8);
|
||||
|
||||
if (versionInfo.logging != null) {
|
||||
String configFile = Tools.DIR_DATA + "/security/" + versionInfo.logging.client.file.id.replace("client", "log4j-rce-patch");
|
||||
|
|
@ -201,10 +202,10 @@ public final class Tools {
|
|||
javaArgList.add(versionInfo.mainClass);
|
||||
javaArgList.addAll(Arrays.asList(launchArgs));
|
||||
// ctx.appendlnToLog("full args: "+javaArgList.toString());
|
||||
FFmpegPlugin.discover(activity);
|
||||
String args = LauncherPreferences.PREF_CUSTOM_JAVA_ARGS;
|
||||
if(Tools.isValidString(minecraftProfile.javaArgs)) args = minecraftProfile.javaArgs;
|
||||
JREUtils.launchJavaVM(activity, gamedir, javaArgList, args);
|
||||
FFmpegPlugin.discover(activity);
|
||||
JREUtils.launchJavaVM(activity, runtime, gamedir, javaArgList, args);
|
||||
}
|
||||
|
||||
public static File getGameDirPath(@NonNull MinecraftProfile minecraftProfile){
|
||||
|
|
@ -938,4 +939,14 @@ public final class Tools {
|
|||
public static boolean isValidString(String string) {
|
||||
return string != null && !string.isEmpty();
|
||||
}
|
||||
public static String pickRuntime(MinecraftProfile minecraftProfile) {
|
||||
String runtime = LauncherPreferences.PREF_DEFAULT_RUNTIME;
|
||||
if(minecraftProfile.javaDir != null && minecraftProfile.javaDir.startsWith(Tools.LAUNCHERPROFILES_RTPREFIX)) {
|
||||
String runtimeName = minecraftProfile.javaDir.substring(Tools.LAUNCHERPROFILES_RTPREFIX.length());
|
||||
if(MultiRTUtils.forceReread(runtimeName).versionString != null) {
|
||||
runtime = runtimeName;
|
||||
}
|
||||
}
|
||||
return runtime;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,17 +144,10 @@ public class MultiRTUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public static void setRuntimeNamed(String name) {
|
||||
public static File getRuntimeHome(String name) {
|
||||
File dest = new File(RUNTIME_FOLDER,"/"+name);
|
||||
if((!dest.exists()) || MultiRTUtils.forceReread(name).versionString == null) throw new RuntimeException("Selected runtime is broken!");
|
||||
Tools.DIR_HOME_JRE = dest.getAbsolutePath();
|
||||
sSelectedRuntimeName = name;
|
||||
JREUtils.relocateLibPath();
|
||||
}
|
||||
|
||||
public static Runtime getSelectedRuntime() {
|
||||
if(sSelectedRuntimeName == null) throw new RuntimeException("getSelectedRuntime() called before a runtime was selected");
|
||||
return read(sSelectedRuntimeName);
|
||||
return dest;
|
||||
}
|
||||
|
||||
public static Runtime forceReread(String name) {
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ public class CustomSeekBarPreference extends SeekBarPreference {
|
|||
@SuppressLint("PrivateResource")
|
||||
public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
try(TypedArray a = context.obtainStyledAttributes(
|
||||
attrs, R.styleable.SeekBarPreference, defStyleAttr, defStyleRes)) {
|
||||
mMin = a.getInt(R.styleable.SeekBarPreference_min, 0);
|
||||
}
|
||||
TypedArray a = context.obtainStyledAttributes(
|
||||
attrs, R.styleable.SeekBarPreference, defStyleAttr, defStyleRes);
|
||||
mMin = a.getInt(R.styleable.SeekBarPreference_min, 0);
|
||||
a.recycle();
|
||||
}
|
||||
|
||||
public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import net.kdt.pojavlaunch.*;
|
|||
import net.kdt.pojavlaunch.extra.ExtraConstants;
|
||||
import net.kdt.pojavlaunch.extra.ExtraCore;
|
||||
import net.kdt.pojavlaunch.multirt.MultiRTUtils;
|
||||
import net.kdt.pojavlaunch.multirt.Runtime;
|
||||
import net.kdt.pojavlaunch.plugins.FFmpegPlugin;
|
||||
import net.kdt.pojavlaunch.prefs.*;
|
||||
import org.lwjgl.glfw.*;
|
||||
|
|
@ -71,7 +72,7 @@ public class JREUtils {
|
|||
return returnValue;
|
||||
}
|
||||
|
||||
public static void initJavaRuntime() {
|
||||
public static void initJavaRuntime(String jreHome) {
|
||||
dlopen(findInLdLibPath("libjli.so"));
|
||||
if(!dlopen("libjvm.so")){
|
||||
Log.w("DynamicLoader","Failed to load with no path, trying with full path");
|
||||
|
|
@ -86,7 +87,7 @@ public class JREUtils {
|
|||
dlopen(findInLdLibPath("libawt_headless.so"));
|
||||
dlopen(findInLdLibPath("libfreetype.so"));
|
||||
dlopen(findInLdLibPath("libfontmanager.so"));
|
||||
for(File f : locateLibs(new File(Tools.DIR_HOME_JRE + "/" + Tools.DIRNAME_HOME_JRE))) {
|
||||
for(File f : locateLibs(new File(jreHome, Tools.DIRNAME_HOME_JRE))) {
|
||||
dlopen(f.getAbsolutePath());
|
||||
}
|
||||
dlopen(NATIVE_LIB_DIR + "/libopenal.so");
|
||||
|
|
@ -138,14 +139,14 @@ public class JREUtils {
|
|||
|
||||
}
|
||||
|
||||
public static void relocateLibPath() {
|
||||
String JRE_ARCHITECTURE = MultiRTUtils.getSelectedRuntime().arch;
|
||||
public static void relocateLibPath(Runtime runtime, String jreHome) {
|
||||
String JRE_ARCHITECTURE = runtime.arch;
|
||||
if (Architecture.archAsInt(JRE_ARCHITECTURE) == ARCH_X86){
|
||||
JRE_ARCHITECTURE = "i386/i486/i586";
|
||||
}
|
||||
|
||||
for (String arch : JRE_ARCHITECTURE.split("/")) {
|
||||
File f = new File(Tools.DIR_HOME_JRE, "lib/" + arch);
|
||||
File f = new File(jreHome, "lib/" + arch);
|
||||
if (f.exists() && f.isDirectory()) {
|
||||
Tools.DIRNAME_HOME_JRE = "lib/" + arch;
|
||||
}
|
||||
|
|
@ -156,9 +157,9 @@ public class JREUtils {
|
|||
if(FFmpegPlugin.isAvailable) {
|
||||
ldLibraryPath.append(FFmpegPlugin.libraryPath).append(":");
|
||||
}
|
||||
ldLibraryPath.append(Tools.DIR_HOME_JRE)
|
||||
ldLibraryPath.append(jreHome)
|
||||
.append("/").append(Tools.DIRNAME_HOME_JRE)
|
||||
.append("/jli:").append(Tools.DIR_HOME_JRE).append("/").append(Tools.DIRNAME_HOME_JRE)
|
||||
.append("/jli:").append(jreHome).append("/").append(Tools.DIRNAME_HOME_JRE)
|
||||
.append(":");
|
||||
ldLibraryPath.append("/system/").append(libName).append(":")
|
||||
.append("/vendor/").append(libName).append(":")
|
||||
|
|
@ -167,10 +168,10 @@ public class JREUtils {
|
|||
LD_LIBRARY_PATH = ldLibraryPath.toString();
|
||||
}
|
||||
|
||||
public static void setJavaEnvironment(Activity activity) throws Throwable {
|
||||
public static void setJavaEnvironment(Activity activity, String jreHome) throws Throwable {
|
||||
Map<String, String> envMap = new ArrayMap<>();
|
||||
envMap.put("POJAV_NATIVEDIR", NATIVE_LIB_DIR);
|
||||
envMap.put("JAVA_HOME", Tools.DIR_HOME_JRE);
|
||||
envMap.put("JAVA_HOME", jreHome);
|
||||
envMap.put("HOME", Tools.DIR_GAME_HOME);
|
||||
envMap.put("TMPDIR", activity.getCacheDir().getAbsolutePath());
|
||||
envMap.put("LIBGL_MIPMAP", "3");
|
||||
|
|
@ -202,7 +203,7 @@ public class JREUtils {
|
|||
envMap.put("VTEST_SOCKET_NAME", activity.getCacheDir().getAbsolutePath() + "/.virgl_test");
|
||||
|
||||
envMap.put("LD_LIBRARY_PATH", LD_LIBRARY_PATH);
|
||||
envMap.put("PATH", Tools.DIR_HOME_JRE + "/bin:" + Os.getenv("PATH"));
|
||||
envMap.put("PATH", jreHome + "/bin:" + Os.getenv("PATH"));
|
||||
if(FFmpegPlugin.isAvailable) {
|
||||
envMap.put("PATH", FFmpegPlugin.libraryPath+":"+envMap.get("PATH"));
|
||||
}
|
||||
|
|
@ -255,8 +256,8 @@ public class JREUtils {
|
|||
}
|
||||
}
|
||||
|
||||
File serverFile = new File(Tools.DIR_HOME_JRE + "/" + Tools.DIRNAME_HOME_JRE + "/server/libjvm.so");
|
||||
jvmLibraryPath = Tools.DIR_HOME_JRE + "/" + Tools.DIRNAME_HOME_JRE + "/" + (serverFile.exists() ? "server" : "client");
|
||||
File serverFile = new File(jreHome + "/" + Tools.DIRNAME_HOME_JRE + "/server/libjvm.so");
|
||||
jvmLibraryPath = jreHome + "/" + Tools.DIRNAME_HOME_JRE + "/" + (serverFile.exists() ? "server" : "client");
|
||||
Log.d("DynamicLoader","Base LD_LIBRARY_PATH: "+LD_LIBRARY_PATH);
|
||||
Log.d("DynamicLoader","Internal LD_LIBRARY_PATH: "+jvmLibraryPath+":"+LD_LIBRARY_PATH);
|
||||
setLdLibraryPath(jvmLibraryPath+":"+LD_LIBRARY_PATH);
|
||||
|
|
@ -264,13 +265,15 @@ public class JREUtils {
|
|||
// return ldLibraryPath;
|
||||
}
|
||||
|
||||
public static int launchJavaVM(final Activity activity, File gameDirectory, final List<String> JVMArgs, final String userArgsString) throws Throwable {
|
||||
JREUtils.relocateLibPath();
|
||||
public static int launchJavaVM(final Activity activity, final Runtime runtime, File gameDirectory, final List<String> JVMArgs, final String userArgsString) throws Throwable {
|
||||
String runtimeHome = MultiRTUtils.getRuntimeHome(runtime.name).getAbsolutePath();
|
||||
|
||||
setJavaEnvironment(activity);
|
||||
JREUtils.relocateLibPath(runtime, runtimeHome);
|
||||
|
||||
setJavaEnvironment(activity, runtimeHome);
|
||||
|
||||
final String graphicsLib = loadGraphicsLibrary();
|
||||
List<String> userArgs = getJavaArgs(activity, userArgsString);
|
||||
List<String> userArgs = getJavaArgs(activity, runtimeHome, userArgsString);
|
||||
|
||||
//Remove arguments that can interfere with the good working of the launcher
|
||||
purgeArg(userArgs,"-Xms");
|
||||
|
|
@ -289,7 +292,7 @@ public class JREUtils {
|
|||
activity.runOnUiThread(() -> Toast.makeText(activity, activity.getString(R.string.autoram_info_msg,LauncherPreferences.PREF_RAM_ALLOCATION), Toast.LENGTH_SHORT).show());
|
||||
System.out.println(JVMArgs);
|
||||
|
||||
initJavaRuntime();
|
||||
initJavaRuntime(runtimeHome);
|
||||
setupExitTrap(activity.getApplication());
|
||||
chdir(gameDirectory == null ? Tools.DIR_GAME_NEW : gameDirectory.getAbsolutePath());
|
||||
userArgs.add(0,"java"); //argv[0] is the program name according to C standard.
|
||||
|
|
@ -314,13 +317,13 @@ public class JREUtils {
|
|||
* @param ctx The application context
|
||||
* @return A list filled with args.
|
||||
*/
|
||||
public static List<String> getJavaArgs(Context ctx, String userArgumentsString) {
|
||||
public static List<String> getJavaArgs(Context ctx, String runtimeHome, String userArgumentsString) {
|
||||
List<String> userArguments = parseJavaArguments(userArgumentsString);
|
||||
String resolvFile;
|
||||
resolvFile = new File(Tools.DIR_DATA,"resolv.conf").getAbsolutePath();
|
||||
|
||||
ArrayList<String> overridableArguments = new ArrayList<>(Arrays.asList(
|
||||
"-Djava.home=" + Tools.DIR_HOME_JRE,
|
||||
"-Djava.home=" + runtimeHome,
|
||||
"-Djava.io.tmpdir=" + ctx.getCacheDir().getAbsolutePath(),
|
||||
"-Duser.home=" + Tools.DIR_GAME_HOME,
|
||||
"-Duser.language=" + System.getProperty("user.language"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue