mirror of
https://github.com/Cateners/tiny_computer.git
synced 2026-05-20 08:35:46 +08:00
Update code to v1.0.12+2
wakelock, modified proot with binfmt-like feature, more wine scripts
This commit is contained in:
@@ -64,6 +64,13 @@ android {
|
|||||||
//checkReleaseBuilds false
|
//checkReleaseBuilds false
|
||||||
abortOnError false
|
abortOnError false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packagingOptions {
|
||||||
|
pickFirst 'lib/arm64-v8a/libc++_shared.so'
|
||||||
|
pickFirst 'lib/x86_64/libc++_shared.so'
|
||||||
|
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
|
||||||
|
pickFirst 'lib/arm64-v8a/libc++_shared.so'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
classpath 'com.android.tools.build:gradle:7.3.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
35
extra/cross/install-dxvk
Normal file
35
extra/cross/install-dxvk
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
|
mkdir $HOME/.local/share/tiny/tmp
|
||||||
|
cd $HOME/.local/share/tiny/tmp
|
||||||
|
|
||||||
|
MIRROR_SITE=https://mirror.ghproxy.com
|
||||||
|
RELEASE_PAGE=https://github.com/doitsujin/dxvk/releases
|
||||||
|
LATEST_DXVK_TAG=$(curl -L $RELEASE_PAGE | grep -oP 'Version \K[^"]*</h2>' | cut -d "<" -f 1 | head -n 1)
|
||||||
|
if [ -z "$LATEST_DXVK_TAG" ]
|
||||||
|
then
|
||||||
|
LATEST_DXVK_TAG="2.3"
|
||||||
|
fi
|
||||||
|
LATEST_DXVK_NAME="dxvk-$LATEST_DXVK_TAG.tar.gz"
|
||||||
|
LATEST_DXVK_LINK="https://github.com/doitsujin/dxvk/releases/download/v$LATEST_DXVK_TAG/$LATEST_DXVK_NAME"
|
||||||
|
|
||||||
|
wget $MIRROR_SITE/$LATEST_DXVK_LINK
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
wget $LATEST_DXVK_LINK
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
|
echo '下载失败...退出安装...'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
wineboot
|
||||||
|
tar xvf $LATEST_DXVK_NAME
|
||||||
|
mv dxvk-$LATEST_DXVK_TAG/x32/* ~/.wine/drive_c/windows/syswow64
|
||||||
|
mv dxvk-$LATEST_DXVK_TAG/x64/* ~/.wine/drive_c/windows/system32
|
||||||
|
|
||||||
|
cd ~
|
||||||
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
|
|
||||||
|
echo '安装完成,建议前往wine配置更新配置。'
|
||||||
@@ -2,21 +2,46 @@
|
|||||||
|
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt upgrade -y
|
sudo apt upgrade -y
|
||||||
sudo apt install -y nano cabextract libfreetype6 libfreetype6:armhf libfontconfig libfontconfig:armhf libxext6 libxext6:armhf libxinerama-dev libxinerama-dev:armhf libxxf86vm1 libxxf86vm1:armhf libxrender1 libxrender1:armhf libxcomposite1 libxcomposite1:armhf libxrandr2 libxrandr2:armhf libxi6 libxi6:armhf libxcursor1 libxcursor1:armhf libvulkan-dev libvulkan-dev:armhf zenity
|
|
||||||
|
# Wine的64位依赖。box64会将amd64调用转换为arm64,所以只需安装arm64库即可
|
||||||
|
# 依赖来自 dpkg-deb -I wine-stable-amd64_8.0.2~bookworm-1_amd64.deb
|
||||||
|
sudo apt install -y libasound2:arm64 libc6:arm64 libglib2.0-0:arm64 libgphoto2-6:arm64 libgphoto2-port12:arm64 \
|
||||||
|
libgstreamer-plugins-base1.0-0:arm64 libgstreamer1.0-0:arm64 libpcap0.8:arm64 libpulse0:arm64 libsane1:arm64 \
|
||||||
|
libudev1:arm64 libunwind8:arm64 libusb-1.0-0:arm64 libx11-6:arm64 libxext6:arm64 ocl-icd-libopencl1:arm64 \
|
||||||
|
libasound2-plugins:arm64 libncurses6:arm64 libcapi20-3:arm64 libcups2:arm64 libdbus-1-3:arm64 libfontconfig1:arm64 \
|
||||||
|
libfreetype6:arm64 libglu1-mesa:arm64 libgnutls30:arm64 libgsm1:arm64 libgssapi-krb5-2:arm64 libjpeg62-turbo:arm64 \
|
||||||
|
libkrb5-3:arm64 libodbc1:arm64 libosmesa6:arm64 libpng16-16:arm64 libsdl2-2.0-0:arm64 libv4l-0:arm64 \
|
||||||
|
libxcomposite1:arm64 libxcursor1:arm64 libxfixes3:arm64 libxi6:arm64 libxinerama1:arm64 libxrandr2:arm64 \
|
||||||
|
libxrender1:arm64 libxslt1.1:arm64 libxxf86vm1:arm64
|
||||||
|
|
||||||
|
# Wine的32位依赖。同理安装armhf而不是i386
|
||||||
|
# 依赖来自 dpkg-deb -I wine-stable-i386_8.0.2~bookworm-1_i386.deb
|
||||||
|
sudo apt install -y libasound2:armhf libc6:armhf libglib2.0-0:armhf libgphoto2-6:armhf libgphoto2-port12:armhf \
|
||||||
|
libgstreamer-plugins-base1.0-0:armhf libgstreamer1.0-0:armhf libpcap0.8:armhf libpulse0:armhf libsane1:armhf \
|
||||||
|
libudev1:armhf libusb-1.0-0:armhf libx11-6:armhf libxext6:armhf ocl-icd-libopencl1:armhf libasound2-plugins:armhf \
|
||||||
|
libncurses6:armhf libcapi20-3:armhf libcups2:armhf libdbus-1-3:armhf libfontconfig1:armhf libfreetype6:armhf \
|
||||||
|
libglu1-mesa:armhf libgnutls30:armhf libgsm1:armhf libgssapi-krb5-2:armhf libjpeg62-turbo:armhf libkrb5-3:armhf \
|
||||||
|
libodbc1:armhf libosmesa6:armhf libpng16-16:armhf libsdl2-2.0-0:armhf libv4l-0:armhf libxcomposite1:armhf \
|
||||||
|
libxcursor1:armhf libxfixes3:armhf libxi6:armhf libxinerama1:armhf libxrandr2:armhf libxrender1:armhf libxslt1.1:armhf \
|
||||||
|
libxxf86vm1:armhf
|
||||||
|
|
||||||
|
# 其他测试时认为可能需要的依赖
|
||||||
|
sudo apt install -y libvulkan1 libvulkan1:armhf
|
||||||
|
|
||||||
rm -rf $HOME/.local/share/tiny/tmp
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
mkdir $HOME/.local/share/tiny/tmp
|
mkdir $HOME/.local/share/tiny/tmp
|
||||||
cd $HOME/.local/share/tiny/tmp
|
cd $HOME/.local/share/tiny/tmp
|
||||||
|
|
||||||
MIRROR_SITE=https://mirror.ghproxy.com
|
MIRROR_SITE=https://mirror.ghproxy.com
|
||||||
LATEST_WINE_NAME=$(curl -L https://github.com/Kron4ek/Wine-Builds/releases | grep "amd64\.tar\.xz" | grep "proton" | head -n 1 | awk '{print $NF}')
|
RELEASE_PAGE=https://github.com/Kron4ek/Wine-Builds/releases
|
||||||
LATEST_WINE_TAG=$(echo $LATEST_WINE_NAME | cut -d "-" -f 2)
|
LATEST_WINE_TAG=proton-$(curl -L $RELEASE_PAGE | grep -oP 'Proton \K[^"]*</h2>' | cut -d "<" -f 1 | head -n 1) #proton
|
||||||
|
#LATEST_WINE_TAG=$(curl -L $RELEASE_PAGE | grep -oP 'Wine \K[^"]*</h2>' | cut -d "<" -f 1 | head -n 1) #vanilla
|
||||||
if [ $LATEST_WINE_TAG == proton ]; then
|
if [ -z "$LATEST_WINE_TAG" ] || [ "$LATEST_WINE_TAG" == "proton-" ]
|
||||||
LATEST_WINE_TAG=proton-$(echo $LATEST_WINE_NAME | cut -d "-" -f 3)-$(echo $LATEST_WINE_NAME | cut -d "-" -f 4)
|
then
|
||||||
|
LATEST_WINE_TAG=proton-8.0-4
|
||||||
fi
|
fi
|
||||||
|
LATEST_WINE_NAME=wine-$LATEST_WINE_TAG-amd64.tar.xz
|
||||||
LATEST_WINE_LINK=https://github.com/Kron4ek/Wine-Builds/releases/download/$LATEST_WINE_TAG/$LATEST_WINE_NAME
|
LATEST_WINE_LINK=$RELEASE_PAGE/download/$LATEST_WINE_TAG/$LATEST_WINE_NAME
|
||||||
|
|
||||||
wget $MIRROR_SITE/$LATEST_WINE_LINK
|
wget $MIRROR_SITE/$LATEST_WINE_LINK
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -28,52 +53,18 @@ if [ $? -ne 0 ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wget $MIRROR_SITE/https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
rm -rf $HOME/.local/share/tiny/tmp
|
|
||||||
echo '下载失败...退出安装...'
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
tar xvf $LATEST_WINE_NAME
|
tar xvf $LATEST_WINE_NAME
|
||||||
mv wine-$LATEST_WINE_TAG-amd64 ../cross/wine
|
mv wine-$LATEST_WINE_TAG-amd64 ../cross/wine
|
||||||
mv winetricks ../cross/winetricks-executable
|
|
||||||
chmod +x $HOME/.local/share/tiny/cross/winetricks-executable
|
|
||||||
cd ..
|
cd ..
|
||||||
rm -rf tmp
|
rm -rf tmp
|
||||||
|
|
||||||
echo '#!/bin/bash
|
|
||||||
export WINEPREFIX=~/.wine
|
|
||||||
box86 '"$HOME/.local/share/tiny/cross/wine/bin/wine "'"$@"' > $HOME/.local/share/tiny/cross/wine-executable
|
|
||||||
chmod +x $HOME/.local/share/tiny/cross/wine-executable
|
|
||||||
|
|
||||||
echo '#!/bin/bash
|
|
||||||
export WINEPREFIX=~/.wine
|
|
||||||
box64 '"$HOME/.local/share/tiny/cross/wine/bin/wine64 "'"$@"' > $HOME/.local/share/tiny/cross/wine64-executable
|
|
||||||
chmod +x $HOME/.local/share/tiny/cross/wine64-executable
|
|
||||||
|
|
||||||
echo '#!/bin/bash
|
|
||||||
export BOX64_NOBANNER=1 WINE=wine64 WINEPREFIX=~/.wine WINESERVER=~/.local/share/tiny/cross/wine/bin/wineserver
|
|
||||||
wine64 '"$HOME/.local/share/tiny/cross/winetricks-executable "'"$@"' > $HOME/.local/share/tiny/cross/winetricks64-executable
|
|
||||||
chmod +x $HOME/.local/share/tiny/cross/winetricks64-executable
|
|
||||||
|
|
||||||
echo '[Desktop Entry]
|
echo '[Desktop Entry]
|
||||||
Name=Wine64 启动器
|
Name=Wine 启动器
|
||||||
Exec=wine64 start /unix %F
|
Exec=wine64 start /unix %f
|
||||||
Icon=wine
|
Icon=wine
|
||||||
Type=Application' > $HOME/.local/share/tiny/cross/wine64.desktop
|
Type=Application' > $HOME/.local/share/tiny/cross/wine.desktop
|
||||||
chmod +x $HOME/.local/share/tiny/cross/wine64.desktop
|
chmod +x $HOME/.local/share/tiny/cross/wine.desktop
|
||||||
|
|
||||||
echo '[Desktop Entry]
|
|
||||||
Name=Wine64 winetricks 实用工具
|
|
||||||
Exec=winetricks64
|
|
||||||
Icon=wine
|
|
||||||
Type=Application' > $HOME/.local/share/tiny/cross/winetricks64.desktop
|
|
||||||
chmod +x $HOME/.local/share/tiny/cross/winetricks64.desktop
|
|
||||||
|
|
||||||
echo '安装完成,在启用wine后可以点击exe文件选择用wine启动。'
|
echo '安装完成,在启用wine后可以点击exe文件选择用wine启动。'
|
||||||
|
echo '初次运行时会自动进行一段时间的初始化工作。'
|
||||||
echo '程序的运行可能依赖一些配置或组件。比如,一些使用directx的游戏可能需要安装dxvk。'
|
echo '程序的运行可能依赖一些配置或组件。比如,一些使用directx的游戏可能需要安装dxvk。'
|
||||||
echo '如果缺失可以尝试使用winetricks安装。请务必保持耐心。'
|
|
||||||
|
|||||||
83
extra/cross/install-wine2
Normal file
83
extra/cross/install-wine2
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Wine的64位依赖。box64会将amd64调用转换为arm64,所以只需安装arm64库即可
|
||||||
|
# 依赖来自 dpkg-deb -I wine-stable-amd64_8.0.2~bookworm-1_amd64.deb
|
||||||
|
sudo apt install -y libasound2:arm64 libc6:arm64 libglib2.0-0:arm64 libgphoto2-6:arm64 libgphoto2-port12:arm64 \
|
||||||
|
libgstreamer-plugins-base1.0-0:arm64 libgstreamer1.0-0:arm64 libpcap0.8:arm64 libpulse0:arm64 libsane1:arm64 \
|
||||||
|
libudev1:arm64 libunwind8:arm64 libusb-1.0-0:arm64 libx11-6:arm64 libxext6:arm64 ocl-icd-libopencl1:arm64 \
|
||||||
|
libasound2-plugins:arm64 libncurses6:arm64 libcapi20-3:arm64 libcups2:arm64 libdbus-1-3:arm64 libfontconfig1:arm64 \
|
||||||
|
libfreetype6:arm64 libglu1-mesa:arm64 libgnutls30:arm64 libgsm1:arm64 libgssapi-krb5-2:arm64 libjpeg62-turbo:arm64 \
|
||||||
|
libkrb5-3:arm64 libodbc1:arm64 libosmesa6:arm64 libpng16-16:arm64 libsdl2-2.0-0:arm64 libv4l-0:arm64 \
|
||||||
|
libxcomposite1:arm64 libxcursor1:arm64 libxfixes3:arm64 libxi6:arm64 libxinerama1:arm64 libxrandr2:arm64 \
|
||||||
|
libxrender1:arm64 libxslt1.1:arm64 libxxf86vm1:arm64
|
||||||
|
|
||||||
|
# Wine的32位依赖。同理安装armhf而不是i386
|
||||||
|
# 依赖来自 dpkg-deb -I wine-stable-i386_8.0.2~bookworm-1_i386.deb
|
||||||
|
sudo apt install -y libasound2:armhf libc6:armhf libglib2.0-0:armhf libgphoto2-6:armhf libgphoto2-port12:armhf \
|
||||||
|
libgstreamer-plugins-base1.0-0:armhf libgstreamer1.0-0:armhf libpcap0.8:armhf libpulse0:armhf libsane1:armhf \
|
||||||
|
libudev1:armhf libusb-1.0-0:armhf libx11-6:armhf libxext6:armhf ocl-icd-libopencl1:armhf libasound2-plugins:armhf \
|
||||||
|
libncurses6:armhf libcapi20-3:armhf libcups2:armhf libdbus-1-3:armhf libfontconfig1:armhf libfreetype6:armhf \
|
||||||
|
libglu1-mesa:armhf libgnutls30:armhf libgsm1:armhf libgssapi-krb5-2:armhf libjpeg62-turbo:armhf libkrb5-3:armhf \
|
||||||
|
libodbc1:armhf libosmesa6:armhf libpng16-16:armhf libsdl2-2.0-0:armhf libv4l-0:armhf libxcomposite1:armhf \
|
||||||
|
libxcursor1:armhf libxfixes3:armhf libxi6:armhf libxinerama1:armhf libxrandr2:armhf libxrender1:armhf libxslt1.1:armhf \
|
||||||
|
libxxf86vm1:armhf
|
||||||
|
|
||||||
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
|
mkdir $HOME/.local/share/tiny/tmp
|
||||||
|
cd $HOME/.local/share/tiny/tmp
|
||||||
|
|
||||||
|
LNKA="https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/dists/bookworm/main/binary-amd64/"
|
||||||
|
DEB_A1="wine-stable-amd64_8.0.2~bookworm-1_amd64.deb"
|
||||||
|
DEB_A2="wine-stable_8.0.2~bookworm-1_amd64.deb"
|
||||||
|
|
||||||
|
LNKB="https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/dists/bookworm/main/binary-i386/"
|
||||||
|
DEB_B1="wine-stable-i386_8.0.2~bookworm-1_i386.deb"
|
||||||
|
|
||||||
|
# Install amd64-wine (64-bit) alongside i386-wine (32-bit)
|
||||||
|
echo -e "下载wine..."
|
||||||
|
wget ${LNKA}${DEB_A1}
|
||||||
|
wget ${LNKA}${DEB_A2}
|
||||||
|
wget ${LNKB}${DEB_B1}
|
||||||
|
|
||||||
|
wget https://mirror.ghproxy.com/https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
rm -rf $HOME/.local/share/tiny/tmp
|
||||||
|
echo '下载失败...退出安装...'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "解压wine..."
|
||||||
|
dpkg-deb -x ${DEB_A1} wine-installer
|
||||||
|
dpkg-deb -x ${DEB_A2} wine-installer
|
||||||
|
dpkg-deb -x ${DEB_B1} wine-installer
|
||||||
|
echo -e "安装wine..."
|
||||||
|
mv wine-installer/opt/wine* ../cross/wine
|
||||||
|
|
||||||
|
mv winetricks ../cross
|
||||||
|
chmod +x $HOME/.local/share/tiny/cross/winetricks
|
||||||
|
cd ..
|
||||||
|
rm -rf tmp
|
||||||
|
|
||||||
|
echo '[Desktop Entry]
|
||||||
|
Name=Wine 启动器
|
||||||
|
Exec=wine start /unix %f
|
||||||
|
Icon=wine
|
||||||
|
Type=Application' > $HOME/.local/share/tiny/cross/wine.desktop
|
||||||
|
chmod +x $HOME/.local/share/tiny/cross/wine.desktop
|
||||||
|
|
||||||
|
echo '[Desktop Entry]
|
||||||
|
Name=winetricks 实用工具
|
||||||
|
Exec=winetricks
|
||||||
|
Icon=wine
|
||||||
|
Type=Application' > $HOME/.local/share/tiny/cross/winetricks.desktop
|
||||||
|
chmod +x $HOME/.local/share/tiny/cross/winetricks.desktop
|
||||||
|
|
||||||
|
echo '安装完成,在启用wine后可以点击exe文件选择用wine启动。'
|
||||||
|
echo '程序的运行可能依赖一些配置或组件。比如,一些使用directx的游戏可能需要安装dxvk。'
|
||||||
|
echo '如果缺失可以尝试使用winetricks安装。请务必保持耐心。'
|
||||||
@@ -2,15 +2,18 @@
|
|||||||
|
|
||||||
### assets.zip中的文件:
|
### assets.zip中的文件:
|
||||||
|
|
||||||
- [proot](https://github.com/Cateners/proot), 使用[build-proot-android](https://github.com/green-green-avk/build-proot-android)脚本编译
|
|
||||||
- [busybox](https://github.com/meefik/busybox)
|
- [busybox](https://github.com/meefik/busybox)
|
||||||
- [mediamtx相关](https://github.com/bluenviron/mediamtx)
|
- [mediamtx相关](https://github.com/bluenviron/mediamtx)
|
||||||
- [tar](https://github.com/Rprop/tar-android-static)
|
- [tar](https://github.com/Rprop/tar-android-static)
|
||||||
- [Xserver XSDL, pulseaudio相关文件](https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/application/xserver)
|
- [Xserver XSDL, pulseaudio相关文件](https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/application/xserver)
|
||||||
- [Tmoe Linux, debian包来源](https://github.com/2moe/tmoe)
|
- [virgl](https://github.com/termux/termux-packages/tree/master/x11-packages/virglrenderer-android)
|
||||||
- [容器文件xa*](build-tiny-rootfs.md)
|
|
||||||
|
|
||||||
其中tar、busybox和pulseaudio相关文件都是直接用了二进制文件。
|
以上文件没有经过更改。
|
||||||
|
一般是使用了仓库直接提供的二进制文件,或者是使用了仓库提供的patch编译而来。
|
||||||
|
|
||||||
|
- [proot](https://github.com/Cateners/proot), 使用[build-proot-android](https://github.com/green-green-avk/build-proot-android)脚本编译
|
||||||
|
- [Tmoe Linux, debian包来源](https://github.com/2moe/tmoe),制作了[容器文件xa*](build-tiny-rootfs.md)
|
||||||
|
- getifaddrs_bridge_server,见下面的介绍和getifaddrs_bridge子文件夹
|
||||||
|
|
||||||
### patch.tar.gz中的文件:
|
### patch.tar.gz中的文件:
|
||||||
|
|
||||||
@@ -22,6 +25,10 @@ linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_ser
|
|||||||
|
|
||||||
源码和编译信息在getifaddrs_bridge文件夹查看。
|
源码和编译信息在getifaddrs_bridge文件夹查看。
|
||||||
|
|
||||||
|
#### extra/install-box, extra/install-wine:
|
||||||
|
|
||||||
|
这些是用于跨架构/跨系统支持的box86/box64和wine安装脚本。
|
||||||
|
|
||||||
#### caj, edraw
|
#### caj, edraw
|
||||||
|
|
||||||
这些分别是cajviewer,亿图图示的补丁
|
这些分别是cajviewer,亿图图示的补丁
|
||||||
@@ -29,4 +36,8 @@ linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_ser
|
|||||||
- 亿图图示补丁的库文件是在小小电脑上下载了Qt对应版本源码后编译得到的;
|
- 亿图图示补丁的库文件是在小小电脑上下载了Qt对应版本源码后编译得到的;
|
||||||
- 编译进行了两次,第一次直接编译,可以得到Gui和Widgets两个库。第二次编译带上XcbQpa,虽然会编译失败,但在这之前就可以得到XcbQpa的库。
|
- 编译进行了两次,第一次直接编译,可以得到Gui和Widgets两个库。第二次编译带上XcbQpa,虽然会编译失败,但在这之前就可以得到XcbQpa的库。
|
||||||
|
|
||||||
|
#### wechat
|
||||||
|
|
||||||
|
微信的补丁。license, uos-lsb和uos-release来自星火的微信包或arch的wechat-uos打包(嗯,我忘记到底是哪的了。不过都差不多)。
|
||||||
|
|
||||||
|
libssl1.1来自debian官方源。deepin-elf-verifier是我打的空包。
|
||||||
|
|||||||
101
lib/main.dart
101
lib/main.dart
@@ -31,6 +31,7 @@ import 'package:permission_handler/permission_handler.dart';
|
|||||||
//import 'package:flutter/services.dart';
|
//import 'package:flutter/services.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||||
import 'package:xterm/xterm.dart';
|
import 'package:xterm/xterm.dart';
|
||||||
//import 'package:xterm/flutter.dart';
|
//import 'package:xterm/flutter.dart';
|
||||||
import 'package:tiny_computer/workflow.dart';
|
import 'package:tiny_computer/workflow.dart';
|
||||||
@@ -239,8 +240,9 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
setState(() {});
|
setState(() {});
|
||||||
},),
|
},),
|
||||||
SizedBox.fromSize(size: const Size.square(8)),
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
SwitchListTile(title: const Text("开启时启动图形界面"), value: Util.getGlobal("autoLaunchVnc") as bool, onChanged:(value) {
|
SwitchListTile(title: const Text("屏幕常亮"), value: Util.getGlobal("wakelock") as bool, onChanged:(value) {
|
||||||
G.prefs.setBool("autoLaunchVnc", value);
|
G.prefs.setBool("wakelock", value);
|
||||||
|
WakelockPlus.toggle(enable: value);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},),
|
},),
|
||||||
SizedBox.fromSize(size: const Size.square(8)),
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
@@ -248,6 +250,11 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
SizedBox.fromSize(size: const Size.square(16)),
|
SizedBox.fromSize(size: const Size.square(16)),
|
||||||
const Text("以下选项修改后将在下次启动软件时生效。"),
|
const Text("以下选项修改后将在下次启动软件时生效。"),
|
||||||
SizedBox.fromSize(size: const Size.square(8)),
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
|
SwitchListTile(title: const Text("开启时启动图形界面"), value: Util.getGlobal("autoLaunchVnc") as bool, onChanged:(value) {
|
||||||
|
G.prefs.setBool("autoLaunchVnc", value);
|
||||||
|
setState(() {});
|
||||||
|
},),
|
||||||
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
SwitchListTile(title: const Text("重新安装引导包"), value: Util.getGlobal("reinstallBootstrap") as bool, onChanged:(value) {
|
SwitchListTile(title: const Text("重新安装引导包"), value: Util.getGlobal("reinstallBootstrap") as bool, onChanged:(value) {
|
||||||
G.prefs.setBool("reinstallBootstrap", value);
|
G.prefs.setBool("reinstallBootstrap", value);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
@@ -329,7 +336,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case false: {
|
case false: {
|
||||||
G.streamServerPty.write(const Utf8Encoder().convert("${String.fromCharCode(3)}exit\n"));
|
G.streamServerPty.write(const Utf8Encoder().convert("\x03exit\n"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -398,7 +405,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
switch (value) {
|
switch (value) {
|
||||||
case true: {
|
case true: {
|
||||||
G.virglServerPty = Pty.start("/system/bin/sh");
|
G.virglServerPty = Pty.start("/system/bin/sh");
|
||||||
G.virglServerPty.write(const Utf8Encoder().convert("export CONTAINER_DIR=${G.dataPath}/containers/0\n${G.dataPath}/bin/virgl_test_server ${Util.getGlobal("defaultVirglCommand")}\nexit\n"));
|
G.virglServerPty.write(const Utf8Encoder().convert("export CONTAINER_DIR=${G.dataPath}/containers/${G.currentContainer}\n${G.dataPath}/bin/virgl_test_server ${Util.getGlobal("defaultVirglCommand")}\nexit\n"));
|
||||||
G.virglServerPty.exitCode.then((value) {
|
G.virglServerPty.exitCode.then((value) {
|
||||||
G.isVirglServerStarted = false;
|
G.isVirglServerStarted = false;
|
||||||
setState(() {});
|
setState(() {});
|
||||||
@@ -406,7 +413,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case false: {
|
case false: {
|
||||||
G.virglServerPty.write(const Utf8Encoder().convert("${String.fromCharCode(3)}exit\n"));
|
G.virglServerPty.write(const Utf8Encoder().convert("\x03exit\n"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -438,29 +445,27 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
headerBuilder: ((context, isExpanded) {
|
headerBuilder: ((context, isExpanded) {
|
||||||
return const ListTile(title: Text("跨架构/跨系统支持"), subtitle: Text("实验性功能"),);
|
return const ListTile(title: Text("跨架构/跨系统支持"), subtitle: Text("实验性功能"),);
|
||||||
}), body: Padding(padding: const EdgeInsets.all(12), child: Column(children: [
|
}), body: Padding(padding: const EdgeInsets.all(12), child: Column(children: [
|
||||||
const Text("""你的梦想是在你的小小电脑上,运行着那些你熟悉的x86/x64或windows的程序。你不惧怕任何困难,你勇敢地使用box86/box64或wine,让你的梦想成为现实。但是,你也要知道,这是一条漫长而艰辛的道路,你需要付出很多的代价。你的程序要经过两层的模拟,就像穿越两个世界,它们的速度会变得缓慢而沉重。你需要有足够的耐心,即使你的眼前一片空白,你的终端还在默默地工作。你要时刻关注它的输出,看看它是否还在前进,还是遇到了难以逾越的障碍。或者,你也可以选择另一条路,去寻找那些为linux arm64而生的程序,它们或许能让你的梦想更加顺畅。
|
const Text("""使用box86/box64运行x86/x64架构的程序,或使用wine运行windows程序。
|
||||||
|
|
||||||
你的选择就在下面,你只需勾选你想要的选项,然后重新启动你的小小电脑,你的梦想就会有所不同。
|
|
||||||
|
|
||||||
......人话:
|
|
||||||
|
|
||||||
使用box86/box64运行x86/x64架构的程序,或使用wine运行windows程序。
|
|
||||||
|
|
||||||
运行windows程序需要经过架构和系统两层模拟,不要对运行速度抱有期待。程序崩溃也是常有的。
|
运行windows程序需要经过架构和系统两层模拟,不要对运行速度抱有期待。程序崩溃也是常有的。
|
||||||
|
|
||||||
你需要耐心。即使图形界面什么也没显示。看看终端,还在继续输出吗?还是停止在某个报错?
|
你需要耐心。即使图形界面什么也没显示。看看终端,还在继续输出吗?还是停止在某个报错?
|
||||||
|
|
||||||
|
如果不耐烦可以去看个广告消磨时间(bushi)
|
||||||
|
|
||||||
或者寻找该windows软件官方是否提供linux arm64版本。
|
或者寻找该windows软件官方是否提供linux arm64版本。
|
||||||
|
|
||||||
以下选项启用后下次启动时生效。
|
给高级用户的注意事项:
|
||||||
"""),
|
跨架构/跨系统提供类似binfmt_misc的支持。
|
||||||
SizedBox.fromSize(size: const Size.square(16)),
|
你可以直接执行x86或x64的elf(系统会自动调用box86/box64),也可以直接执行exe文件(系统会自动调用wine64)。
|
||||||
|
前提是这些文件拥有可执行权限。"""),
|
||||||
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
Wrap(alignment: WrapAlignment.center, spacing: 4.0, runSpacing: 4.0, children: [
|
Wrap(alignment: WrapAlignment.center, spacing: 4.0, runSpacing: 4.0, children: [
|
||||||
OutlinedButton(style: D.commandButtonStyle, child: const Text("安装box86和box64"), onPressed: () {
|
OutlinedButton(style: D.commandButtonStyle, child: const Text("安装box86和box64"), onPressed: () {
|
||||||
Util.termWrite("bash ~/.local/share/tiny/extra/install-box");
|
Util.termWrite("bash ~/.local/share/tiny/extra/install-box");
|
||||||
G.pageIndex.value = 0;
|
G.pageIndex.value = 0;
|
||||||
}),
|
}),
|
||||||
OutlinedButton(style: D.commandButtonStyle, child: const Text("安装wine与winetricks"), onPressed: () async {
|
OutlinedButton(style: D.commandButtonStyle, child: const Text("安装wine"), onPressed: () async {
|
||||||
if (!await File("${G.dataPath}/tiny/cross/box64").exists()) {
|
if (!await File("${G.dataPath}/tiny/cross/box64").exists()) {
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
||||||
@@ -472,6 +477,18 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
Util.termWrite("bash ~/.local/share/tiny/extra/install-wine");
|
Util.termWrite("bash ~/.local/share/tiny/extra/install-wine");
|
||||||
G.pageIndex.value = 0;
|
G.pageIndex.value = 0;
|
||||||
}),
|
}),
|
||||||
|
OutlinedButton(style: D.commandButtonStyle, child: const Text("安装dxvk"), onPressed: () async {
|
||||||
|
if (!G.wasWineEnabled) {
|
||||||
|
if (!context.mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(content: Text("请启用wine后重试"))
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Util.termWrite("bash ~/.local/share/tiny/extra/install-dxvk");
|
||||||
|
G.pageIndex.value = 0;
|
||||||
|
}),
|
||||||
OutlinedButton(style: D.commandButtonStyle, child: const Text("移除所有安装"), onPressed: () async {
|
OutlinedButton(style: D.commandButtonStyle, child: const Text("移除所有安装"), onPressed: () async {
|
||||||
if (G.wasBoxEnabled) {
|
if (G.wasBoxEnabled) {
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
@@ -488,17 +505,33 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
Util.termWrite("rm -rf ~/.wine");
|
Util.termWrite("rm -rf ~/.wine");
|
||||||
G.pageIndex.value = 0;
|
G.pageIndex.value = 0;
|
||||||
}),
|
}),
|
||||||
OutlinedButton(style: D.commandButtonStyle, child: const Text("配置wine"), onPressed: () async {
|
|
||||||
Util.termWrite("wine64 winecfg");
|
|
||||||
G.pageIndex.value = 0;
|
|
||||||
Workflow.launchBrowser();
|
|
||||||
}),
|
|
||||||
OutlinedButton(style: D.commandButtonStyle, child: const Text("启动winetricks"), onPressed: () async {
|
|
||||||
Util.termWrite("winetricks64");
|
|
||||||
G.pageIndex.value = 0;
|
|
||||||
Workflow.launchBrowser();
|
|
||||||
}),
|
|
||||||
]),
|
]),
|
||||||
|
SizedBox.fromSize(size: const Size.square(16)),
|
||||||
|
const Divider(height: 2, indent: 8, endIndent: 8),
|
||||||
|
SizedBox.fromSize(size: const Size.square(16)),
|
||||||
|
const Text("""开启wine后的常用指令,点击后前往图形界面耐心等待。
|
||||||
|
|
||||||
|
任意程序启动参考时间:
|
||||||
|
虎贲T7510 6GB 超过一分钟
|
||||||
|
骁龙870 12GB 约10秒
|
||||||
|
骁龙8gen3 不支持32位 可能不可用
|
||||||
|
|
||||||
|
初始化时间:
|
||||||
|
可能比本软件初始化还长
|
||||||
|
"""),
|
||||||
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
|
Wrap(alignment: WrapAlignment.center, spacing: 4.0, runSpacing: 4.0, children: D.wineCommands.asMap().entries.map<Widget>(
|
||||||
|
(e) {
|
||||||
|
return OutlinedButton(style: D.commandButtonStyle, child: Text(e.value["name"]!), onPressed: () {
|
||||||
|
Util.termWrite("${e.value["command"]!} &");
|
||||||
|
G.pageIndex.value = 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
).toList()),
|
||||||
|
SizedBox.fromSize(size: const Size.square(16)),
|
||||||
|
const Divider(height: 2, indent: 8, endIndent: 8),
|
||||||
|
SizedBox.fromSize(size: const Size.square(16)),
|
||||||
|
const Text("以下选项修改后将在下次启动软件时生效。"),
|
||||||
SizedBox.fromSize(size: const Size.square(8)),
|
SizedBox.fromSize(size: const Size.square(8)),
|
||||||
SwitchListTile(title: const Text("启用box86/box64"), subtitle: const Text("运行跨架构软件"), value: Util.getGlobal("isBoxEnabled") as bool, onChanged:(value) async {
|
SwitchListTile(title: const Text("启用box86/box64"), subtitle: const Text("运行跨架构软件"), value: Util.getGlobal("isBoxEnabled") as bool, onChanged:(value) async {
|
||||||
//检测box64是否存在,存在才开启
|
//检测box64是否存在,存在才开启
|
||||||
@@ -518,7 +551,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
},),
|
},),
|
||||||
SwitchListTile(title: const Text("启用wine"), subtitle: const Text("运行windows exe软件"), value: Util.getGlobal("isWineEnabled") as bool, onChanged:(value) async {
|
SwitchListTile(title: const Text("启用wine"), subtitle: const Text("运行windows exe软件"), value: Util.getGlobal("isWineEnabled") as bool, onChanged:(value) async {
|
||||||
//检测wine是否存在且box64是否开启
|
//检测wine是否存在且box64是否开启
|
||||||
if (value && !(Util.getGlobal("isBoxEnabled") && await File("${G.dataPath}/tiny/cross/wine64-executable").exists())) {
|
if (value && !(Util.getGlobal("isBoxEnabled") && await File("${G.dataPath}/tiny/cross/wine/bin/wine").exists())) {
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
@@ -526,6 +559,16 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Util.execute(value ? """filename="${G.dataPath}/containers/${G.currentContainer}/home/tiny/.bashrc"
|
||||||
|
command="export PATH=\\\$HOME/.local/share/tiny/cross/wine/bin:\\\$PATH # Auto-generated, do NOT edit"
|
||||||
|
if ! ${G.dataPath}/busybox grep -qF "\$command" "\$filename"; then
|
||||||
|
echo "\$command" >> "\$filename"
|
||||||
|
fi""" : """filename="${G.dataPath}/containers/${G.currentContainer}/home/tiny/.bashrc"
|
||||||
|
command="export PATH=\\\$HOME/.local/share/tiny/cross/wine/bin:\\\$PATH # Auto-generated, do NOT edit"
|
||||||
|
if ${G.dataPath}/busybox grep -qF "\$command" "\$filename"; then
|
||||||
|
command="export PATH=\\\$HOME/.local/share/tiny/cross/wine/bin:\\\$PATH \\\\# Auto-generated, do NOT edit"
|
||||||
|
${G.dataPath}/busybox sed -i "\\\\#\$command#d" "\$filename"
|
||||||
|
fi""");
|
||||||
G.prefs.setBool("isWineEnabled", value);
|
G.prefs.setBool("isWineEnabled", value);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},),
|
},),
|
||||||
@@ -1120,7 +1163,7 @@ SOFTWARE.
|
|||||||
}), body: const Padding(padding: EdgeInsets.all(8), child: Text("""
|
}), body: const Padding(padding: EdgeInsets.all(8), child: Text("""
|
||||||
除由Unity提供的广告功能外, 本软件不会收集你的隐私信息。
|
除由Unity提供的广告功能外, 本软件不会收集你的隐私信息。
|
||||||
|
|
||||||
当然,你在容器系统内部安装或使用的软件行为就不受我控制了,所以我不对其负责。
|
当然,你在容器系统内部安装或使用的软件行为(包括通过快捷指令)就不受我控制了,我不对其负责。
|
||||||
|
|
||||||
本软件申请的权限用于以下目的:
|
本软件申请的权限用于以下目的:
|
||||||
文件相关权限:用于系统访问手机目录;
|
文件相关权限:用于系统访问手机目录;
|
||||||
@@ -1223,7 +1266,7 @@ class LoadingPage extends StatelessWidget {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(0, 0, 0, 8),
|
padding: const EdgeInsets.fromLTRB(0, 0, 0, 8),
|
||||||
child: ValueListenableBuilder(valueListenable: G.updateText, builder:(context, value, child) {
|
child: ValueListenableBuilder(valueListenable: G.updateText, builder:(context, value, child) {
|
||||||
return Text(value, textScaleFactor: 2);
|
return Text(value, textScaler: const TextScaler.linear(2));
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
const FakeLoadingStatus(),
|
const FakeLoadingStatus(),
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ import 'package:unity_ads_plugin/unity_ads_plugin.dart';
|
|||||||
|
|
||||||
import 'package:clipboard/clipboard.dart';
|
import 'package:clipboard/clipboard.dart';
|
||||||
|
|
||||||
|
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||||
|
|
||||||
class Util {
|
class Util {
|
||||||
|
|
||||||
static Future<void> copyAsset(String src, String dst) async {
|
static Future<void> copyAsset(String src, String dst) async {
|
||||||
@@ -60,7 +62,7 @@ class Util {
|
|||||||
Pty pty = Pty.start(
|
Pty pty = Pty.start(
|
||||||
"/system/bin/sh"
|
"/system/bin/sh"
|
||||||
);
|
);
|
||||||
pty.write(const Utf8Encoder().convert("$str\nexit \$!\n"));
|
pty.write(const Utf8Encoder().convert("$str\nexit \$?\n"));
|
||||||
return await pty.exitCode;
|
return await pty.exitCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,6 +95,7 @@ class Util {
|
|||||||
//bool isBoxEnabled = false 下次启动是否开启box86/box64
|
//bool isBoxEnabled = false 下次启动是否开启box86/box64
|
||||||
//bool isWineEnabled = false 下次启动是否开启wine
|
//bool isWineEnabled = false 下次启动是否开启wine
|
||||||
//bool virgl = false 下次启动是否启用virgl
|
//bool virgl = false 下次启动是否启用virgl
|
||||||
|
//bool wakelock = false 屏幕常亮
|
||||||
//? int bootstrapVersion: 启动包版本
|
//? int bootstrapVersion: 启动包版本
|
||||||
//String[] containersInfo: 所有容器信息(json)
|
//String[] containersInfo: 所有容器信息(json)
|
||||||
//{name, boot:"\$DATA_DIR/bin/proot ...", vnc:"startnovnc", vncUrl:"...", commands:[{name:"更新和升级", command:"apt update -y && apt upgrade -y"},
|
//{name, boot:"\$DATA_DIR/bin/proot ...", vnc:"startnovnc", vncUrl:"...", commands:[{name:"更新和升级", command:"apt update -y && apt upgrade -y"},
|
||||||
@@ -122,6 +125,7 @@ class Util {
|
|||||||
case "isBoxEnabled" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false);
|
case "isBoxEnabled" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false);
|
||||||
case "isWineEnabled" : return b ? G.prefs.getBool(key)! : (value){G.prefs.setBool(key, value); return value;}(false);
|
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 "virgl" : 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 "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 "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 "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 MESA_GL_VERSION_OVERRIDE=4.0");
|
case "defaultVirglOpt" : return b ? G.prefs.getString(key)! : (value){G.prefs.setString(key, value); return value;}("GALLIUM_DRIVER=virpipe MESA_GL_VERSION_OVERRIDE=4.0");
|
||||||
@@ -197,6 +201,7 @@ class Util {
|
|||||||
opr();
|
opr();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//来自xterms关于操作ctrl, shift, alt键的示例
|
//来自xterms关于操作ctrl, shift, alt键的示例
|
||||||
@@ -289,7 +294,7 @@ class TermPty {
|
|||||||
child: Scrollbar(child:
|
child: Scrollbar(child:
|
||||||
SingleChildScrollView(
|
SingleChildScrollView(
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
const Text(":(\n发生了什么?", textScaleFactor: 2, style: ts, textAlign: TextAlign.center,),
|
const Text(":(\n发生了什么?", textScaler: TextScaler.linear(2), style: ts, textAlign: TextAlign.center,),
|
||||||
const Text("终端异常退出, 返回错误码9\n此错误通常是高版本安卓系统(12+)限制进程造成的, \n可以使用以下工具修复:", style: ts, textAlign: TextAlign.center),
|
const Text("终端异常退出, 返回错误码9\n此错误通常是高版本安卓系统(12+)限制进程造成的, \n可以使用以下工具修复:", style: ts, textAlign: TextAlign.center),
|
||||||
const SelectableText(helperLink, style: ts, textAlign: TextAlign.center),
|
const SelectableText(helperLink, style: ts, textAlign: TextAlign.center),
|
||||||
const Text("(复制链接到浏览器查看)", style: ts, textAlign: TextAlign.center),
|
const Text("(复制链接到浏览器查看)", style: ts, textAlign: TextAlign.center),
|
||||||
@@ -349,6 +354,7 @@ class D {
|
|||||||
{"name":"查看系统信息", "command":"neofetch -L && neofetch --off"},
|
{"name":"查看系统信息", "command":"neofetch -L && neofetch --off"},
|
||||||
{"name":"清屏", "command":"clear"},
|
{"name":"清屏", "command":"clear"},
|
||||||
{"name":"查看IP", "command":"hostname -I | awk '{print \$NF}' # 如果显示无权限(Permission denied),请在全局设置里开启getifaddrs桥接"},
|
{"name":"查看IP", "command":"hostname -I | awk '{print \$NF}' # 如果显示无权限(Permission denied),请在全局设置里开启getifaddrs桥接"},
|
||||||
|
{"name":"中断任务", "command":"\x03"},
|
||||||
{"name":"安装图形处理软件Krita", "command":"sudo apt update && sudo apt install -y krita krita-l10n"},
|
{"name":"安装图形处理软件Krita", "command":"sudo apt update && sudo apt install -y krita krita-l10n"},
|
||||||
{"name":"卸载Krita", "command":"sudo apt autoremove --purge -y krita krita-l10n"},
|
{"name":"卸载Krita", "command":"sudo apt autoremove --purge -y krita krita-l10n"},
|
||||||
{"name":"安装视频剪辑软件Kdenlive", "command":"sudo apt update && sudo apt install -y kdenlive"},
|
{"name":"安装视频剪辑软件Kdenlive", "command":"sudo apt update && sudo apt install -y kdenlive"},
|
||||||
@@ -373,6 +379,19 @@ class D {
|
|||||||
{"name":"拉流测试", "command":"ffplay rtsp://127.0.0.1:8554/stream &"},
|
{"name":"拉流测试", "command":"ffplay rtsp://127.0.0.1:8554/stream &"},
|
||||||
{"name":"关机", "command":"stopvnc\nexit\nexit"},
|
{"name":"关机", "command":"stopvnc\nexit\nexit"},
|
||||||
{"name":"???", "command":"timeout 8 cmatrix"}];
|
{"name":"???", "command":"timeout 8 cmatrix"}];
|
||||||
|
|
||||||
|
//默认wine快捷指令
|
||||||
|
static const wineCommands = [{"name":"wine配置", "command":"wine64 winecfg"},
|
||||||
|
{"name":"我的电脑", "command":"wine64 explorer"},
|
||||||
|
{"name":"记事本", "command":"wine64 notepad"},
|
||||||
|
{"name":"扫雷", "command":"wine64 winemine"},
|
||||||
|
{"name":"注册表", "command":"wine64 regedit"},
|
||||||
|
{"name":"控制面板", "command":"wine64 control"},
|
||||||
|
{"name":"文件管理器", "command":"wine64 winefile"},
|
||||||
|
{"name":"任务管理器", "command":"wine64 taskmgr"},
|
||||||
|
{"name":"ie浏览器", "command":"wine64 iexplore"},
|
||||||
|
{"name":"强制关闭wine", "command":"wineserver -k"}];
|
||||||
|
|
||||||
//默认小键盘
|
//默认小键盘
|
||||||
static const termCommands = [
|
static const termCommands = [
|
||||||
{"name": "Esc", "key": TerminalKey.escape},
|
{"name": "Esc", "key": TerminalKey.escape},
|
||||||
@@ -475,6 +494,7 @@ class G {
|
|||||||
static ValueNotifier<String> updateText = ValueNotifier("小小电脑"); //加载界面的说明文字
|
static ValueNotifier<String> updateText = ValueNotifier("小小电脑"); //加载界面的说明文字
|
||||||
|
|
||||||
static bool wasBoxEnabled = false; //本次启动时是否启用了box86/64
|
static bool wasBoxEnabled = false; //本次启动时是否启用了box86/64
|
||||||
|
static bool wasWineEnabled = false; //本次启动时是否启用了wine
|
||||||
|
|
||||||
|
|
||||||
static late SharedPreferences prefs;
|
static late SharedPreferences prefs;
|
||||||
@@ -714,6 +734,8 @@ done
|
|||||||
await G.prefs.setBool("virgl", false);
|
await G.prefs.setBool("virgl", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//设置屏幕常亮
|
||||||
|
WakelockPlus.toggle(enable: Util.getGlobal("wakelock"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> initTerminalForCurrent() async {
|
static Future<void> initTerminalForCurrent() async {
|
||||||
@@ -750,7 +772,11 @@ exit
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> launchCurrentContainer() async {
|
static Future<void> launchCurrentContainer() async {
|
||||||
String extraMount = "";
|
String box86BinPath = "";
|
||||||
|
String box64BinPath = "";
|
||||||
|
String box86LibraryPath = "";
|
||||||
|
String box64LibraryPath = "";
|
||||||
|
String extraMount = ""; //mount options and other proot options
|
||||||
String extraOpt = "";
|
String extraOpt = "";
|
||||||
if (Util.getGlobal("getifaddrsBridge")) {
|
if (Util.getGlobal("getifaddrsBridge")) {
|
||||||
Util.execute("${G.dataPath}/bin/getifaddrs_bridge_server ${G.dataPath}/containers/${G.currentContainer}/tmp/.getifaddrs-bridge");
|
Util.execute("${G.dataPath}/bin/getifaddrs_bridge_server ${G.dataPath}/containers/${G.currentContainer}/tmp/.getifaddrs-bridge");
|
||||||
@@ -769,13 +795,25 @@ ${G.dataPath}/bin/virgl_test_server ${Util.getGlobal("defaultVirglCommand")}""")
|
|||||||
}
|
}
|
||||||
if (Util.getGlobal("isBoxEnabled")) {
|
if (Util.getGlobal("isBoxEnabled")) {
|
||||||
G.wasBoxEnabled = true;
|
G.wasBoxEnabled = true;
|
||||||
|
extraMount += "--x86=/home/tiny/.local/bin/box86 --x64=/home/tiny/.local/bin/box64 ";
|
||||||
extraMount += "--mount=\$DATA_DIR/tiny/cross/box86:/home/tiny/.local/bin/box86 --mount=\$DATA_DIR/tiny/cross/box64:/home/tiny/.local/bin/box64 ";
|
extraMount += "--mount=\$DATA_DIR/tiny/cross/box86:/home/tiny/.local/bin/box86 --mount=\$DATA_DIR/tiny/cross/box64:/home/tiny/.local/bin/box64 ";
|
||||||
|
extraOpt += "BOX86_NOBANNER=1 BOX64_NOBANNER=1 ";
|
||||||
}
|
}
|
||||||
if (Util.getGlobal("isWineEnabled")) {
|
if (Util.getGlobal("isWineEnabled")) {
|
||||||
extraOpt += "BOX86_PATH=/home/tiny/.local/share/tiny/cross/wine/bin/ BOX86_LD_LIBRARY_PATH=/home/tiny/.local/share/tiny/cross/wine/lib/wine/i386-unix/:/lib/i386-linux-gnu/:/lib/aarch64-linux-gnu/:/lib/arm-linux-gnueabihf/:/usr/lib/aarch64-linux-gnu/:/usr/lib/arm-linux-gnueabihf/:/usr/lib/i386-linux-gnu/:/home/tiny/.local/share/tiny/cross/x86lib/ ";
|
G.wasWineEnabled = true;
|
||||||
extraOpt += "BOX64_PATH=/home/tiny/.local/share/tiny/cross/wine/bin/ BOX64_LD_LIBRARY_PATH=/home/tiny/.local/share/tiny/cross/wine/lib/wine/i386-unix/:/home/tiny/.local/share/tiny/cross/wine/lib/wine/x86_64-unix/:/lib/i386-linux-gnu/:/lib/x86_64-linux-gnu:/lib/aarch64-linux-gnu/:/lib/arm-linux-gnueabihf/:/usr/lib/aarch64-linux-gnu/:/usr/lib/arm-linux-gnueabihf/:/usr/lib/i386-linux-gnu/:/usr/lib/x86_64-linux-gnu/:/home/tiny/.local/share/tiny/cross/x64lib/ ";
|
box86BinPath += "/home/tiny/.local/share/tiny/cross/wine/bin:";
|
||||||
extraMount += "--mount=\$DATA_DIR/tiny/cross/wine-executable:/home/tiny/.local/bin/wine --mount=\$DATA_DIR/tiny/cross/wine64-executable:/home/tiny/.local/bin/wine64 --mount=\$DATA_DIR/tiny/cross/wine64.desktop:/usr/share/applications/wine64.desktop ";
|
box64BinPath += "/home/tiny/.local/share/tiny/cross/wine/bin:";
|
||||||
extraMount += "--mount=\$DATA_DIR/tiny/cross/winetricks64-executable:/home/tiny/.local/bin/winetricks64 --mount=\$DATA_DIR/tiny/cross/winetricks64.desktop:/usr/share/applications/winetricks64.desktop ";
|
box86LibraryPath += "/home/tiny/.local/share/tiny/cross/wine/lib/wine/i386-unix:";
|
||||||
|
box64LibraryPath += "/home/tiny/.local/share/tiny/cross/wine/lib/wine/x86_64-unix:";
|
||||||
|
extraMount += "--wine=/home/tiny/.local/bin/wine64 ";
|
||||||
|
extraMount += "--mount=\$DATA_DIR/tiny/cross/wine.desktop:/usr/share/applications/wine.desktop ";
|
||||||
|
//extraMount += "--mount=\$DATA_DIR/tiny/cross/winetricks:/home/tiny/.local/bin/winetricks --mount=\$DATA_DIR/tiny/cross/winetricks.desktop:/usr/share/applications/winetricks.desktop ";
|
||||||
|
}
|
||||||
|
if (G.wasBoxEnabled) {
|
||||||
|
extraOpt += "BOX86_PATH=$box86BinPath/home/tiny/.local/share/tiny/cross/bin ";
|
||||||
|
extraOpt += "BOX64_PATH=$box64BinPath/home/tiny/.local/share/tiny/cross/bin ";
|
||||||
|
extraOpt += "BOX86_LD_LIBRARY_PATH=$box86LibraryPath/home/tiny/.local/share/tiny/cross/x86lib ";
|
||||||
|
extraOpt += "BOX64_LD_LIBRARY_PATH=$box64LibraryPath/home/tiny/.local/share/tiny/cross/x64lib ";
|
||||||
}
|
}
|
||||||
Util.termWrite(
|
Util.termWrite(
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -6,13 +6,17 @@ import FlutterMacOS
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
import ffmpeg_kit_flutter_full_gpl
|
import ffmpeg_kit_flutter_full_gpl
|
||||||
|
import package_info_plus
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import shared_preferences_foundation
|
import shared_preferences_foundation
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
import wakelock_plus
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
FFmpegKitFlutterPlugin.register(with: registry.registrar(forPlugin: "FFmpegKitFlutterPlugin"))
|
FFmpegKitFlutterPlugin.register(with: registry.registrar(forPlugin: "FFmpegKitFlutterPlugin"))
|
||||||
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
|
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
|
||||||
}
|
}
|
||||||
|
|||||||
88
pubspec.lock
88
pubspec.lock
@@ -1,6 +1,14 @@
|
|||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
packages:
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.2"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -57,6 +65,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.1"
|
version: "3.1.1"
|
||||||
|
dbus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dbus
|
||||||
|
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.7.10"
|
||||||
equatable:
|
equatable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -160,6 +176,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.1"
|
version: "0.18.1"
|
||||||
|
js:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: js
|
||||||
|
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.7"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -192,6 +216,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.10.0"
|
version: "1.10.0"
|
||||||
|
package_info_plus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus
|
||||||
|
sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.1"
|
||||||
|
package_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_platform_interface
|
||||||
|
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -276,10 +316,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_html
|
name: permission_handler_html
|
||||||
sha256: d96ff56a757b7f04fa825c469d296c5aebc55f743e87bd639fef91a466a24da8
|
sha256: "11b762a8c123dced6461933a88ea1edbbe036078c3f9f41b08886e678e7864df"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.0+1"
|
version: "0.1.0+2"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -296,6 +336,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.2.0"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.2"
|
||||||
platform:
|
platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -465,10 +513,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba
|
sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.2.1"
|
version: "6.2.2"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -513,10 +561,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
sha256: "138bd45b3a456dcfafc46d1a146787424f8d2edfbf2809c9324361e58f851cf7"
|
sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.1"
|
version: "2.2.2"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -533,6 +581,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
|
wakelock_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: wakelock_plus
|
||||||
|
sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.4"
|
||||||
|
wakelock_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: wakelock_plus_platform_interface
|
||||||
|
sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -577,10 +641,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f"
|
sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.0"
|
version: "5.1.1"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -589,6 +653,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.3"
|
version: "1.0.3"
|
||||||
|
xml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xml
|
||||||
|
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.5.0"
|
||||||
xterm:
|
xterm:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 1.0.12+1
|
version: 1.0.12+2
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.1.0 <4.0.0'
|
sdk: '>=3.1.0 <4.0.0'
|
||||||
@@ -43,6 +43,7 @@ dependencies:
|
|||||||
unity_ads_plugin: ^0.3.8
|
unity_ads_plugin: ^0.3.8
|
||||||
clipboard: ^0.1.3
|
clipboard: ^0.1.3
|
||||||
ffmpeg_kit_flutter_full_gpl: ^6.0.3
|
ffmpeg_kit_flutter_full_gpl: ^6.0.3
|
||||||
|
wakelock_plus: ^1.1.4
|
||||||
|
|
||||||
|
|
||||||
# The following adds the Cupertino Icons font to your application.
|
# The following adds the Cupertino Icons font to your application.
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake)
|
|||||||
# https://github.com/flutter/flutter/issues/57146.
|
# https://github.com/flutter/flutter/issues/57146.
|
||||||
set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
|
set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
|
||||||
|
|
||||||
|
# Set fallback configurations for older versions of the flutter tool.
|
||||||
|
if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
|
||||||
|
set(FLUTTER_TARGET_PLATFORM "windows-x64")
|
||||||
|
endif()
|
||||||
|
|
||||||
# === Flutter Library ===
|
# === Flutter Library ===
|
||||||
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
|
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
|
||||||
|
|
||||||
@@ -92,7 +97,7 @@ add_custom_command(
|
|||||||
COMMAND ${CMAKE_COMMAND} -E env
|
COMMAND ${CMAKE_COMMAND} -E env
|
||||||
${FLUTTER_TOOL_ENVIRONMENT}
|
${FLUTTER_TOOL_ENVIRONMENT}
|
||||||
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
|
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
|
||||||
windows-x64 $<CONFIG>
|
${FLUTTER_TARGET_PLATFORM} $<CONFIG>
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
add_custom_target(flutter_assemble DEPENDS
|
add_custom_target(flutter_assemble DEPENDS
|
||||||
|
|||||||
Reference in New Issue
Block a user