diff --git a/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-shared-1.11.2-SNAPSHOT.jar b/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-shared-1.11.2-SNAPSHOT.jar
new file mode 100644
index 00000000..d5da4792
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-shared-1.11.2-SNAPSHOT.jar differ
diff --git a/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-tta-1.11.2-SNAPSHOT.jar b/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-tta-1.11.2-SNAPSHOT.jar
new file mode 100644
index 00000000..94039e25
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/caciocavallo11/cacio-tta-1.11.2-SNAPSHOT.jar differ
diff --git a/FCL/src/main/assets/app_runtime/caciocavallo11/version b/FCL/src/main/assets/app_runtime/caciocavallo11/version
new file mode 100644
index 00000000..56a6051c
--- /dev/null
+++ b/FCL/src/main/assets/app_runtime/caciocavallo11/version
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/bin-arm.tar.xz b/FCL/src/main/assets/app_runtime/java/jre11/bin-arm.tar.xz
index 97bc7d7f..69e4dd04 100644
Binary files a/FCL/src/main/assets/app_runtime/java/jre11/bin-arm.tar.xz and b/FCL/src/main/assets/app_runtime/java/jre11/bin-arm.tar.xz differ
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/bin-arm64.tar.xz b/FCL/src/main/assets/app_runtime/java/jre11/bin-arm64.tar.xz
index c8926831..d878f182 100644
Binary files a/FCL/src/main/assets/app_runtime/java/jre11/bin-arm64.tar.xz and b/FCL/src/main/assets/app_runtime/java/jre11/bin-arm64.tar.xz differ
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/bin-x86.tar.xz b/FCL/src/main/assets/app_runtime/java/jre11/bin-x86.tar.xz
index 10c68f6d..e35ec2a2 100644
Binary files a/FCL/src/main/assets/app_runtime/java/jre11/bin-x86.tar.xz and b/FCL/src/main/assets/app_runtime/java/jre11/bin-x86.tar.xz differ
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/bin-x86_64.tar.xz b/FCL/src/main/assets/app_runtime/java/jre11/bin-x86_64.tar.xz
index 89979f42..1d379176 100644
Binary files a/FCL/src/main/assets/app_runtime/java/jre11/bin-x86_64.tar.xz and b/FCL/src/main/assets/app_runtime/java/jre11/bin-x86_64.tar.xz differ
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/universal.tar.xz b/FCL/src/main/assets/app_runtime/java/jre11/universal.tar.xz
index 41e4cc62..d9cc32af 100644
Binary files a/FCL/src/main/assets/app_runtime/java/jre11/universal.tar.xz and b/FCL/src/main/assets/app_runtime/java/jre11/universal.tar.xz differ
diff --git a/FCL/src/main/assets/app_runtime/java/jre11/version b/FCL/src/main/assets/app_runtime/java/jre11/version
index d8263ee9..e440e5c8 100644
--- a/FCL/src/main/assets/app_runtime/java/jre11/version
+++ b/FCL/src/main/assets/app_runtime/java/jre11/version
@@ -1 +1 @@
-2
\ No newline at end of file
+3
\ No newline at end of file
diff --git a/FCL/src/main/java/com/tungsten/fcl/activity/ShellActivity.java b/FCL/src/main/java/com/tungsten/fcl/activity/ShellActivity.java
index eccadf20..d90d4f69 100644
--- a/FCL/src/main/java/com/tungsten/fcl/activity/ShellActivity.java
+++ b/FCL/src/main/java/com/tungsten/fcl/activity/ShellActivity.java
@@ -50,24 +50,9 @@ public class ShellActivity extends FCLActivity {
if (cmd.endsWith("\n")) {
logWindow.appendLog("->" + cmd);
editText.setText("");
- String javaDir = FCLPath.RUNTIME_DIR + "/java";
if (cmd.contains("clear")) {
logWindow.cleanLog();
return;
- } else if (cmd.contains("java21")) {
- shellUtil.append("cd " + javaDir);
- if (!new File(javaDir, "jre21").exists() && !new File(javaDir, "jre17_").exists()) {
- shellUtil.append("cp " + new File(new File(FCLPath.SHARED_COMMON_DIR).getParentFile(), "jre21.zip").getAbsolutePath() + " ./");
- shellUtil.append("unzip jre21.zip");
- }
- shellUtil.append("mv jre17 jre17_");
- shellUtil.append("mv jre21 jre17");
- return;
- } else if (cmd.contains("java17")) {
- shellUtil.append("cd " + javaDir);
- shellUtil.append("mv jre17 jre21");
- shellUtil.append("mv jre17_ jre17");
- return;
}
shellUtil.append(cmd);
}
diff --git a/FCL/src/main/java/com/tungsten/fcl/fragment/RuntimeFragment.java b/FCL/src/main/java/com/tungsten/fcl/fragment/RuntimeFragment.java
index 8d44d0ea..2d7af933 100644
--- a/FCL/src/main/java/com/tungsten/fcl/fragment/RuntimeFragment.java
+++ b/FCL/src/main/java/com/tungsten/fcl/fragment/RuntimeFragment.java
@@ -30,6 +30,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
boolean lwjgl = false;
boolean cacio = false;
+ boolean cacio11 = false;
boolean cacio17 = false;
boolean java8 = false;
boolean java11 = false;
@@ -38,6 +39,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
private FCLProgressBar lwjglProgress;
private FCLProgressBar cacioProgress;
+ private FCLProgressBar cacio11Progress;
private FCLProgressBar cacio17Progress;
private FCLProgressBar java8Progress;
private FCLProgressBar java11Progress;
@@ -46,6 +48,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
private FCLImageView lwjglState;
private FCLImageView cacioState;
+ private FCLImageView cacio11State;
private FCLImageView cacio17State;
private FCLImageView java8State;
private FCLImageView java11State;
@@ -61,6 +64,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
lwjglProgress = findViewById(view, R.id.lwjgl_progress);
cacioProgress = findViewById(view, R.id.cacio_progress);
+ cacio11Progress = findViewById(view, R.id.cacio11_progress);
cacio17Progress = findViewById(view, R.id.cacio17_progress);
java8Progress = findViewById(view, R.id.java8_progress);
java11Progress = findViewById(view, R.id.java11_progress);
@@ -69,6 +73,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
lwjglState = findViewById(view, R.id.lwjgl_state);
cacioState = findViewById(view, R.id.cacio_state);
+ cacio11State = findViewById(view, R.id.cacio11_state);
cacio17State = findViewById(view, R.id.cacio17_state);
java8State = findViewById(view, R.id.java8_state);
java11State = findViewById(view, R.id.java11_state);
@@ -91,6 +96,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
try {
lwjgl = RuntimeUtils.isLatest(FCLPath.LWJGL_DIR, "/assets/app_runtime/lwjgl");
cacio = RuntimeUtils.isLatest(FCLPath.CACIOCAVALLO_8_DIR, "/assets/app_runtime/caciocavallo");
+ cacio11 = RuntimeUtils.isLatest(FCLPath.CACIOCAVALLO_11_DIR, "/assets/app_runtime/caciocavallo11");
cacio17 = RuntimeUtils.isLatest(FCLPath.CACIOCAVALLO_17_DIR, "/assets/app_runtime/caciocavallo17");
java8 = RuntimeUtils.isLatest(FCLPath.JAVA_8_PATH, "/assets/app_runtime/java/jre8");
java11 = RuntimeUtils.isLatest(FCLPath.JAVA_11_PATH, "/assets/app_runtime/java/jre11");
@@ -111,6 +117,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
lwjglState.setBackgroundDrawable(lwjgl ? stateDone : stateUpdate);
cacioState.setBackgroundDrawable(cacio ? stateDone : stateUpdate);
+ cacio11State.setBackgroundDrawable(cacio11 ? stateDone : stateUpdate);
cacio17State.setBackgroundDrawable(cacio17 ? stateDone : stateUpdate);
java8State.setBackgroundDrawable(java8 ? stateDone : stateUpdate);
java11State.setBackgroundDrawable(java11 ? stateDone : stateUpdate);
@@ -120,7 +127,7 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
}
private boolean isLatest() {
- return lwjgl && cacio && cacio17 && java8 && java11 && java17 && java21;
+ return lwjgl && cacio && cacio11 && cacio17 && java8 && java11 && java17 && java21;
}
private void check() {
@@ -178,6 +185,26 @@ public class RuntimeFragment extends FCLFragment implements View.OnClickListener
}
}).start();
}
+ if (!cacio11) {
+ cacio11State.setVisibility(View.GONE);
+ cacio11Progress.setVisibility(View.VISIBLE);
+ new Thread(() -> {
+ try {
+ RuntimeUtils.install(getContext(), FCLPath.CACIOCAVALLO_11_DIR, "app_runtime/caciocavallo11");
+ cacio11 = true;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (getActivity() != null) {
+ getActivity().runOnUiThread(() -> {
+ cacio11State.setVisibility(View.VISIBLE);
+ cacio11Progress.setVisibility(View.GONE);
+ refreshDrawables();
+ check();
+ });
+ }
+ }).start();
+ }
if (!cacio17) {
cacio17State.setVisibility(View.GONE);
cacio17Progress.setVisibility(View.VISIBLE);
diff --git a/FCL/src/main/java/com/tungsten/fcl/game/JarExecutorLauncher.java b/FCL/src/main/java/com/tungsten/fcl/game/JarExecutorLauncher.java
index 31cafecc..4fbf3406 100644
--- a/FCL/src/main/java/com/tungsten/fcl/game/JarExecutorLauncher.java
+++ b/FCL/src/main/java/com/tungsten/fcl/game/JarExecutorLauncher.java
@@ -14,7 +14,6 @@ import com.tungsten.fclcore.util.platform.MemoryUtils;
import java.io.File;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -64,7 +63,7 @@ public class JarExecutorLauncher extends Launcher {
if (isJava8) {
res.addDefault("-Dawt.toolkit=", "net.java.openjdk.cacio.ctc.CTCToolkit");
res.addDefault("-Djava.awt.graphicsenv=", "net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment");
- } else if (!isJava11) {
+ } else {
res.addDefault("-Dawt.toolkit=", "com.github.caciocavallosilano.cacio.ctc.CTCToolkit");
res.addDefault("-Djava.awt.graphicsenv=", "com.github.caciocavallosilano.cacio.ctc.CTCGraphicsEnvironment");
res.addDefault("-Djava.system.class.loader=", "com.github.caciocavallosilano.cacio.ctc.CTCPreloadClassLoader");
@@ -89,7 +88,7 @@ public class JarExecutorLauncher extends Launcher {
StringBuilder cacioClasspath = new StringBuilder();
cacioClasspath.append("-Xbootclasspath/").append(isJava8 ? "p" : "a");
- File cacioDir = new File(isJava8 ? FCLPath.CACIOCAVALLO_8_DIR : FCLPath.CACIOCAVALLO_17_DIR);
+ File cacioDir = new File(isJava8 ? FCLPath.CACIOCAVALLO_8_DIR : isJava11 ? FCLPath.CACIOCAVALLO_11_DIR : FCLPath.CACIOCAVALLO_17_DIR);
if (cacioDir.exists() && cacioDir.isDirectory()) {
for (File file : Objects.requireNonNull(cacioDir.listFiles())) {
if (file.getName().endsWith(".jar")) {
diff --git a/FCL/src/main/res/layout/fragment_runtime.xml b/FCL/src/main/res/layout/fragment_runtime.xml
index 9f12b256..b8fd4563 100644
--- a/FCL/src/main/res/layout/fragment_runtime.xml
+++ b/FCL/src/main/res/layout/fragment_runtime.xml
@@ -97,6 +97,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Install or update app runtime
LWJGL
Caciocavallo
+ Caciocavallo 11
Caciocavallo 17
JRE 8
JRE 11
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java b/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java
index 21a1d789..de80f9e9 100644
--- a/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java
@@ -237,7 +237,7 @@ public class DefaultLauncher extends Launcher {
if (isJava8) {
res.addDefault("-Dawt.toolkit=", "net.java.openjdk.cacio.ctc.CTCToolkit");
res.addDefault("-Djava.awt.graphicsenv=", "net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment");
- } else if (!isJava11) {
+ } else {
res.addDefault("-Dawt.toolkit=", "com.github.caciocavallosilano.cacio.ctc.CTCToolkit");
res.addDefault("-Djava.awt.graphicsenv=", "com.github.caciocavallosilano.cacio.ctc.CTCGraphicsEnvironment");
res.addDefault("-Djava.system.class.loader=", "com.github.caciocavallosilano.cacio.ctc.CTCPreloadClassLoader");
@@ -262,7 +262,7 @@ public class DefaultLauncher extends Launcher {
StringBuilder cacioClasspath = new StringBuilder();
cacioClasspath.append("-Xbootclasspath/").append(isJava8 ? "p" : "a");
- File cacioDir = new File(isJava8 ? FCLPath.CACIOCAVALLO_8_DIR : FCLPath.CACIOCAVALLO_17_DIR);
+ File cacioDir = new File(isJava8 ? FCLPath.CACIOCAVALLO_8_DIR : isJava11 ? FCLPath.CACIOCAVALLO_11_DIR : FCLPath.CACIOCAVALLO_17_DIR);
if (cacioDir.exists() && cacioDir.isDirectory()) {
for (File file : Objects.requireNonNull(cacioDir.listFiles())) {
if (file.getName().endsWith(".jar")) {
diff --git a/FCLauncher/src/main/java/com/tungsten/fclauncher/utils/FCLPath.java b/FCLauncher/src/main/java/com/tungsten/fclauncher/utils/FCLPath.java
index 477b2538..c4a7e167 100644
--- a/FCLauncher/src/main/java/com/tungsten/fclauncher/utils/FCLPath.java
+++ b/FCLauncher/src/main/java/com/tungsten/fclauncher/utils/FCLPath.java
@@ -21,6 +21,7 @@ public class FCLPath {
public static String JAVA_21_PATH;
public static String LWJGL_DIR;
public static String CACIOCAVALLO_8_DIR;
+ public static String CACIOCAVALLO_11_DIR;
public static String CACIOCAVALLO_17_DIR;
public static String FILES_DIR;
@@ -51,6 +52,7 @@ public class FCLPath {
JAVA_21_PATH = RUNTIME_DIR + "/java/jre21";
LWJGL_DIR = RUNTIME_DIR + "/lwjgl";
CACIOCAVALLO_8_DIR = RUNTIME_DIR + "/caciocavallo";
+ CACIOCAVALLO_11_DIR = RUNTIME_DIR + "/caciocavallo11";
CACIOCAVALLO_17_DIR = RUNTIME_DIR + "/caciocavallo17";
FILES_DIR = context.getFilesDir().getAbsolutePath();
@@ -74,6 +76,7 @@ public class FCLPath {
init(JAVA_21_PATH);
init(LWJGL_DIR);
init(CACIOCAVALLO_8_DIR);
+ init(CACIOCAVALLO_11_DIR);
init(CACIOCAVALLO_17_DIR);
init(FILES_DIR);
init(PLUGIN_DIR);