Files
windows-application/build_linux.sh
2026-01-29 10:46:11 +08:00

161 lines
4.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -e
#############################################
# 配置:修改为你的项目路径
#############################################
# 方式1手动指定路径推荐
PROJECT_DIR="$HOME/windows" # TODO: 改成你的项目实际路径
# 方式2自动检测如果脚本放在项目根目录
# PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
#############################################
# 0. 打印环境信息
#############################################
echo "==== Linux Flutter 桌面环境初始化 & 构建脚本 ===="
echo "项目路径: $PROJECT_DIR"
echo "当前用户: $(whoami)"
echo "当前目录: $(pwd)"
echo
#############################################
# 1. 安装系统依赖Ubuntu / Debian
#############################################
echo "==== 1. 安装系统依赖(需要 sudo ===="
sudo apt update
# 基本编译工具
sudo apt install -y build-essential
# CMake / NinjaFlutter 构建需要)
sudo apt install -y cmake ninja-build
# GTK3 及相关开发包Flutter Linux GUI 需要)
sudo apt install -y libgtk-3-dev libblkid-dev liblzma-dev
# 常用工具
sudo apt install -y git curl unzip
echo "系统依赖安装完成"
echo
#############################################
# 2. 安装 Flutter SDK如果还没有
#############################################
echo "==== 2. 检查 Flutter 是否已安装 ===="
if ! command -v flutter >/dev/null 2>&1; then
echo "未检测到 flutter 命令,开始安装 Flutter SDK..."
FLUTTER_VERSION="3.16.0" # 可按需要调整版本
FLUTTER_TAR="flutter_linux_${FLUTTER_VERSION}-stable.tar.xz"
FLUTTER_URL="https://storage.flutter-io.cn/flutter_infra_release/releases/stable/linux/${FLUTTER_TAR}"
cd "$HOME"
echo "从中国镜像下载 Flutter: $FLUTTER_URL"
curl -O "$FLUTTER_URL"
tar xf "$FLUTTER_TAR"
# 写入 PATH如果已经写入过不会有问题
if ! grep -q "flutter/bin" "$HOME/.bashrc"; then
echo 'export PATH="$PATH:$HOME/flutter/bin"' >> "$HOME/.bashrc"
fi
# 立刻生效当前 shell
export PATH="$PATH:$HOME/flutter/bin"
echo "Flutter 安装完成,版本:$(flutter --version)"
else
echo "已检测到 Flutter$(flutter --version)"
fi
echo
#############################################
# 3. 配置 Flutter 国内镜像
#############################################
echo "==== 3. 配置 Flutter 国内镜像环境变量 ===="
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
# 写入 ~/.bashrc 方便下次登录继续使用
if ! grep -q "PUB_HOSTED_URL" "$HOME/.bashrc"; then
cat >> "$HOME/.bashrc" << 'EOF'
# Flutter China mirrors
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
EOF
fi
echo "国内镜像已配置(当前 shell 已生效)"
echo
#############################################
# 4. 启用 Linux 桌面支持
#############################################
echo "==== 4. 启用 Linux 桌面支持 ===="
flutter config --enable-linux-desktop
echo "flutter doctor 检查环境:"
flutter doctor -v || true
echo
#############################################
# 5. 进入项目,生成 linux 工程(如未生成)
#############################################
echo "==== 5. 切换到项目目录,并生成 linux 工程(如需要) ===="
if [ ! -d "$PROJECT_DIR" ]; then
echo "错误:项目目录不存在:$PROJECT_DIR"
exit 1
fi
cd "$PROJECT_DIR"
# 如果没有 linux 目录,则创建
if [ ! -d "linux" ]; then
echo "未检测到 linux 目录,执行 flutter create --platforms=linux ."
flutter create --platforms=linux .
else
echo "已检测到 linux 目录,跳过 flutter create。"
fi
echo
#############################################
# 6. 获取依赖
#############################################
echo "==== 6. 获取 Dart / Flutter 依赖 ===="
flutter pub get
echo
#############################################
# 7. 构建 Linux Release 版本
#############################################
echo "==== 7. 构建 Linux Release 版本 ===="
flutter build linux --release
echo
echo "==== 构建完成 ===="
echo "可执行文件及运行目录位于:"
echo " $PROJECT_DIR/build/linux/x64/release/bundle/"
echo
echo "请确保将项目中的 bin/ 目录复制到该 bundle 目录同级,例如:"
echo " build/linux/x64/release/bundle/"
echo " ├─ cloud_client_gui"
echo " ├─ bin/"
echo " │ ├─ version"
echo " │ ├─ auth"
echo " │ ├─ mining.linux.conf"
echo " │ ├─ logs/"
echo " │ └─ mining_task.db"
echo
echo "然后在该目录下运行:"
echo " ./cloud_client_gui"
echo
echo "全部步骤完成。"