mirror of
https://github.com/xoureldeen/Vectras-VM-Android.git
synced 2026-04-28 06:19:49 +00:00
3.5.0
- 3dfx is back. - Fixed instdrv.exe crashing. - Added option to use SDL with X11. - Fixed incorrect 32-bit or 64-bit display on Android x86. - Added QEMU documentation.
This commit is contained in:
parent
c9a5e10c81
commit
e81a0c43c5
21 changed files with 258 additions and 35 deletions
Binary file not shown.
|
|
@ -71,7 +71,8 @@ We publish a **new beta release after every commit** — so you can always test
|
|||
|
||||
### Bootstraps
|
||||
QEMU 9.2.4 - 3dfx:
|
||||
- [arm64 (for phone or tablet)](https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.4.9/base-vectras-vm-arm64-v8a.tar.gz)
|
||||
- [arm64 (for phone or tablet)](https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.5.0/base-nosve-vectras-vm-arm64-v8a.tar.gz)
|
||||
- [x86_64 (for PC)](https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.5.0/base-vectras-vm-x86_64.tar.gz)
|
||||
|
||||
QEMU 9.2.2 - 3dfx:
|
||||
- [arm64 (for phone or tablet)](https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.2.9/base-vectras-vm-arm64-v8a.tar.gz)
|
||||
|
|
@ -83,7 +84,7 @@ QEMU 8.2.0 - 3dfx:
|
|||
|
||||
### 3Dfx Wrappers
|
||||
|
||||
- [For QEMU 9.2.2 - 3dfx](https://github.com/AnBui2004/Vectras-VM-Emu-Android/blob/master/3dfx/3dfx-wrappers-3.4.7.iso)
|
||||
- [For QEMU 9.2.4 - 3dfx](https://github.com/AnBui2004/Vectras-VM-Emu-Android/blob/master/3dfx/3dfx-wrappers-3.5.0.iso)
|
||||
- [For QEMU 8.2.0 - 3dfx](https://github.com/AnBui2004/Vectras-VM-Emu-Android/blob/master/3dfx/3dfx-wrappers-2.9.5.iso)
|
||||
|
||||
# Donate
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ android {
|
|||
applicationId "com.vectras.vm"
|
||||
minSdk minApi
|
||||
targetSdk targetApi
|
||||
versionCode 53
|
||||
versionName "3.4.9"
|
||||
versionCode 54
|
||||
versionName "3.5.0"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled true
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
|
|
@ -23,7 +24,6 @@
|
|||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission
|
||||
android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
|
|
@ -49,6 +49,9 @@
|
|||
android:requestLegacyExternalStorage="true"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
android:name=".WebViewActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".settings.X11DisplaySettingsActivity"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
|
||||
|
|
|
|||
|
|
@ -1108,6 +1108,18 @@ public class MainSettingsManager extends AppCompatActivity
|
|||
return prefs.getBoolean("runQemuWithXterm", true);
|
||||
}
|
||||
|
||||
public static void setUseSdl(Context context, Boolean _boolean) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = prefs.edit();
|
||||
edit.putBoolean("useSdl", _boolean);
|
||||
edit.apply();
|
||||
}
|
||||
|
||||
public static Boolean getUseSdl(Context context) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
return prefs.getBoolean("useSdl", false);
|
||||
}
|
||||
|
||||
public static void setStandardSetupVersion(Context context, int value) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = prefs.edit();
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ import java.util.Objects;
|
|||
public class AppConfig {
|
||||
|
||||
// App Config
|
||||
public static String vectrasVersion = "3.0.0";
|
||||
public static int vectrasVersionCode = 21;
|
||||
public static final int standardSetupVersion = 924;
|
||||
public static String vectrasVersion = "3.5.0";
|
||||
public static int vectrasVersionCode = 54;
|
||||
public static final int standardSetupVersion = 9241;
|
||||
public static String vectrasWebsite = "https://vectras.vercel.app/";
|
||||
public static String vectrasWebsiteRaw = "https://raw.githubusercontent.com/AnBui2004/Vectras-VM-Emu-Android/refs/heads/master/web/";
|
||||
public static String bootstrapfileslink = vectrasWebsiteRaw + "/data/setupfiles2.json";
|
||||
|
|
@ -78,7 +78,8 @@ public class AppConfig {
|
|||
public static String neededPkgs = "bash aria2 tar dwm xfce4-terminal xterm libslirp libslirp-dev pulseaudio-dev glib-dev pixman-dev zlib-dev spice-dev" +
|
||||
" libusbredirparser usbredir-dev sdl2 sdl2-dev sdl2_image-dev libepoxy-dev virglrenderer-dev rdma-core fluxbox" +
|
||||
" libusb libaio ncurses-libs curl libnfs gtk+3.0 gtk+3.0-dev fuse libpulse libseccomp jack pipewire liburing pulseaudio pulseaudio-alsa alsa-plugins-pulse" +
|
||||
" mesa-dri-gallium mesa-vulkan-swrast vulkan-loader mesa-utils mesa-egl mesa-gbm mesa-vulkan-ati mesa-vulkan-broadcom mesa-vulkan-freedreno mesa-vulkan-panfrost qemu-audio-sdl capstone libcbor snappy lzo ndctl keyutils-libs vde2-libs libdw libbpf sndio-libs linux-pam fuse3-libs libssh";
|
||||
" mesa-dri-gallium mesa-vulkan-swrast vulkan-loader mesa-utils mesa-egl mesa-gbm mesa-vulkan-ati mesa-vulkan-broadcom mesa-vulkan-freedreno mesa-vulkan-panfrost" +
|
||||
" qemu-audio-sdl capstone libcbor snappy lzo ndctl keyutils-libs vde2-libs libdw libbpf sndio-libs linux-pam fuse3-libs libssh";
|
||||
|
||||
public static String neededPkgs32bit = "bash aria2 tar dwm xterm libslirp libslirp-dev pulseaudio-dev glib-dev pixman-dev zlib-dev spice-dev" +
|
||||
" libusbredirparser usbredir-dev libiscsi-dev sdl2 sdl2-dev libepoxy-dev virglrenderer-dev rdma-core pulseaudio pulseaudio-alsa alsa-plugins-pulse" +
|
||||
|
|
|
|||
|
|
@ -273,13 +273,9 @@ public class StartVM {
|
|||
params.add(spiceStr);
|
||||
} else if (MainSettingsManager.getVmUi(activity).equals("X11")) {
|
||||
params.add("-display");
|
||||
params.add("sdl");
|
||||
params.add(MainSettingsManager.getUseSdl(activity) ? "sdl" : "gtk");
|
||||
params.add("-monitor");
|
||||
if (MainSettingsManager.getRunQemuWithXterm(activity)) {
|
||||
params.add("stdio");
|
||||
} else {
|
||||
params.add("vc");
|
||||
}
|
||||
params.add(MainSettingsManager.getRunQemuWithXterm(activity) ? "stdio" : "vc");
|
||||
}
|
||||
|
||||
//params.add("-full-screen");
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import com.vectras.qemu.utils.QmpClient;
|
|||
import com.vectras.vm.main.MainActivity;
|
||||
import com.vectras.vm.main.core.MainStartVM;
|
||||
import com.vectras.vm.settings.VNCSettingsActivity;
|
||||
import com.vectras.vm.settings.X11DisplaySettingsActivity;
|
||||
import com.vectras.vm.utils.DialogUtils;
|
||||
import com.vectras.vm.utils.FileUtils;
|
||||
import com.vectras.vm.utils.JSONUtils;
|
||||
|
|
@ -648,6 +649,22 @@ public class VMManager {
|
|||
_activity.stopService(new Intent(_activity, MainService.class));
|
||||
isQemuStopedWithError = true;
|
||||
return true;
|
||||
} else if (_result.contains("mesapt: invalid sdl display")) {
|
||||
DialogUtils.twoDialog(_activity,
|
||||
_activity.getResources().getString(R.string.problem_has_been_detected),
|
||||
_activity.getResources().getString(R.string.you_need_to_switch_to_sdl_to_use_3dfx),
|
||||
_activity.getString(R.string.go_to_settings),
|
||||
_activity.getString(R.string.close),
|
||||
true,
|
||||
R.drawable.desktop_24px,
|
||||
true,
|
||||
() -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(_activity, X11DisplaySettingsActivity.class);
|
||||
_activity.startActivity(intent);
|
||||
},
|
||||
null, null);
|
||||
return false;
|
||||
} else if (_command.contains("qemu-system") && _result.contains("qemu-system") && !_result.contains("warning:")) {
|
||||
//Error code: UNKNOW_ERROR
|
||||
DialogUtils.oneDialog(_activity, _activity.getString(R.string.problem_has_been_detected), _activity.getString(R.string.vm_could_not_be_run_content) + "\n\n" + _result, R.drawable.error_96px);
|
||||
|
|
|
|||
87
app/src/main/java/com/vectras/vm/WebViewActivity.java
Normal file
87
app/src/main/java/com/vectras/vm/WebViewActivity.java
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
package com.vectras.vm;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.StrictMode;
|
||||
import android.transition.TransitionManager;
|
||||
import android.view.View;
|
||||
import android.webkit.CookieManager;
|
||||
import android.webkit.WebResourceRequest;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.vectras.vm.databinding.ActivityWebViewBinding;
|
||||
import com.vectras.vm.utils.UIUtils;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class WebViewActivity extends AppCompatActivity {
|
||||
ActivityWebViewBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
UIUtils.edgeToEdge(this);
|
||||
binding = ActivityWebViewBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
UIUtils.setOnApplyWindowInsetsListener(binding.main);
|
||||
|
||||
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
|
||||
StrictMode.setVmPolicy(builder.build());
|
||||
|
||||
binding.webview.getSettings().setJavaScriptEnabled(true);
|
||||
CookieManager.getInstance().setAcceptCookie(true);
|
||||
binding.webview.getSettings().setBuiltInZoomControls(true);
|
||||
binding.webview.getSettings().setDisplayZoomControls(false);
|
||||
binding.webview.getSettings().setAllowFileAccess(true);
|
||||
binding.webview.getSettings().setDatabaseEnabled(true);
|
||||
binding.webview.getSettings().setDomStorageEnabled(true);
|
||||
|
||||
if (getIntent().hasExtra("url") && getIntent().getStringExtra("url") != null)
|
||||
binding.webview.loadUrl(Objects.requireNonNull(getIntent().getStringExtra("url")));
|
||||
else
|
||||
binding.webview.loadUrl(AppConfig.vectrasWebsite);
|
||||
|
||||
binding.webview.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
||||
Uri url = request.getUrl();
|
||||
String scheme = url.getScheme();
|
||||
if ("file".equals(scheme) || "http".equals(scheme) || "https".equals(scheme)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
binding.webview.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
|
||||
if (scrollY > oldScrollY) {
|
||||
if (binding.btnClose.getVisibility() == View.VISIBLE) {
|
||||
TransitionManager.beginDelayedTransition(binding.main);
|
||||
binding.btnClose.setVisibility(View.GONE);
|
||||
}
|
||||
} else if (scrollY < oldScrollY) {
|
||||
if (binding.btnClose.getVisibility() == View.GONE) {
|
||||
TransitionManager.beginDelayedTransition(binding.main);
|
||||
binding.btnClose.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
binding.btnClose.setOnClickListener(v -> finish());
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (binding.webview.canGoBack()) {
|
||||
binding.webview.goBack();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -42,6 +42,7 @@ import com.vectras.vm.AppConfig;
|
|||
import com.vectras.vm.VMCreatorActivity;
|
||||
import com.vectras.vm.Minitools;
|
||||
import com.vectras.vm.R;
|
||||
import com.vectras.vm.WebViewActivity;
|
||||
import com.vectras.vm.databinding.ActivityMainBinding;
|
||||
import com.vectras.vm.databinding.ActivityMainContentBinding;
|
||||
import com.vectras.vm.main.softwarestore.SoftwareStoreFragment;
|
||||
|
|
@ -245,10 +246,7 @@ public class MainActivity extends AppCompatActivity implements RomStoreFragment.
|
|||
public void handleOnBackPressed() {
|
||||
if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
|
||||
binding.drawerLayout.closeDrawer(GravityCompat.START);
|
||||
//Prevent apps from exiting after the drawer is closed.
|
||||
return;
|
||||
}
|
||||
if (binding.searchview.isShowing()) {
|
||||
} else if (binding.searchview.isShowing()) {
|
||||
binding.searchview.hide();
|
||||
} else if (bindingContent.bottomNavigation.getSelectedItemId() != R.id.item_home) {
|
||||
bindingContent.bottomNavigation.setSelectedItemId(R.id.item_home);
|
||||
|
|
@ -411,6 +409,16 @@ public class MainActivity extends AppCompatActivity implements RomStoreFragment.
|
|||
Intent intent = new Intent();
|
||||
intent.setClass(this, Minitools.class);
|
||||
startActivity(intent);
|
||||
} else if (id == R.id.navigation_qemu_doc) {
|
||||
Intent intent = new Intent();
|
||||
if (FileUtils.isFileExists(getFilesDir().getPath() + "/distro/usr/local/share/qemu/doc/index.html")) {
|
||||
intent.putExtra("url", "file://" + getFilesDir().getPath() + "/distro/usr/local/share/qemu/doc/index.html");
|
||||
intent.setClass(this, WebViewActivity.class);
|
||||
} else {
|
||||
intent.setAction(ACTION_VIEW);
|
||||
intent.setData(Uri.parse("https://www.qemu.org/docs/master/"));
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ public class X11DisplaySettingsActivity extends AppCompatActivity {
|
|||
private void initialize() {
|
||||
binding.swEnabled.setChecked(MainSettingsManager.getVmUi(this).equals("X11"));
|
||||
binding.swRunQemuWithXterm.setChecked(MainSettingsManager.getRunQemuWithXterm(this));
|
||||
binding.swUseSdl.setChecked(MainSettingsManager.getUseSdl(this));
|
||||
|
||||
binding.swEnabled.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||
MainSettingsManager.setVmUi(this, isChecked ? "X11" : "VNC");
|
||||
|
|
@ -58,6 +59,9 @@ public class X11DisplaySettingsActivity extends AppCompatActivity {
|
|||
binding.swRunQemuWithXterm.setOnCheckedChangeListener((buttonView, isChecked) -> MainSettingsManager.setRunQemuWithXterm(this, isChecked));
|
||||
binding.lnRunQemuWithXterm.setOnClickListener(v -> binding.swRunQemuWithXterm.toggle());
|
||||
|
||||
binding.swUseSdl.setOnCheckedChangeListener((buttonView, isChecked) -> MainSettingsManager.setUseSdl(this, isChecked));
|
||||
binding.lnUseSdl.setOnClickListener(v -> binding.swUseSdl.toggle());
|
||||
|
||||
isInitialized = true;
|
||||
|
||||
uiController(binding.swEnabled.isChecked());
|
||||
|
|
@ -67,5 +71,6 @@ public class X11DisplaySettingsActivity extends AppCompatActivity {
|
|||
binding.lnAllOptions.setAlpha(isEnabled ? 1f : 0.5f);
|
||||
binding.lnPreferences.setEnabled(isEnabled);
|
||||
binding.lnRunQemuWithXterm.setEnabled(isEnabled);
|
||||
binding.lnUseSdl.setEnabled(isEnabled);
|
||||
}
|
||||
}
|
||||
|
|
@ -458,7 +458,10 @@ public class SetupWizard2Activity extends AppCompatActivity {
|
|||
" echo \"Starting setup...\";" +
|
||||
" apk update;" +
|
||||
" echo \"Installing packages...\";" +
|
||||
" apk add " + (DeviceUtils.is64bit() ? AppConfig.neededPkgs : AppConfig.neededPkgs32bit) + ";" +
|
||||
" apk add " + (DeviceUtils.is64bit() ? (
|
||||
DeviceUtils.isArm() ? AppConfig.neededPkgs :
|
||||
AppConfig.neededPkgs.replace("mesa-vulkan-ati mesa-vulkan-broadcom mesa-vulkan-freedreno", ""))
|
||||
: AppConfig.neededPkgs32bit) + ";" +
|
||||
" echo \"Downloading Qemu...\";";
|
||||
|
||||
if (isCustomSetupMode) {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,10 @@ public class DeviceUtils {
|
|||
}
|
||||
|
||||
public static boolean is64bit() {
|
||||
return Build.SUPPORTED_ABIS[0].contains("arm64");
|
||||
return Build.SUPPORTED_ABIS[0].contains("64");
|
||||
}
|
||||
public static boolean isArm() {
|
||||
return Build.SUPPORTED_ABIS[0].contains("arm");
|
||||
}
|
||||
|
||||
public static boolean isLargeScreen(Context context) {
|
||||
|
|
|
|||
11
app/src/main/res/drawable/docs_24px.xml
Normal file
11
app/src/main/res/drawable/docs_24px.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:autoMirrored="true">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M320,520L640,520L640,440L320,440L320,520ZM320,640L640,640L640,560L320,560L320,640ZM320,760L520,760L520,680L320,680L320,760ZM240,880Q207,880 183.5,856.5Q160,833 160,800L160,160Q160,127 183.5,103.5Q207,80 240,80L560,80L800,320L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM520,360L520,160L240,160Q240,160 240,160Q240,160 240,160L240,800Q240,800 240,800Q240,800 240,800L720,800Q720,800 720,800Q720,800 720,800L720,360L520,360ZM240,160L240,160L240,360L240,360L240,160L240,360L240,360L240,800Q240,800 240,800Q240,800 240,800L240,800Q240,800 240,800Q240,800 240,800L240,160Q240,160 240,160Q240,160 240,160Z"/>
|
||||
</vector>
|
||||
26
app/src/main/res/layout/activity_web_view.xml
Normal file
26
app/src/main/res/layout/activity_web_view.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".WebViewActivity">
|
||||
|
||||
<WebView
|
||||
android:id="@+id/webview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_close"
|
||||
style="@style/Widget.Material3Expressive.Button.IconButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp"
|
||||
android:layout_margin="16dp"
|
||||
app:icon="@drawable/close_24px"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -75,7 +75,8 @@
|
|||
android:id="@+id/ln_run_qemu_with_xterm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/object_shape_bottom_high"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:background="@drawable/object_shape_middle_high"
|
||||
android:padding="16dp" >
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -111,6 +112,47 @@
|
|||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:clickable="false"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/ln_use_sdl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/object_shape_bottom_high"
|
||||
android:padding="16dp" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/sw_use_sdl"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/use_sdl"
|
||||
android:textSize="18sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/use_sdl_note"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:textSize="14sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw_use_sdl"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:clickable="false"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,10 @@
|
|||
android:id="@+id/navigation_item_help"
|
||||
android:icon="@drawable/help_24px"
|
||||
android:title="@string/help"/>
|
||||
<item
|
||||
android:id="@+id/navigation_qemu_doc"
|
||||
android:icon="@drawable/docs_24px"
|
||||
android:title="@string/qemu_documentation"/>
|
||||
<item
|
||||
android:id="@+id/navigation_item_info"
|
||||
android:icon="@drawable/info_24px"
|
||||
|
|
|
|||
|
|
@ -478,6 +478,10 @@
|
|||
<string name="shared_by">Shared by</string>
|
||||
<string name="system_update">System update</string>
|
||||
<string name="system_update_note">You are using an older system, update now.</string>
|
||||
<string name="use_sdl">Use SDL</string>
|
||||
<string name="use_sdl_note">Turn it on if you want to use 3dfx and play old retro games.</string>
|
||||
<string name="qemu_documentation">QEMU documentation</string>
|
||||
<string name="you_need_to_switch_to_sdl_to_use_3dfx">You need to switch to SDL to use 3dfx.</string>
|
||||
|
||||
|
||||
<!--======================TERMUX STRINGS====================-->
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"versionCode":"44",
|
||||
"versionName":"3.4.0",
|
||||
"size": "55 MB",
|
||||
"versionCode":"54",
|
||||
"versionName":"3.5.0",
|
||||
"size": "46 MB",
|
||||
"url": "https://github.com/xoureldeen/Vectras-VM-Android/releases",
|
||||
"Message": "<h2>3.4.0</h2>\n- Fixed the issue of exporting rom with virtual machine ID.\n- New dialog for copying files in creating new virtual machine.\n- New dialog showing information after successful rom import.\n- Fixed no sound playing with Termux.\n- Fixed invalid file path error when using Manual setup.\n- Fixed dialog showing content without line breaks.\n- Fixed rom export error.\n- Added Processes to System monitor.\n- Improved interface.\n- Thinner fonts.\n- Fixed an issue with interaction in Rom store.\n- Fixed the External VNC Server switch being incorrect in certain cases.\n- Removed unnecessary resources.\n- Updated Chinese (Simplified) language (contributed by @WeiguangTWK).\n- Fixed issue with installing system files after not completing the first time.\n- New setup wizard.\n- Added auto return to Home after importing rom and creating virtual machine in Rom store.\n- Improved image viewer.\n- Fixed Unknow display error in architecture in rom info if it is PowerPC architecture.\n- New setup wizard interface that automatically changes according to screen size.\n- New ID generator for virtual machine.\n- Added dialog when deleting virtual machine.",
|
||||
"Message": "<h2>3.5.0</h2>\n3dfx is back!",
|
||||
"cancellable": true,
|
||||
"versionCodeBeta":"53",
|
||||
"versionNameBeta":"3.4.9",
|
||||
"versionNameBetas":"3.0.0,3.1.0,3.2.1,3.2.2,3.2.3,3.2.4,3.2.5,3.2.6,3.2.7,3.2.8,3.2.9,3.2.10,3.3.1,3.3.2,3.3.3,3.3.4,3.3.5,3.3.6,3.3.7,3.3.8,3.3.9,3.4.1,3.4.2,3.4.3,3.4.4,3.4.5,3.4.6,3.4.7,3.4.8,3.4.9",
|
||||
"versionCodeBeta":"54",
|
||||
"versionNameBeta":"3.5.0",
|
||||
"versionNameBetas":"3.0.0,3.1.0,3.2.1,3.2.2,3.2.3,3.2.4,3.2.5,3.2.6,3.2.7,3.2.8,3.2.9,3.2.10,3.3.1,3.3.2,3.3.3,3.3.4,3.3.5,3.3.6,3.3.7,3.3.8,3.3.9,3.4.1,3.4.2,3.4.3,3.4.4,3.4.5,3.4.6,3.4.7,3.4.8,3.4.9,3.5.0",
|
||||
"sizeBeta": "46 MB",
|
||||
"urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases",
|
||||
"MessageBeta": "<h2>3.4.9</h2>Bugs fixed.",
|
||||
"MessageBeta": "<h2>3.5.0</h2>Bugs fixed.",
|
||||
"cancellableBeta": true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"aarch64":"https://go.anbui.ovh/vectrasvm/files/qemu/9.2.4-3dfx/base-vectras-vm-arm64-v8a.tar.gz",
|
||||
"amd64":"https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.2.9/base-vectras-vm-x86_64.tar.gz"
|
||||
"aarch64":"https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.5.0/base-nosve-vectras-vm-arm64-v8a.tar.gz",
|
||||
"amd64":"https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases/download/3.5.0/base-vectras-vm-x86_64.tar.gz"
|
||||
}
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
{
|
||||
"rom_name": "3Dfx wrappers driver",
|
||||
"rom_icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/3dfx_logo.svg/1200px-3dfx_logo.svg.png",
|
||||
"rom_url": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/blob/master/3dfx/3dfx-wrappers-3.4.9.iso",
|
||||
"rom_path": "3dfx-wrappers-3.4.9.iso",
|
||||
"rom_url": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/blob/master/3dfx/3dfx-wrappers-3.5.0.iso",
|
||||
"rom_path": "3dfx-wrappers-3.5.0.iso",
|
||||
"rom_avail": true,
|
||||
"rom_size": "3.4.9",
|
||||
"rom_size": "3.5.0",
|
||||
"rom_arch": "X86_64",
|
||||
"rom_kernel": "",
|
||||
"rom_extra": "",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue