diff --git a/.gitignore b/.gitignore index be62526..fe4a0dc 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ app.*.symbols app.*.map.json # Android Studio will place build artifacts here +/android/app/build /android/app/debug /android/app/profile /android/app/release diff --git a/README.md b/README.md index e4db955..026141c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 给所有安卓arm64设备的“PC应用引擎”平替 -Click-to-run debian bookworm xfce on android for Chinese users, with fcitx pinyin input method preinstalled. No termux required. +Click-to-run Debian Bookworm XFCE on Android for Chinese users, with the Fcitx Pinyin input method preinstalled. No Termux is required. If you want to change the language in the container, run "tmoe", since this root filesystem is made using [tmoe](https://github.com/2moe/tmoe). ## 特点 @@ -33,7 +33,7 @@ Click-to-run debian bookworm xfce on android for Chinese users, with fcitx pinyi 使用proot运行debian环境 -内置[noVNC](https://github.com/novnc/noVNC)显示图形界面 +内置[noVNC](https://github.com/novnc/noVNC)/[AVNC](https://github.com/gujjwal00/avnc)/[Termux:X11](https://github.com/termux/termux-x11)显示图形界面 ## 项目结构 @@ -54,16 +54,22 @@ lib目录: ## 编译 -你需要配置好flutter和安卓sdk,然后克隆此项目。 +你需要配置好flutter和安卓sdk,还需安装python3、bison、patch、gcc,然后克隆此项目。 在编译之前,需要在release中下载系统rootfs(或者[自行制作](extra/build-tiny-rootfs.md)),之后使用split命令分割,拷贝到assets。一般我将其分为98MB。 `split -b 98M debian.tar.xz` +还需要对flutter的一些默认配置作修改,因为其与项目中build.gradle的一些设置冲突。 +- 删除`flutter\packages\flutter_tools\gradle\src\main\flutter.groovy`路径下与`ShrinkResources`相关的`if`代码块。 + 接下来就可以编译了。我使用的命令如下: `flutter build apk --target-platform android-arm64 --split-per-abi --obfuscate --split-debug-info=tiny_computer/sdi` +有一些C代码可能报错。比如KeyBind.c等文件,报错一些符号未定义。但其实包含那些符号的函数并没有被使用,所以可以把它们删掉再编译。 +应该有编译选项可以避免这种情况,但我对cmake不熟,就先这样了:P + ## 目前已知bug 多用户/分身情形无法sudo, 其它见issue diff --git a/android/app/build/generated/java/com/termux/x11/Prefs.java b/android/app/build/generated/java/com/termux/x11/Prefs.java deleted file mode 100644 index 8eaf125..0000000 --- a/android/app/build/generated/java/com/termux/x11/Prefs.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.termux.x11; -import java.util.HashMap; -import android.content.Context; -import com.termux.x11.utils.TermuxX11ExtraKeys; -import com.example.tiny_computer.R; - -public class Prefs extends LoriePreferences.PrefsProto { - public final ListPreference displayResolutionMode = new ListPreference("displayResolutionMode", "native", R.array.displayResolutionVariants, R.array.displayResolutionVariants); - public final IntPreference displayScale = new IntPreference("displayScale", 100); - public final ListPreference displayResolutionExact = new ListPreference("displayResolutionExact", "1280x1024", R.array.displayResolution, R.array.displayResolution); - public final StringPreference displayResolutionCustom = new StringPreference("displayResolutionCustom", "1280x1024"); - public final BooleanPreference adjustResolution = new BooleanPreference("adjustResolution", false); - public final BooleanPreference displayStretch = new BooleanPreference("displayStretch", false); - public final BooleanPreference Reseed = new BooleanPreference("Reseed", true); - public final BooleanPreference PIP = new BooleanPreference("PIP", true); - public final BooleanPreference fullscreen = new BooleanPreference("fullscreen", true); - public final ListPreference forceOrientation = new ListPreference("forceOrientation", "no", R.array.forceOrientationVariants, R.array.forceOrientationVariants); - public final BooleanPreference hideCutout = new BooleanPreference("hideCutout", false); - public final BooleanPreference keepScreenOn = new BooleanPreference("keepScreenOn", true); - public final BooleanPreference xrMode = new BooleanPreference("xrMode", false); - public final ListPreference touchMode = new ListPreference("touchMode", "1", R.array.touchscreenInputModesEntries, R.array.touchscreenInputModesValues); - public final BooleanPreference scaleTouchpad = new BooleanPreference("scaleTouchpad", true); - public final BooleanPreference showStylusClickOverride = new BooleanPreference("showStylusClickOverride", false); - public final BooleanPreference stylusIsMouse = new BooleanPreference("stylusIsMouse", false); - public final BooleanPreference stylusButtonContactModifierMode = new BooleanPreference("stylusButtonContactModifierMode", false); - public final BooleanPreference showMouseHelper = new BooleanPreference("showMouseHelper", false); - public final BooleanPreference pointerCapture = new BooleanPreference("pointerCapture", false); - public final ListPreference transformCapturedPointer = new ListPreference("transformCapturedPointer", "no", R.array.transformCapturedPointerEntries, R.array.transformCapturedPointerValues); - public final IntPreference capturedPointerSpeedFactor = new IntPreference("capturedPointerSpeedFactor", 100); - public final BooleanPreference tapToMove = new BooleanPreference("tapToMove", true); - public final BooleanPreference showAdditionalKbd = new BooleanPreference("showAdditionalKbd", true); - public final BooleanPreference additionalKbdVisible = new BooleanPreference("additionalKbdVisible", true); - public final BooleanPreference showIMEWhileExternalConnected = new BooleanPreference("showIMEWhileExternalConnected", true); - public final BooleanPreference preferScancodes = new BooleanPreference("preferScancodes", false); - public final BooleanPreference hardwareKbdScancodesWorkaround = new BooleanPreference("hardwareKbdScancodesWorkaround", true); - public final BooleanPreference dexMetaKeyCapture = new BooleanPreference("dexMetaKeyCapture", false); - public final BooleanPreference enableAccessibilityServiceAutomatically = new BooleanPreference("enableAccessibilityServiceAutomatically", false); - public final BooleanPreference pauseKeyInterceptingWithEsc = new BooleanPreference("pauseKeyInterceptingWithEsc", false); - public final BooleanPreference filterOutWinkey = new BooleanPreference("filterOutWinkey", false); - public final BooleanPreference enableGboardCJK = new BooleanPreference("enableGboardCJK", false); - public final BooleanPreference clipboardEnable = new BooleanPreference("clipboardEnable", true); - public final BooleanPreference storeSecondaryDisplayPreferencesSeparately = new BooleanPreference("storeSecondaryDisplayPreferencesSeparately", false); - public final BooleanPreference adjustHeightForEK = new BooleanPreference("adjustHeightForEK", true); - public final BooleanPreference useTermuxEKBarBehaviour = new BooleanPreference("useTermuxEKBarBehaviour", true); - public final IntPreference opacityEKBar = new IntPreference("opacityEKBar", 100); - public final ListPreference swipeUpAction = new ListPreference("swipeUpAction", "no action", R.array.userActionsValues, R.array.userActionsValues); - public final ListPreference swipeDownAction = new ListPreference("swipeDownAction", "toggle additional key bar", R.array.userActionsValues, R.array.userActionsValues); - public final ListPreference volumeUpAction = new ListPreference("volumeUpAction", "no action", R.array.userActionsVolumeUpValues, R.array.userActionsVolumeUpValues); - public final ListPreference volumeDownAction = new ListPreference("volumeDownAction", "no action", R.array.userActionsVolumeDownValues, R.array.userActionsVolumeDownValues); - public final ListPreference backButtonAction = new ListPreference("backButtonAction", "toggle additional key bar", R.array.userActionsValues, R.array.userActionsValues); - public final ListPreference notificationTapAction = new ListPreference("notificationTapAction", "open preferences", R.array.userActionsValues, R.array.userActionsValues); - public final ListPreference notificationButton0Action = new ListPreference("notificationButton0Action", "open preferences", R.array.userActionsValues, R.array.userActionsValues); - public final ListPreference notificationButton1Action = new ListPreference("notificationButton1Action", "exit", R.array.userActionsValues, R.array.userActionsValues); - public final StringPreference extra_keys_config = new StringPreference("extra_keys_config", TermuxX11ExtraKeys.DEFAULT_IVALUE_EXTRA_KEYS); - public final HashMap keys = new HashMap() {{ - put("displayResolutionMode", displayResolutionMode); - put("displayScale", displayScale); - put("displayResolutionExact", displayResolutionExact); - put("displayResolutionCustom", displayResolutionCustom); - put("adjustResolution", adjustResolution); - put("displayStretch", displayStretch); - put("Reseed", Reseed); - put("PIP", PIP); - put("fullscreen", fullscreen); - put("forceOrientation", forceOrientation); - put("hideCutout", hideCutout); - put("keepScreenOn", keepScreenOn); - put("xrMode", xrMode); - put("touchMode", touchMode); - put("scaleTouchpad", scaleTouchpad); - put("showStylusClickOverride", showStylusClickOverride); - put("stylusIsMouse", stylusIsMouse); - put("stylusButtonContactModifierMode", stylusButtonContactModifierMode); - put("showMouseHelper", showMouseHelper); - put("pointerCapture", pointerCapture); - put("transformCapturedPointer", transformCapturedPointer); - put("capturedPointerSpeedFactor", capturedPointerSpeedFactor); - put("tapToMove", tapToMove); - put("showAdditionalKbd", showAdditionalKbd); - put("additionalKbdVisible", additionalKbdVisible); - put("showIMEWhileExternalConnected", showIMEWhileExternalConnected); - put("preferScancodes", preferScancodes); - put("hardwareKbdScancodesWorkaround", hardwareKbdScancodesWorkaround); - put("dexMetaKeyCapture", dexMetaKeyCapture); - put("enableAccessibilityServiceAutomatically", enableAccessibilityServiceAutomatically); - put("pauseKeyInterceptingWithEsc", pauseKeyInterceptingWithEsc); - put("filterOutWinkey", filterOutWinkey); - put("enableGboardCJK", enableGboardCJK); - put("clipboardEnable", clipboardEnable); - put("storeSecondaryDisplayPreferencesSeparately", storeSecondaryDisplayPreferencesSeparately); - put("adjustHeightForEK", adjustHeightForEK); - put("useTermuxEKBarBehaviour", useTermuxEKBarBehaviour); - put("opacityEKBar", opacityEKBar); - put("swipeUpAction", swipeUpAction); - put("swipeDownAction", swipeDownAction); - put("volumeUpAction", volumeUpAction); - put("volumeDownAction", volumeDownAction); - put("backButtonAction", backButtonAction); - put("notificationTapAction", notificationTapAction); - put("notificationButton0Action", notificationButton0Action); - put("notificationButton1Action", notificationButton1Action); - put("extra_keys_config", extra_keys_config); - }}; - - public Prefs(Context ctx) { - super(ctx); - } -} diff --git a/android/app/src/main/java/com/termux/x11/CmdEntryPoint.java b/android/app/src/main/java/com/termux/x11/CmdEntryPoint.java index b5cb093..fcfa11c 100644 --- a/android/app/src/main/java/com/termux/x11/CmdEntryPoint.java +++ b/android/app/src/main/java/com/termux/x11/CmdEntryPoint.java @@ -37,7 +37,7 @@ import com.example.tiny_computer.BuildConfig; @Keep @SuppressLint({"StaticFieldLeak", "UnsafeDynamicallyLoadedCode"}) public class CmdEntryPoint extends ICmdEntryInterface.Stub { public static final String ACTION_START = "com.termux.x11.CmdEntryPoint.ACTION_START"; - public static final int PORT = 7892; + public static final int PORT = 7897; public static final byte[] MAGIC = "0xDEADBEEF".getBytes(); private static final Handler handler; public static Context ctx; diff --git a/android/app/src/main/java/com/termux/x11/LoriePreferences.java b/android/app/src/main/java/com/termux/x11/LoriePreferences.java index 41a60f8..416f296 100644 --- a/android/app/src/main/java/com/termux/x11/LoriePreferences.java +++ b/android/app/src/main/java/com/termux/x11/LoriePreferences.java @@ -736,9 +736,28 @@ public class LoriePreferences extends AppCompatActivity implements PreferenceFra return getArrayItems(values, ctx.getResources()); } + // private String[] getArrayItems(int resourceId, Resources resources) { + // ArrayList itemList = new ArrayList<>(); + // try(TypedArray typedArray = resources.obtainTypedArray(resourceId)) { + // for (int i = 0; i < typedArray.length(); i++) { + // int type = typedArray.getType(i); + // if (type == TypedValue.TYPE_STRING) { + // itemList.add(typedArray.getString(i)); + // } else if (type == TypedValue.TYPE_REFERENCE) { + // int resIdOfArray = typedArray.getResourceId(i, 0); + // itemList.addAll(Arrays.asList(resources.getStringArray(resIdOfArray))); + // } + // } + // } + + // Object[] objectArray = itemList.toArray(); + // return Arrays.copyOf(objectArray, objectArray.length, String[].class); + // } + private String[] getArrayItems(int resourceId, Resources resources) { ArrayList itemList = new ArrayList<>(); - try(TypedArray typedArray = resources.obtainTypedArray(resourceId)) { + TypedArray typedArray = resources.obtainTypedArray(resourceId); + try { for (int i = 0; i < typedArray.length(); i++) { int type = typedArray.getType(i); if (type == TypedValue.TYPE_STRING) { @@ -748,11 +767,12 @@ public class LoriePreferences extends AppCompatActivity implements PreferenceFra itemList.addAll(Arrays.asList(resources.getStringArray(resIdOfArray))); } } + } finally { + typedArray.recycle(); } - - Object[] objectArray = itemList.toArray(); - return Arrays.copyOf(objectArray, objectArray.length, String[].class); + return itemList.toArray(new String[0]); } + } diff --git a/android/app/src/main/java/com/termux/x11/MainActivity.java b/android/app/src/main/java/com/termux/x11/MainActivity.java index 5dd7947..c599f7b 100644 --- a/android/app/src/main/java/com/termux/x11/MainActivity.java +++ b/android/app/src/main/java/com/termux/x11/MainActivity.java @@ -85,7 +85,7 @@ public class MainActivity extends AppCompatActivity implements View.OnApplyWindo protected ICmdEntryInterface service = null; public TermuxX11ExtraKeys mExtraKeys; private Notification mNotification; - private final int mNotificationId = 7892; + private final int mNotificationId = 7897; NotificationManager mNotificationManager; static InputMethodManager inputMethodManager; private static boolean showIMEWhileExternalConnected = true; diff --git a/android/app/src/main/res/xml/preferences.xml b/android/app/src/main/res/xml/preferences.xml index 6f5b382..f27e518 100644 --- a/android/app/src/main/res/xml/preferences.xml +++ b/android/app/src/main/res/xml/preferences.xml @@ -38,7 +38,7 @@ - + diff --git a/extra/cross/chn_fonts.reg b/extra/cross/chn_fonts.reg new file mode 100644 index 0000000..3b69792 --- /dev/null +++ b/extra/cross/chn_fonts.reg @@ -0,0 +1,247 @@ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink] +"Agency FB"="XiaolaiMonoSC-Regular.ttf" +"Alef"="XiaolaiMonoSC-Regular.ttf" +"Algerian"="XiaolaiMonoSC-Regular.ttf" +"Amiri Quran"="XiaolaiMonoSC-Regular.ttf" +"Amiri"="XiaolaiMonoSC-Regular.ttf" +"Arial Rounded MT Bold"="XiaolaiMonoSC-Regular.ttf" +"Arial"="XiaolaiMonoSC-Regular.ttf" +"Bahnschrift"="XiaolaiMonoSC-Regular.ttf" +"Baskerville Old Face"="XiaolaiMonoSC-Regular.ttf" +"Bauhaus 93"="XiaolaiMonoSC-Regular.ttf" +"Bell MT"="XiaolaiMonoSC-Regular.ttf" +"Berlin Sans FB Demi"="XiaolaiMonoSC-Regular.ttf" +"Berlin Sans FB"="XiaolaiMonoSC-Regular.ttf" +"Bernard MT Condensed"="XiaolaiMonoSC-Regular.ttf" +"Blackadder ITC"="XiaolaiMonoSC-Regular.ttf" +"Bodoni MT"="XiaolaiMonoSC-Regular.ttf" +"Book Antiqua"="XiaolaiMonoSC-Regular.ttf" +"Bookman Old Style"="XiaolaiMonoSC-Regular.ttf" +"Bookshelf Symbol 7"="XiaolaiMonoSC-Regular.ttf" +"Bradley Hand ITC"="XiaolaiMonoSC-Regular.ttf" +"Britannic Bold"="XiaolaiMonoSC-Regular.ttf" +"Broadway"="XiaolaiMonoSC-Regular.ttf" +"Brush Script MT"="XiaolaiMonoSC-Regular.ttf" +"Caladea"="XiaolaiMonoSC-Regular.ttf" +"Calibri"="XiaolaiMonoSC-Regular.ttf" +"Californian FB"="XiaolaiMonoSC-Regular.ttf" +"Calisto MT"="XiaolaiMonoSC-Regular.ttf" +"Cambria"="XiaolaiMonoSC-Regular.ttf" +"Candara"="XiaolaiMonoSC-Regular.ttf" +"Carlito"="XiaolaiMonoSC-Regular.ttf" +"Cascadia Code"="XiaolaiMonoSC-Regular.ttf" +"Cascadia Mono"="XiaolaiMonoSC-Regular.ttf" +"Castellar"="XiaolaiMonoSC-Regular.ttf" +"Centaur"="XiaolaiMonoSC-Regular.ttf" +"Century Gothic"="XiaolaiMonoSC-Regular.ttf" +"Century Schoolbook"="XiaolaiMonoSC-Regular.ttf" +"Century"="XiaolaiMonoSC-Regular.ttf" +"Chiller"="XiaolaiMonoSC-Regular.ttf" +"Colonna MT"="XiaolaiMonoSC-Regular.ttf" +"Comic Sans MS"="XiaolaiMonoSC-Regular.ttf" +"Consolas"="XiaolaiMonoSC-Regular.ttf" +"Constantia"="XiaolaiMonoSC-Regular.ttf" +"Cooper Black"="XiaolaiMonoSC-Regular.ttf" +"Copperplate Gothic Bold"="XiaolaiMonoSC-Regular.ttf" +"Copperplate Gothic Light"="XiaolaiMonoSC-Regular.ttf" +"Corbel"="XiaolaiMonoSC-Regular.ttf" +"Courier New"="XiaolaiMonoSC-Regular.ttf" +"Curlz MT"="XiaolaiMonoSC-Regular.ttf" +"David CLM"="XiaolaiMonoSC-Regular.ttf" +"David Libre"="XiaolaiMonoSC-Regular.ttf" +"DejaVu Math TeX Gyre"="XiaolaiMonoSC-Regular.ttf" +"DejaVu Sans Mono"="XiaolaiMonoSC-Regular.ttf" +"DejaVu Sans"="XiaolaiMonoSC-Regular.ttf" +"DejaVu Serif"="XiaolaiMonoSC-Regular.ttf" +"DengXian"="XiaolaiMonoSC-Regular.ttf" +"Dubai"="XiaolaiMonoSC-Regular.ttf" +"Ebrima"="XiaolaiMonoSC-Regular.ttf" +"Edwardian Script ITC"="XiaolaiMonoSC-Regular.ttf" +"Elephant"="XiaolaiMonoSC-Regular.ttf" +"Engravers MT"="XiaolaiMonoSC-Regular.ttf" +"Eras Bold ITC"="XiaolaiMonoSC-Regular.ttf" +"Eras Demi ITC"="XiaolaiMonoSC-Regular.ttf" +"Eras Light ITC"="XiaolaiMonoSC-Regular.ttf" +"Eras Medium ITC"="XiaolaiMonoSC-Regular.ttf" +"FZShuTi"="XiaolaiMonoSC-Regular.ttf" +"FZYaoTi"="XiaolaiMonoSC-Regular.ttf" +"FangSong"="XiaolaiMonoSC-Regular.ttf" +"Felix Titling"="XiaolaiMonoSC-Regular.ttf" +"Footlight MT Light"="XiaolaiMonoSC-Regular.ttf" +"Forte"="XiaolaiMonoSC-Regular.ttf" +"Frank Ruehl CLM"="XiaolaiMonoSC-Regular.ttf" +"Frank Ruhl Hofshi"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Book"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Demi Cond"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Demi"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Heavy"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Medium Cond"="XiaolaiMonoSC-Regular.ttf" +"Franklin Gothic Medium"="XiaolaiMonoSC-Regular.ttf" +"Freestyle Script"="XiaolaiMonoSC-Regular.ttf" +"French Script MT"="XiaolaiMonoSC-Regular.ttf" +"Gabriola"="XiaolaiMonoSC-Regular.ttf" +"Gadugi"="XiaolaiMonoSC-Regular.ttf" +"Garamond"="XiaolaiMonoSC-Regular.ttf" +"Gentium Basic"="XiaolaiMonoSC-Regular.ttf" +"Gentium Book Basic"="XiaolaiMonoSC-Regular.ttf" +"Georgia"="XiaolaiMonoSC-Regular.ttf" +"Gigi"="XiaolaiMonoSC-Regular.ttf" +"Gill Sans MT Condensed"="XiaolaiMonoSC-Regular.ttf" +"Gill Sans MT Ext Condensed Bold"="XiaolaiMonoSC-Regular.ttf" +"Gill Sans MT"="XiaolaiMonoSC-Regular.ttf" +"Gill Sans Ultra Bold Condensed"="XiaolaiMonoSC-Regular.ttf" +"Gill Sans Ultra Bold"="XiaolaiMonoSC-Regular.ttf" +"Gloucester MT Extra Condensed"="XiaolaiMonoSC-Regular.ttf" +"Goudy Old Style"="XiaolaiMonoSC-Regular.ttf" +"Goudy Stout"="XiaolaiMonoSC-Regular.ttf" +"Haettenschweiler"="XiaolaiMonoSC-Regular.ttf" +"Harlow Solid Italic"="XiaolaiMonoSC-Regular.ttf" +"Harrington"="XiaolaiMonoSC-Regular.ttf" +"High Tower Text"="XiaolaiMonoSC-Regular.ttf" +"HoloLens MDL2 Assets"="XiaolaiMonoSC-Regular.ttf" +"Impact"="XiaolaiMonoSC-Regular.ttf" +"Imprint MT Shadow"="XiaolaiMonoSC-Regular.ttf" +"Informal Roman"="XiaolaiMonoSC-Regular.ttf" +"Ink Free"="XiaolaiMonoSC-Regular.ttf" +"Javanese Text"="XiaolaiMonoSC-Regular.ttf" +"Jokerman"="XiaolaiMonoSC-Regular.ttf" +"Juice ITC"="XiaolaiMonoSC-Regular.ttf" +"KaiTi"="XiaolaiMonoSC-Regular.ttf" +"Kristen ITC"="XiaolaiMonoSC-Regular.ttf" +"Kunstler Script"="XiaolaiMonoSC-Regular.ttf" +"Leelawadee UI"="XiaolaiMonoSC-Regular.ttf" +"Leelawadee"="XiaolaiMonoSC-Regular.ttf" +"LiSu"="XiaolaiMonoSC-Regular.ttf" +"Liberation Mono"="XiaolaiMonoSC-Regular.ttf" +"Liberation Sans Narrow"="XiaolaiMonoSC-Regular.ttf" +"Liberation Sans"="XiaolaiMonoSC-Regular.ttf" +"Liberation Serif"="XiaolaiMonoSC-Regular.ttf" +"Linux Biolinum G"="XiaolaiMonoSC-Regular.ttf" +"Linux Libertine Display G"="XiaolaiMonoSC-Regular.ttf" +"Linux Libertine G"="XiaolaiMonoSC-Regular.ttf" +"Lucida Bright"="XiaolaiMonoSC-Regular.ttf" +"Lucida Calligraphy"="XiaolaiMonoSC-Regular.ttf" +"Lucida Console"="XiaolaiMonoSC-Regular.ttf" +"Lucida Fax"="XiaolaiMonoSC-Regular.ttf" +"Lucida Handwriting"="XiaolaiMonoSC-Regular.ttf" +"Lucida Sans Typewriter"="XiaolaiMonoSC-Regular.ttf" +"Lucida Sans Unicode"="XiaolaiMonoSC-Regular.ttf" +"Lucida Sans"="XiaolaiMonoSC-Regular.ttf" +"MS Gothic"="XiaolaiMonoSC-Regular.ttf" +"MS Outlook"="XiaolaiMonoSC-Regular.ttf" +"MS Reference Sans Serif"="XiaolaiMonoSC-Regular.ttf" +"MS Reference Specialty"="XiaolaiMonoSC-Regular.ttf" +"MT Extra"="XiaolaiMonoSC-Regular.ttf" +"MV Boli"="XiaolaiMonoSC-Regular.ttf" +"Magneto"="XiaolaiMonoSC-Regular.ttf" +"Maiandra GD"="XiaolaiMonoSC-Regular.ttf" +"Malgun Gothic"="XiaolaiMonoSC-Regular.ttf" +"Marlett"="XiaolaiMonoSC-Regular.ttf" +"Matura MT Script Capitals"="XiaolaiMonoSC-Regular.ttf" +"Microsoft Himalaya"="XiaolaiMonoSC-Regular.ttf" +"Microsoft JhengHei"="XiaolaiMonoSC-Regular.ttf" +"Microsoft New Tai Lue"="XiaolaiMonoSC-Regular.ttf" +"Microsoft PhagsPa"="XiaolaiMonoSC-Regular.ttf" +"Microsoft Sans Serif"="XiaolaiMonoSC-Regular.ttf" +"Microsoft Tai Le"="XiaolaiMonoSC-Regular.ttf" +"Microsoft Uighur"="XiaolaiMonoSC-Regular.ttf" +"Microsoft YaHei"="XiaolaiMonoSC-Regular.ttf" +"Microsoft Yi Baiti"="XiaolaiMonoSC-Regular.ttf" +"MingLiU-ExtB"="XiaolaiMonoSC-Regular.ttf" +"Miriam CLM"="XiaolaiMonoSC-Regular.ttf" +"Miriam Libre"="XiaolaiMonoSC-Regular.ttf" +"Miriam Mono CLM"="XiaolaiMonoSC-Regular.ttf" +"Mistral"="XiaolaiMonoSC-Regular.ttf" +"Modern No. 20"="XiaolaiMonoSC-Regular.ttf" +"Mongolian Baiti"="XiaolaiMonoSC-Regular.ttf" +"Monotype Corsiva"="XiaolaiMonoSC-Regular.ttf" +"Myanmar Text"="XiaolaiMonoSC-Regular.ttf" +"Nachlieli CLM"="XiaolaiMonoSC-Regular.ttf" +"Niagara Engraved"="XiaolaiMonoSC-Regular.ttf" +"Niagara Solid"="XiaolaiMonoSC-Regular.ttf" +"Nirmala UI"="XiaolaiMonoSC-Regular.ttf" +"Noto Kufi Arabic"="XiaolaiMonoSC-Regular.ttf" +"Noto Naskh Arabic"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Arabic"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Armenian"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Georgian"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Hebrew"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Lao"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans Lisu"="XiaolaiMonoSC-Regular.ttf" +"Noto Sans"="XiaolaiMonoSC-Regular.ttf" +"Noto Serif Armenian"="XiaolaiMonoSC-Regular.ttf" +"Noto Serif Georgian"="XiaolaiMonoSC-Regular.ttf" +"Noto Serif Hebrew"="XiaolaiMonoSC-Regular.ttf" +"Noto Serif Lao"="XiaolaiMonoSC-Regular.ttf" +"Noto Serif"="XiaolaiMonoSC-Regular.ttf" +"OCR A Extended"="XiaolaiMonoSC-Regular.ttf" +"Old English Text MT"="XiaolaiMonoSC-Regular.ttf" +"Onyx"="XiaolaiMonoSC-Regular.ttf" +"OpenSymbol"="XiaolaiMonoSC-Regular.ttf" +"Palace Script MT"="XiaolaiMonoSC-Regular.ttf" +"Palatino Linotype"="XiaolaiMonoSC-Regular.ttf" +"Papyrus"="XiaolaiMonoSC-Regular.ttf" +"Parchment"="XiaolaiMonoSC-Regular.ttf" +"Perpetua Titling MT"="XiaolaiMonoSC-Regular.ttf" +"Perpetua"="XiaolaiMonoSC-Regular.ttf" +"Playbill"="XiaolaiMonoSC-Regular.ttf" +"Poor Richard"="XiaolaiMonoSC-Regular.ttf" +"Pristina"="XiaolaiMonoSC-Regular.ttf" +"Rage Italic"="XiaolaiMonoSC-Regular.ttf" +"Ravie"="XiaolaiMonoSC-Regular.ttf" +"Reem Kufi"="XiaolaiMonoSC-Regular.ttf" +"Rockwell Condensed"="XiaolaiMonoSC-Regular.ttf" +"Rockwell Extra Bold"="XiaolaiMonoSC-Regular.ttf" +"Rockwell"="XiaolaiMonoSC-Regular.ttf" +"Rubik"="XiaolaiMonoSC-Regular.ttf" +"STCaiyun"="XiaolaiMonoSC-Regular.ttf" +"STFangsong"="XiaolaiMonoSC-Regular.ttf" +"STHupo"="XiaolaiMonoSC-Regular.ttf" +"STKaiti"="XiaolaiMonoSC-Regular.ttf" +"STLiti"="XiaolaiMonoSC-Regular.ttf" +"STSong"="XiaolaiMonoSC-Regular.ttf" +"STXihei"="XiaolaiMonoSC-Regular.ttf" +"STXingkai"="XiaolaiMonoSC-Regular.ttf" +"STXinwei"="XiaolaiMonoSC-Regular.ttf" +"STZhongsong"="XiaolaiMonoSC-Regular.ttf" +"Sans Serif Collection"="XiaolaiMonoSC-Regular.ttf" +"Scheherazade"="XiaolaiMonoSC-Regular.ttf" +"Script MT Bold"="XiaolaiMonoSC-Regular.ttf" +"Segoe Fluent Icons"="XiaolaiMonoSC-Regular.ttf" +"Segoe MDL2 Assets"="XiaolaiMonoSC-Regular.ttf" +"Segoe Print"="XiaolaiMonoSC-Regular.ttf" +"Segoe Script"="XiaolaiMonoSC-Regular.ttf" +"Segoe UI Emoji"="XiaolaiMonoSC-Regular.ttf" +"Segoe UI Historic"="XiaolaiMonoSC-Regular.ttf" +"Segoe UI Symbol"="XiaolaiMonoSC-Regular.ttf" +"Segoe UI Variable"="XiaolaiMonoSC-Regular.ttf" +"Segoe UI"="XiaolaiMonoSC-Regular.ttf" +"Showcard Gothic"="XiaolaiMonoSC-Regular.ttf" +"SimHei"="XiaolaiMonoSC-Regular.ttf" +"SimSun"="XiaolaiMonoSC-Regular.ttf" +"SimSun-ExtB"="XiaolaiMonoSC-Regular.ttf" +"Sitka"="XiaolaiMonoSC-Regular.ttf" +"Snap ITC"="XiaolaiMonoSC-Regular.ttf" +"Stencil"="XiaolaiMonoSC-Regular.ttf" +"Sylfaen"="XiaolaiMonoSC-Regular.ttf" +"Symbol"="XiaolaiMonoSC-Regular.ttf" +"Tahoma"="XiaolaiMonoSC-Regular.ttf" +"Tempus Sans ITC"="XiaolaiMonoSC-Regular.ttf" +"Times New Roman"="XiaolaiMonoSC-Regular.ttf" +"Trebuchet MS"="XiaolaiMonoSC-Regular.ttf" +"Tw Cen MT Condensed Extra Bold"="XiaolaiMonoSC-Regular.ttf" +"Tw Cen MT Condensed"="XiaolaiMonoSC-Regular.ttf" +"Tw Cen MT"="XiaolaiMonoSC-Regular.ttf" +"Verdana"="XiaolaiMonoSC-Regular.ttf" +"Viner Hand ITC"="XiaolaiMonoSC-Regular.ttf" +"Vivaldi"="XiaolaiMonoSC-Regular.ttf" +"Vladimir Script"="XiaolaiMonoSC-Regular.ttf" +"Webdings"="XiaolaiMonoSC-Regular.ttf" +"Wide Latin"="XiaolaiMonoSC-Regular.ttf" +"Wingdings 2"="XiaolaiMonoSC-Regular.ttf" +"Wingdings 3"="XiaolaiMonoSC-Regular.ttf" +"Wingdings"="XiaolaiMonoSC-Regular.ttf" +"YouYuan"="XiaolaiMonoSC-Regular.ttf" +"Yu Gothic"="XiaolaiMonoSC-Regular.ttf" \ No newline at end of file diff --git a/extra/readme.md b/extra/readme.md index 651e94a..910cf5d 100644 --- a/extra/readme.md +++ b/extra/readme.md @@ -29,6 +29,10 @@ linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_ser 这些是用于跨架构/跨系统支持的box86/box64和wine安装脚本。 +#### extra/chn_fonts.reg, extra/XiaolaiMonoSC-Regular.ttf: + +修复wine显示方块字的注册表文件和[小赖字体](https://github.com/lxgw/kose-font)。 + #### caj, edraw 这些分别是cajviewer,亿图图示的补丁 diff --git a/lib/main.dart b/lib/main.dart index 4db80c5..f81b9a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -28,7 +28,6 @@ import 'package:clipboard/clipboard.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter_pty/flutter_pty.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:network_info_plus/network_info_plus.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:flutter/services.dart'; @@ -338,16 +337,20 @@ sed -i -E "s@^(VNC_RESOLUTION)=.*@\\1=${w}x${h}@" \$(command -v startvnc)"""); const Divider(height: 2, indent: 8, endIndent: 8), const SizedBox.square(dimension: 16), const Text("""Termux X11可以带来比VNC更快的速度,某些情况下兼容性也会更好。这是一个实验性功能。 +支持使用DRI3(需在图形加速中开启),可以带来相当大的性能提升。 随着版本的迭代,Termux X11如今也支持了双向剪切板等功能。"""), const SizedBox.square(dimension: 16), Wrap(alignment: WrapAlignment.center, spacing: 4.0, runSpacing: 4.0, children: [ - OutlinedButton(style: D.commandButtonStyle, child: const Text("Termux X11设置"), onPressed: () async { + OutlinedButton(style: D.commandButtonStyle, child: const Text("Termux X11偏好设置"), onPressed: () async { await D.androidChannel.invokeMethod("launchX11PrefsPage", {}); }), ]), const SizedBox.square(dimension: 8), SwitchListTile(title: const Text("默认使用Termux X11"), subtitle: const Text("不使用VNC。重启生效"), value: Util.getGlobal("useX11") as bool, onChanged:(value) { G.prefs.setBool("useX11", value); + if (!value && Util.getGlobal("dri3")) { + G.prefs.setBool("dri3", false); + } setState(() {}); },), const SizedBox.square(dimension: 16), @@ -517,6 +520,22 @@ Virgl可为使用OpenGL ES的应用提供加速。"""), const SizedBox.square(dimension: 8), SwitchListTile(title: const Text("启用Turnip+Zink驱动"), subtitle: const Text("下次启动时生效"), value: Util.getGlobal("turnip") as bool, onChanged:(value) async { G.prefs.setBool("turnip", value); + if (!value && Util.getGlobal("dri3")) { + G.prefs.setBool("dri3", false); + } + setState(() {}); + },), + const SizedBox.square(dimension: 8), + SwitchListTile(title: const Text("启用DRI3"), subtitle: const Text("下次启动时生效"), value: Util.getGlobal("dri3") as bool, onChanged:(value) async { + if (value && !(Util.getGlobal("turnip") && Util.getGlobal("useX11"))) { + if (!context.mounted) return; + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("DRI3必须配合Termux X11和Turnip使用")) + ); + return; + } + G.prefs.setBool("dri3", value); setState(() {}); },), const SizedBox.square(dimension: 16), diff --git a/lib/workflow.dart b/lib/workflow.dart index dd849f7..4c4911f 100644 --- a/lib/workflow.dart +++ b/lib/workflow.dart @@ -115,6 +115,7 @@ class Util { case "isWineEnabled" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); case "virgl" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); case "turnip" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); + case "dri3" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); case "wakelock" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); case "isHidpiEnabled" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false); case "useAvnc" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(true); @@ -122,7 +123,7 @@ class Util { case "defaultFFmpegCommand" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("-hide_banner -an -max_delay 1000000 -r 30 -f android_camera -camera_index 0 -i 0:0 -vf scale=iw/2:-1 -rtsp_transport udp -f rtsp rtsp://127.0.0.1:8554/stream"); case "defaultVirglCommand" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("--socket-path=\$CONTAINER_DIR/tmp/.virgl_test"); case "defaultVirglOpt" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("GALLIUM_DRIVER=virpipe"); - case "defaultTurnipOpt" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("MESA_LOADER_DRIVER_OVERRIDE=zink VK_ICD_FILENAMES=/home/tiny/.local/share/tiny/extra/freedreno_icd.aarch64.json TU_DEBUG=noconform MESA_VK_WSI_DEBUG=sw"); + case "defaultTurnipOpt" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("MESA_LOADER_DRIVER_OVERRIDE=zink VK_ICD_FILENAMES=/home/tiny/.local/share/tiny/extra/freedreno_icd.aarch64.json TU_DEBUG=noconform"); case "defaultHidpiOpt" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("GDK_SCALE=2 QT_FONT_DPI=192"); case "containersInfo" : return G.prefs.getStringList(key)!; } @@ -385,7 +386,7 @@ VSCode、输入法 {"name":"安装科学计算软件Octave", "command":"sudo apt update && sudo apt install -y octave"}, {"name":"卸载Octave", "command":"sudo apt autoremove --purge -y octave"}, {"name":"安装WPS", "command":r"""cat << 'EOF' | sh && sudo dpkg --configure -a && sudo apt update && sudo apt install -y /tmp/wps.deb -wget https://mirrors.sdu.edu.cn/spark-store-repository/aarch64-store/office/wps-office/wps-office_11.1.0.11720_arm64.deb -O /tmp/wps.deb +wget https://mirrors.sdu.edu.cn/spark-store-repository/aarch64-store/office/wps-office/wps-office_11.1.0.11720-fix1_arm64.deb -O /tmp/wps.deb EOF rm /tmp/wps.deb"""}, {"name":"卸载WPS", "command":"sudo apt autoremove --purge -y wps-office"}, @@ -646,6 +647,7 @@ done """); //一些数据初始化 //$DATA_DIR是数据文件夹, $CONTAINER_DIR是容器根目录 + //Termux:X11的启动命令并不在这里面,而是写死了。这下成💩山代码了:P await G.prefs.setStringList("containersInfo", ["""{ "name":"Debian Bookworm", "boot":"${D.boot}", @@ -757,6 +759,9 @@ ${G.dataPath}/bin/virgl_test_server ${Util.getGlobal("defaultVirglCommand")}""") } if (Util.getGlobal("turnip")) { extraOpt += "${Util.getGlobal("defaultTurnipOpt")} "; + if (!(Util.getGlobal("dri3"))) { + extraOpt += "MESA_VK_WSI_DEBUG=sw "; + } } if (Util.getGlobal("isBoxEnabled")) { G.wasBoxEnabled = true; @@ -793,7 +798,7 @@ export PROOT_LOADER=\$DATA_DIR/libexec/proot/loader export PROOT_LOADER_32=\$DATA_DIR/libexec/proot/loader32 ${Util.getCurrentProp("boot")} ${G.postCommand} -${(Util.getGlobal("autoLaunchVnc") as bool)?((Util.getGlobal("useX11") as bool)?"/etc/X11/xinit/Xsession &":Util.getCurrentProp("vnc")):""} +${(Util.getGlobal("autoLaunchVnc") as bool)?((Util.getGlobal("useX11") as bool)?"bash /etc/X11/xinit/Xsession &>~/.vnc/x.log &":Util.getCurrentProp("vnc")):""} clear"""); } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index bfa0c1c..0b90fdc 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -14,6 +14,7 @@ import path_provider_foundation import shared_preferences_foundation import url_launcher_macos import wakelock_plus +import webview_flutter_wkwebview func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) @@ -25,4 +26,5 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) + FLTWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "FLTWebViewFlutterPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 08f234f..037a51d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -162,18 +162,10 @@ packages: dependency: "direct main" description: name: flutter_pty - sha256: "08b6f37a4f394159e3a6adb6f07295e6fb6acb71270c87a4d0be187db34535cd" + sha256: "0a8429900118482e97336ce3ef888e47044d7277829c463e00a680ebe69181b3" url: "https://pub.dev" source: hosted - version: "0.4.0" - flutter_speed_dial: - dependency: "direct main" - description: - name: flutter_speed_dial - sha256: "698a037274a66dbae8697c265440e6acb6ab6cae9ac5f95c749e7944d8f28d41" - url: "https://pub.dev" - source: hosted - version: "7.0.0" + version: "0.4.1" flutter_test: dependency: "direct dev" description: flutter @@ -388,18 +380,18 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: d220eb8476b466d58b161e10b3001d93999010a26228a3fb89c4280db1249546 + sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 url: "https://pub.dev" source: hosted - version: "0.1.3+1" + version: "0.1.3+2" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.3" permission_handler_windows: dependency: transitive description: @@ -436,10 +428,10 @@ packages: dependency: transitive description: name: quiver - sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" retry: dependency: "direct main" description: @@ -460,10 +452,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974 + sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_foundation: dependency: transitive description: @@ -577,10 +569,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab url: "https://pub.dev" source: hosted - version: "6.3.9" + version: "6.3.10" url_launcher_ios: dependency: transitive description: @@ -673,18 +665,18 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522" + sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736 url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.9.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: c66651fba15f9d7ddd31daec42da8d6bce46c85610a7127e3ebcb39a4395c3c9 + sha256: "6e64fcb1c19d92024da8f33503aaeeda35825d77142c01d0ea2aa32edc79fdc8" url: "https://pub.dev" source: hosted - version: "3.16.6" + version: "3.16.7" webview_flutter_platform_interface: dependency: transitive description: @@ -697,10 +689,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "9c62cc46fa4f2d41e10ab81014c1de470a6c6f26051a2de32111b2ee55287feb" + sha256: "1942a12224ab31e9508cf00c0c6347b931b023b8a4f0811e5dec3b06f94f117d" url: "https://pub.dev" source: hosted - version: "3.14.0" + version: "3.15.0" win32: dependency: transitive description: @@ -713,10 +705,10 @@ packages: dependency: transitive description: name: win32_registry - sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6" + sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.5" xdg_directories: dependency: transitive description: @@ -750,5 +742,5 @@ packages: source: hosted version: "0.0.6" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 10bd69e..111244e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,21 +31,20 @@ dependencies: flutter: sdk: flutter xterm: ^4.0.0 - flutter_pty: ^0.4.0 - path_provider: ^2.1.2 - webview_flutter: ^4.8.0 + flutter_pty: ^0.4.1 + path_provider: ^2.1.4 + webview_flutter: ^4.9.0 permission_handler: ^11.3.1 http: ^1.2.2 retry: ^3.1.2 url_launcher: ^6.3.0 - shared_preferences: ^2.2.3 + shared_preferences: ^2.3.2 intl: ^0.19.0 #日期字符串转换 clipboard: ^0.1.3 ffmpeg_kit_flutter_full_gpl: ^6.0.3 - wakelock_plus: ^1.2.7 + wakelock_plus: ^1.2.8 dynamic_color: ^1.7.0 - flutter_speed_dial: ^7.0.0 - network_info_plus: ^6.0.0 + network_info_plus: ^6.0.1 device_info_plus: ^10.1.2 # The following adds the Cupertino Icons font to your application.