auto select jna so

This commit is contained in:
ShirosakiMio 2024-08-20 14:59:05 +08:00
parent 5230a4f2a7
commit 1ccab72fc3
10 changed files with 812 additions and 707 deletions

Binary file not shown.

View File

@ -0,0 +1 @@
1

View File

@ -1,331 +0,0 @@
package com.tungsten.fcl.fragment;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.tungsten.fcl.R;
import com.tungsten.fcl.activity.SplashActivity;
import com.tungsten.fcl.util.RuntimeUtils;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.util.io.FileUtils;
import com.tungsten.fcllibrary.component.FCLFragment;
import com.tungsten.fcllibrary.component.view.FCLProgressBar;
import com.tungsten.fcllibrary.util.LocaleUtils;
import com.tungsten.fcllibrary.component.view.FCLButton;
import com.tungsten.fcllibrary.component.view.FCLImageView;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
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;
boolean java17 = false;
boolean java21 = false;
private FCLProgressBar lwjglProgress;
private FCLProgressBar cacioProgress;
private FCLProgressBar cacio11Progress;
private FCLProgressBar cacio17Progress;
private FCLProgressBar java8Progress;
private FCLProgressBar java11Progress;
private FCLProgressBar java17Progress;
private FCLProgressBar java21Progress;
private FCLImageView lwjglState;
private FCLImageView cacioState;
private FCLImageView cacio11State;
private FCLImageView cacio17State;
private FCLImageView java8State;
private FCLImageView java11State;
private FCLImageView java17State;
private FCLImageView java21State;
private FCLButton install;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_runtime, container, false);
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);
java17Progress = findViewById(view, R.id.java17_progress);
java21Progress = findViewById(view, R.id.java21_progress);
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);
java17State = findViewById(view, R.id.java17_state);
java21State = findViewById(view, R.id.java21_state);
initState();
refreshDrawables();
check();
install = findViewById(view, R.id.install);
install.setOnClickListener(this);
return view;
}
private void initState() {
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");
java17 = RuntimeUtils.isLatest(FCLPath.JAVA_17_PATH, "/assets/app_runtime/java/jre17");
java21 = RuntimeUtils.isLatest(FCLPath.JAVA_21_PATH, "/assets/app_runtime/java/jre21");
} catch (IOException e) {
e.printStackTrace();
}
}
private void refreshDrawables() {
if (getContext() != null) {
@SuppressLint("UseCompatLoadingForDrawables") Drawable stateUpdate = getContext().getDrawable(R.drawable.ic_baseline_update_24);
@SuppressLint("UseCompatLoadingForDrawables") Drawable stateDone = getContext().getDrawable(R.drawable.ic_baseline_done_24);
stateUpdate.setTint(Color.GRAY);
stateDone.setTint(Color.GRAY);
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);
java17State.setBackgroundDrawable(java17 ? stateDone : stateUpdate);
java21State.setBackgroundDrawable(java21 ? stateDone : stateUpdate);
}
}
private boolean isLatest() {
return lwjgl && cacio && cacio11 && cacio17 && java8 && java11 && java17 && java21;
}
private void check() {
if (isLatest()) {
if (getActivity() != null) {
((SplashActivity) getActivity()).enterLauncher();
}
}
}
private boolean installing = false;
private void install() {
if (installing)
return;
installing = true;
if (!lwjgl) {
lwjglState.setVisibility(View.GONE);
lwjglProgress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.install(getContext(), FCLPath.LWJGL_DIR, "app_runtime/lwjgl");
lwjgl = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
lwjglState.setVisibility(View.VISIBLE);
lwjglProgress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
if (!cacio) {
cacioState.setVisibility(View.GONE);
cacioProgress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.install(getContext(), FCLPath.CACIOCAVALLO_8_DIR, "app_runtime/caciocavallo");
cacio = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
cacioState.setVisibility(View.VISIBLE);
cacioProgress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).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);
new Thread(() -> {
try {
RuntimeUtils.install(getContext(), FCLPath.CACIOCAVALLO_17_DIR, "app_runtime/caciocavallo17");
cacio17 = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
cacio17State.setVisibility(View.VISIBLE);
cacio17Progress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
if (!java8) {
java8State.setVisibility(View.GONE);
java8Progress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.installJava(getContext(), FCLPath.JAVA_8_PATH, "app_runtime/java/jre8");
java8 = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
java8State.setVisibility(View.VISIBLE);
java8Progress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
if (!java11) {
java11State.setVisibility(View.GONE);
java11Progress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.installJava(getContext(), FCLPath.JAVA_11_PATH, "app_runtime/java/jre11");
if (!LocaleUtils.getSystemLocale().getDisplayName().equals(Locale.CHINA.getDisplayName())) {
FileUtils.writeText(new File(FCLPath.JAVA_11_PATH + "/resolv.conf"), "nameserver 1.1.1.1\n" + "nameserver 1.0.0.1");
} else {
FileUtils.writeText(new File(FCLPath.JAVA_11_PATH + "/resolv.conf"), "nameserver 8.8.8.8\n" + "nameserver 8.8.4.4");
}
java11 = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
java11State.setVisibility(View.VISIBLE);
java11Progress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
if (!java17) {
java17State.setVisibility(View.GONE);
java17Progress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.installJava(getContext(), FCLPath.JAVA_17_PATH, "app_runtime/java/jre17");
if (!LocaleUtils.getSystemLocale().getDisplayName().equals(Locale.CHINA.getDisplayName())) {
FileUtils.writeText(new File(FCLPath.JAVA_17_PATH + "/resolv.conf"), "nameserver 1.1.1.1\n" + "nameserver 1.0.0.1");
} else {
FileUtils.writeText(new File(FCLPath.JAVA_17_PATH + "/resolv.conf"), "nameserver 8.8.8.8\n" + "nameserver 8.8.4.4");
}
java17 = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
java17State.setVisibility(View.VISIBLE);
java17Progress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
if (!java21) {
java21State.setVisibility(View.GONE);
java21Progress.setVisibility(View.VISIBLE);
new Thread(() -> {
try {
RuntimeUtils.installJava(getContext(), FCLPath.JAVA_21_PATH, "app_runtime/java/jre21");
if (!LocaleUtils.getSystemLocale().getDisplayName().equals(Locale.CHINA.getDisplayName())) {
FileUtils.writeText(new File(FCLPath.JAVA_21_PATH + "/resolv.conf"), "nameserver 1.1.1.1\n" + "nameserver 1.0.0.1");
} else {
FileUtils.writeText(new File(FCLPath.JAVA_21_PATH + "/resolv.conf"), "nameserver 8.8.8.8\n" + "nameserver 8.8.4.4");
}
java21 = true;
} catch (IOException e) {
e.printStackTrace();
}
if (getActivity() != null) {
getActivity().runOnUiThread(() -> {
java21State.setVisibility(View.VISIBLE);
java21Progress.setVisibility(View.GONE);
refreshDrawables();
check();
});
}
}).start();
}
}
@Override
public void onClick(View view) {
if (view == install) {
install();
}
}
}

View File

@ -0,0 +1,363 @@
package com.tungsten.fcl.fragment
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import com.tungsten.fcl.R
import com.tungsten.fcl.activity.SplashActivity
import com.tungsten.fcl.databinding.FragmentRuntimeBinding
import com.tungsten.fcl.util.RuntimeUtils
import com.tungsten.fclauncher.utils.FCLPath
import com.tungsten.fclcore.util.io.FileUtils
import com.tungsten.fcllibrary.component.FCLFragment
import com.tungsten.fcllibrary.component.view.FCLButton
import com.tungsten.fcllibrary.component.view.FCLImageView
import com.tungsten.fcllibrary.component.view.FCLProgressBar
import com.tungsten.fcllibrary.util.LocaleUtils
import java.io.File
import java.io.IOException
import java.util.Locale
class RuntimeFragment : FCLFragment(), View.OnClickListener {
private lateinit var bind: FragmentRuntimeBinding
var lwjgl: Boolean = false
var cacio: Boolean = false
var cacio11: Boolean = false
var cacio17: Boolean = false
var java8: Boolean = false
var java11: Boolean = false
var java17: Boolean = false
var java21: Boolean = false
var jna: Boolean = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_runtime, container, false)
bind = FragmentRuntimeBinding.bind(view)
initState()
refreshDrawables()
check()
bind.install.setOnClickListener(this)
return view
}
private fun initState() {
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")
java17 = RuntimeUtils.isLatest(FCLPath.JAVA_17_PATH, "/assets/app_runtime/java/jre17")
java21 = RuntimeUtils.isLatest(FCLPath.JAVA_21_PATH, "/assets/app_runtime/java/jre21")
jna = RuntimeUtils.isLatest(FCLPath.JNA_PATH, "/assets/app_runtime/jna")
} catch (e: IOException) {
e.printStackTrace()
}
}
private fun refreshDrawables() {
if (context != null) {
val stateUpdate =
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_baseline_update_24)
val stateDone =
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_baseline_done_24)
stateUpdate?.setTint(Color.GRAY)
stateDone?.setTint(Color.GRAY)
bind.apply {
lwjglState.setBackgroundDrawable(if (lwjgl) stateDone else stateUpdate)
cacioState.setBackgroundDrawable(if (cacio) stateDone else stateUpdate)
cacio11State.setBackgroundDrawable(if (cacio11) stateDone else stateUpdate)
cacio17State.setBackgroundDrawable(if (cacio17) stateDone else stateUpdate)
java8State.setBackgroundDrawable(if (java8) stateDone else stateUpdate)
java11State.setBackgroundDrawable(if (java11) stateDone else stateUpdate)
java17State.setBackgroundDrawable(if (java17) stateDone else stateUpdate)
java21State.setBackgroundDrawable(if (java21) stateDone else stateUpdate)
jnaState.setBackgroundDrawable(if (jna) stateDone else stateUpdate)
}
}
}
private val isLatest: Boolean
get() = lwjgl && cacio && cacio11 && cacio17 && java8 && java11 && java17 && java21 && jna
private fun check() {
if (isLatest) {
(activity as SplashActivity).enterLauncher()
}
}
private var installing = false
private fun install() {
if (installing) return
bind.apply {
installing = true
if (!lwjgl) {
lwjglState.visibility = View.GONE
lwjglProgress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.install(context, FCLPath.LWJGL_DIR, "app_runtime/lwjgl")
lwjgl = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
lwjglState.visibility = View.VISIBLE
lwjglProgress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!cacio) {
cacioState.visibility = View.GONE
cacioProgress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.install(
context,
FCLPath.CACIOCAVALLO_8_DIR,
"app_runtime/caciocavallo"
)
cacio = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
cacioState.visibility = View.VISIBLE
cacioProgress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!cacio11) {
cacio11State.visibility = View.GONE
cacio11Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.install(
context,
FCLPath.CACIOCAVALLO_11_DIR,
"app_runtime/caciocavallo11"
)
cacio11 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
cacio11State.visibility = View.VISIBLE
cacio11Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!cacio17) {
cacio17State.visibility = View.GONE
cacio17Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.install(
context,
FCLPath.CACIOCAVALLO_17_DIR,
"app_runtime/caciocavallo17"
)
cacio17 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
cacio17State.visibility = View.VISIBLE
cacio17Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!java8) {
java8State.visibility = View.GONE
java8Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.installJava(
context,
FCLPath.JAVA_8_PATH,
"app_runtime/java/jre8"
)
java8 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
java8State.visibility = View.VISIBLE
java8Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!java11) {
java11State.visibility = View.GONE
java11Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.installJava(
context,
FCLPath.JAVA_11_PATH,
"app_runtime/java/jre11"
)
if (LocaleUtils.getSystemLocale().displayName != Locale.CHINA.displayName) {
FileUtils.writeText(
File(FCLPath.JAVA_11_PATH + "/resolv.conf"), """
nameserver 1.1.1.1
nameserver 1.0.0.1
""".trimIndent()
)
} else {
FileUtils.writeText(
File(FCLPath.JAVA_11_PATH + "/resolv.conf"), """
nameserver 8.8.8.8
nameserver 8.8.4.4
""".trimIndent()
)
}
java11 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
java11State.visibility = View.VISIBLE
java11Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!java17) {
java17State.visibility = View.GONE
java17Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.installJava(
context,
FCLPath.JAVA_17_PATH,
"app_runtime/java/jre17"
)
if (LocaleUtils.getSystemLocale().displayName != Locale.CHINA.displayName) {
FileUtils.writeText(
File(FCLPath.JAVA_17_PATH + "/resolv.conf"), """
nameserver 1.1.1.1
nameserver 1.0.0.1
""".trimIndent()
)
} else {
FileUtils.writeText(
File(FCLPath.JAVA_17_PATH + "/resolv.conf"), """
nameserver 8.8.8.8
nameserver 8.8.4.4
""".trimIndent()
)
}
java17 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
java17State.visibility = View.VISIBLE
java17Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!java21) {
java21State.visibility = View.GONE
java21Progress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.installJava(
context,
FCLPath.JAVA_21_PATH,
"app_runtime/java/jre21"
)
if (LocaleUtils.getSystemLocale().displayName != Locale.CHINA.displayName) {
FileUtils.writeText(
File(FCLPath.JAVA_21_PATH + "/resolv.conf"), """
nameserver 1.1.1.1
nameserver 1.0.0.1
""".trimIndent()
)
} else {
FileUtils.writeText(
File(FCLPath.JAVA_21_PATH + "/resolv.conf"), """
nameserver 8.8.8.8
nameserver 8.8.4.4
""".trimIndent()
)
}
java21 = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
java21State.visibility = View.VISIBLE
java21Progress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
if (!jna) {
jnaState.visibility = View.GONE
jnaProgress.visibility = View.VISIBLE
Thread {
try {
RuntimeUtils.installJna(
context,
FCLPath.JNA_PATH,
"app_runtime/jna"
)
jna = true
} catch (e: IOException) {
e.printStackTrace()
}
activity?.runOnUiThread {
jnaState.visibility = View.VISIBLE
jnaProgress.visibility = View.GONE
refreshDrawables()
check()
}
}.start()
}
}
}
override fun onClick(view: View) {
if (view === bind.install) {
install()
}
}
}

View File

@ -161,13 +161,19 @@ public final class LauncherHelper {
.thenComposeAsync(() -> logIn(context, account).withStage("launch.state.logging_in"))
.thenComposeAsync(authInfo -> Task.supplyAsync(() -> {
LaunchOptions launchOptions = repository.getLaunchOptions(selectedVersion, javaVersionRef.get(), profile.getGameDir(), javaAgents);
return new FCLGameLauncher(
FCLGameLauncher launcher = new FCLGameLauncher(
context,
repository,
version.get(),
authInfo,
launchOptions
);
version.get().getLibraries().forEach(library -> {
if (library.getName().startsWith("net.java.dev.jna:jna:")) {
launcher.setJnaVersion(library.getVersion());
}
});
return launcher;
}).thenComposeAsync(launcher -> { // launcher is prev task's result
return Task.supplyAsync(launcher::launch);
}).thenAcceptAsync(fclBridge -> Schedulers.androidUIThread().execute(() -> {

View File

@ -5,10 +5,12 @@ import android.system.Os;
import com.tungsten.fclauncher.FCLauncher;
import com.tungsten.fclauncher.utils.Architecture;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.util.Logging;
import com.tungsten.fclcore.util.Pack200Utils;
import com.tungsten.fclcore.util.io.FileUtils;
import com.tungsten.fclcore.util.io.IOUtils;
import com.tungsten.fclcore.util.io.Unzipper;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
@ -37,6 +39,15 @@ public class RuntimeUtils {
copyAssets(context, srcDir, targetDir);
}
public static void installJna(Context context, String targetDir, String srcDir) throws IOException {
FileUtils.deleteDirectory(new File(targetDir));
new File(targetDir).mkdirs();
copyAssets(context, srcDir, targetDir);
File file = new File(FCLPath.JNA_PATH, "jna-arm64.zip");
new Unzipper(file, new File(FCLPath.RUNTIME_DIR)).unzip();
file.delete();
}
@SuppressWarnings("ResultOfMethodCallIgnored")
public static void installJava(Context context, String targetDir, String srcDir) throws IOException {
FileUtils.deleteDirectory(new File(targetDir));

View File

@ -1,381 +1,425 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<layout>
<ScrollView
android:id="@+id/runtime_parent"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintWidth_percent="0.7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
<ScrollView
android:id="@+id/runtime_parent"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintWidth_percent="0.7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_lwjgl"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/lwjgl_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lwjgl_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio11"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio11_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio11_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio17"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio17_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio17_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java8"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java8_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java8_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java11"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java11_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java11_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java17"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java17_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:backgroundTint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java17_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java21"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java21_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:backgroundTint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java21_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_jna"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/jna_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:backgroundTint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/jna_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
<View
android:id="@+id/split"
android:background="@android:color/darker_gray"
android:layout_width="1dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/runtime_parent"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_marginTop="10dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/splash_runtime_title"
app:layout_constraintStart_toEndOf="@id/split"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLButton
android:text="@string/splash_runtime_install"
android:id="@+id/install"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
app:layout_constraintStart_toEndOf="@id/split"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_lwjgl"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/lwjgl_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lwjgl_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio11"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio11_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio11_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_cacio17"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/cacio17_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cacio17_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java8"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java8_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java8_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java11"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java11_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:tint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java11_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java17"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java17_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:backgroundTint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java17_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/splash_runtime_java21"
android:layout_gravity="center"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.tungsten.fcllibrary.component.view.FCLProgressBar
android:visibility="gone"
android:layout_width="24dp"
android:layout_height="24dp"
android:id="@+id/java21_progress"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
<com.tungsten.fcllibrary.component.view.FCLImageView
app:auto_src_tint="false"
android:backgroundTint="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/java21_state"
android:layout_gravity="center"
android:layout_marginStart="10dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
<View
android:id="@+id/split"
android:background="@android:color/darker_gray"
android:layout_width="1dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/runtime_parent"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_marginTop="10dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/splash_runtime_title"
app:layout_constraintStart_toEndOf="@id/split"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<com.tungsten.fcllibrary.component.view.FCLButton
android:text="@string/splash_runtime_install"
android:id="@+id/install"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
app:layout_constraintStart_toEndOf="@id/split"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -22,6 +22,7 @@
<string name="splash_runtime_java11" translatable="false">JRE 11</string>
<string name="splash_runtime_java17" translatable="false">JRE 17</string>
<string name="splash_runtime_java21" translatable="false">JRE 21</string>
<string name="splash_runtime_jna" translatable="false">JNA</string>
<string name="splash_runtime_install">Install / Update</string>
<string name="account">Account</string>

View File

@ -54,6 +54,7 @@ import java.util.logging.Level;
import java.util.stream.Collectors;
public class DefaultLauncher extends Launcher {
private String jnaVersion;
public DefaultLauncher(Context context, GameRepository repository, Version version, AuthInfo authInfo, LaunchOptions options) {
super(context, repository, version, authInfo, options);
@ -152,6 +153,9 @@ public class DefaultLauncher extends Launcher {
res.addDefault("-Duser.timezone=", TimeZone.getDefault().getID());
res.addDefault("-Dorg.lwjgl.vulkan.libname=", "libvulkan.so");
File libJna = new File(FCLPath.RUNTIME_DIR, "jna");
if (jnaVersion != null && !jnaVersion.isEmpty()) {
libJna = new File(libJna, jnaVersion);
}
res.addDefault("-Djna.boot.library.path=", libJna.exists() ? libJna.getAbsolutePath() : context.getApplicationInfo().nativeLibraryDir);
if (getInjectorArg() != null && options.isBeGesture()) {
@ -436,4 +440,8 @@ public class DefaultLauncher extends Launcher {
config.setUseVKDriverSystem(options.isVKDriverSystem());
return FCLauncher.launchMinecraft(config);
}
public void setJnaVersion(String jnaVersion) {
this.jnaVersion = jnaVersion;
}
}

View File

@ -19,6 +19,7 @@ public class FCLPath {
public static String JAVA_11_PATH;
public static String JAVA_17_PATH;
public static String JAVA_21_PATH;
public static String JNA_PATH;
public static String LWJGL_DIR;
public static String CACIOCAVALLO_8_DIR;
public static String CACIOCAVALLO_11_DIR;
@ -51,6 +52,7 @@ public class FCLPath {
JAVA_11_PATH = RUNTIME_DIR + "/java/jre11";
JAVA_17_PATH = RUNTIME_DIR + "/java/jre17";
JAVA_21_PATH = RUNTIME_DIR + "/java/jre21";
JNA_PATH = RUNTIME_DIR + "/jna";
LWJGL_DIR = RUNTIME_DIR + "/lwjgl";
CACIOCAVALLO_8_DIR = RUNTIME_DIR + "/caciocavallo";
CACIOCAVALLO_11_DIR = RUNTIME_DIR + "/caciocavallo11";