Files
windows-application/build_linux.sh

193 lines
6.0 KiB
Bash
Raw Permalink 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/lizixuan/linux_client/windows-application"
# 方式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
# SQLite 库sqflite_common_ffi 需要)
sudo apt install -y libsqlite3-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 ."
# 从 pubspec.yaml 读取项目名(如果存在)
PROJECT_NAME="cloud_client_gui"
if [ -f "pubspec.yaml" ]; then
# 尝试从 pubspec.yaml 提取 name 字段
EXTRACTED_NAME=$(grep -E "^name:" pubspec.yaml | head -1 | sed 's/name:[[:space:]]*//' | sed 's/[[:space:]]*$//')
if [ -n "$EXTRACTED_NAME" ]; then
PROJECT_NAME="$EXTRACTED_NAME"
echo "从 pubspec.yaml 读取到项目名: $PROJECT_NAME"
fi
fi
# 使用 --project-name 参数明确指定项目名,避免目录名问题
echo "使用项目名: $PROJECT_NAME 创建 linux 平台..."
if flutter create --platforms=linux . --project-name "$PROJECT_NAME"; then
echo "linux 平台创建成功"
else
echo "警告: flutter create 执行失败"
echo "尝试不带 --project-name 参数重新执行..."
flutter create --platforms=linux . || {
echo "错误: 无法创建 linux 平台,请检查错误信息"
echo "可以尝试手动执行: flutter create --platforms=linux . --project-name cloud_client_gui"
exit 1
}
fi
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 "==== 运行时依赖说明 ===="
echo "如果运行时提示找不到 libsqlite3.so请确保已安装"
echo " sudo apt install -y libsqlite3-dev"
echo "或者确保系统已安装 libsqlite3.so通常在 /usr/lib/x86_64-linux-gnu/"
echo
echo "全部步骤完成。"