#!/bin/bash # ReTeamSpeak 跨平台构建脚本 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$SCRIPT_DIR" BUILD_DIR="$PROJECT_DIR/build" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查依赖 check_dependencies() { log_info "检查依赖..." # 检查 Rust if ! command -v rustc &> /dev/null; then log_error "Rust 未安装。请访问 https://rustup.rs 安装 Rust。" exit 1 fi # 检查 Node.js if ! command -v node &> /dev/null; then log_error "Node.js 未安装。请访问 https://nodejs.org 安装 Node.js。" exit 1 fi # 检查 npm if ! command -v npm &> /dev/null; then log_error "npm 未安装。" exit 1 fi log_info "依赖检查完成。" } # 构建前端 build_frontend() { log_info "构建前端..." cd "$PROJECT_DIR/src/tauri-app/frontend" npm install npm run build log_info "前端构建完成。" } # 构建桌面应用 build_desktop() { log_info "构建桌面应用..." cd "$PROJECT_DIR/src/tauri-app/src-tauri" cargo build --release log_info "桌面应用构建完成。" } # 构建 Android 应用 build_android() { log_info "构建 Android 应用..." cd "$PROJECT_DIR/src/tauri-app/src-tauri" # 检查 Android SDK if [ -z "$ANDROID_HOME" ]; then log_error "ANDROID_HOME 环境变量未设置。" exit 1 fi cargo tauri android build log_info "Android 应用构建完成。" } # 构建 iOS 应用 build_ios() { log_info "构建 iOS 应用..." cd "$PROJECT_DIR/src/tauri-app/src-tauri" # 检查 Xcode if ! command -v xcodebuild &> /dev/null; then log_error "Xcode 未安装。" exit 1 fi cargo tauri ios build log_info "iOS 应用构建完成。" } # 构建所有平台 build_all() { log_info "构建所有平台..." build_frontend build_desktop # 检查是否在 macOS 上 if [[ "$OSTYPE" == "darwin"* ]]; then build_ios fi # 检查 Android SDK if [ -n "$ANDROID_HOME" ]; then build_android fi log_info "所有平台构建完成。" } # 清理构建 clean() { log_info "清理构建..." rm -rf "$BUILD_DIR" cd "$PROJECT_DIR/src/tauri-app/src-tauri" cargo clean cd "$PROJECT_DIR/src/tauri-app/frontend" rm -rf node_modules dist log_info "清理完成。" } # 显示帮助 show_help() { echo "用法: $0 [命令]" echo "" echo "命令:" echo " all 构建所有平台" echo " desktop 构建桌面应用" echo " android 构建 Android 应用" echo " ios 构建 iOS 应用" echo " frontend 构建前端" echo " clean 清理构建" echo " help 显示帮助" echo "" echo "示例:" echo " $0 all # 构建所有平台" echo " $0 desktop # 仅构建桌面应用" echo " $0 android # 仅构建 Android 应用" } # 主函数 main() { check_dependencies case "${1:-help}" in all) build_all ;; desktop) build_frontend build_desktop ;; android) build_frontend build_android ;; ios) build_frontend build_ios ;; frontend) build_frontend ;; clean) clean ;; help|*) show_help ;; esac } main "$@"