auto select jna so
This commit is contained in:
parent
5230a4f2a7
commit
1ccab72fc3
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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(() -> {
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue