| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- @echo off
- chcp 65001 >nul 2>&1
- setlocal enabledelayedexpansion
- :: ========== 1. 项目根目录初始化 ==========
- set "PROJECT_ROOT=%~dp0\.."
- for %%i in ("%PROJECT_ROOT%") do set "PROJECT_ROOT=%%~fi"
- :: ========== 2. 参数校验 ==========
- if "%~1"=="" (
- echo [Error] 请使用命令: _build_win.bat [prod^|dev] [version] [^|offline]
- echo [示例] _build_win.bat prod v1.0.0 offline
- echo [示例] _build_win.bat prod v1.0.0
- pause
- exit /b 1
- )
- if /i not "%~1"=="prod" if /i not "%~1"=="dev" (
- echo [Error] 参数1无效,仅支持 prod 或 dev
- pause
- exit /b 1
- )
- :: ========== 3. 环境变量加载 ==========
- set "ENV=%~1_no_pda"
- if not "%~3"=="" if /i "%~3"=="offline" (
- set "ENV=%~1_no_pda_offline"
- ) else if not "%~3"=="" (
- set "ENV=%~1_no_pda_%~3"
- )
- set "BUILD_PLATFORM=windows-x64"
- set "APP_NAME=cf-app"
- :: 根据参数组合设置APP_NAME
- if not "%~3"=="" (
- :: 如果提供了第三个参数
- if "%~3"=="offline" (
- set "APP_NAME=win_offline_cf-app"
- ) else (
- set "APP_NAME=win_%~3_cf-app"
- )
- ) else (
- set "APP_NAME=win_cf-app"
- )
- set "APP_VERSION=V1.0.0"
- :: 添加版本号到APP_NAME
- if not "%~2"=="" (
- set "APP_VERSION=%~2"
- )
- set "ENV_FILE=%PROJECT_ROOT%\.env\.env.%ENV%"
- if not exist "%ENV_FILE%" (
- echo [Error] 环境文件不存在: %ENV_FILE%
- pause
- exit /b 1
- )
- :: ========== 4. 构建参数生成 ==========
- set "DEFINE_ARGS="
- for /f "tokens=1,* delims==" %%a in ('type "%ENV_FILE%" ^| findstr /v "^#" ^| findstr /v "^$"') do (
- set "DEFINE_ARGS=!DEFINE_ARGS! --dart-define=%%a=%%b"
- )
- :: ========== 5. 执行构建 ==========
- echo ==============================================
- echo [INFO] 开始构建: 环境=%ENV% ^| 平台=%BUILD_PLATFORM% ^| 应用=%APP_NAME%
- cd /d "%PROJECT_ROOT%"
- call flutter build windows !DEFINE_ARGS!
- if !errorlevel! neq 0 (
- echo [Error] Flutter构建失败
- pause
- exit /b 1
- )
- :: ========== 6. 文件处理优化 ==========
- :: 正确的构建输出路径
- set "WIN_SOURCE=%PROJECT_ROOT%\build\windows\x64\runner\Release"
- set "WIN_DEST=%PROJECT_ROOT%\release\windows\%APP_NAME%_%APP_VERSION%"
- if exist "%WIN_SOURCE%" (
- if not exist "%PROJECT_ROOT%\release\windows" (
- mkdir "%PROJECT_ROOT%\release\windows"
- )
- xcopy /E /I /Y "%WIN_SOURCE%" "%WIN_DEST%"
- echo ==============================================
- echo [INFO] Windows应用打包成功: %WIN_DEST%
- echo ==============================================
- ) else (
- echo [Error] Windows应用源文件不存在: %WIN_SOURCE%
- pause
- exit /b 1
- )
- :: ========== 7. 打包发布文件 ==========
- echo ==============================================
- echo [INFO] 正在压缩应用包...
- cd /d "%PROJECT_ROOT%"
- set "ZIP_NAME=%APP_NAME%_%APP_VERSION%.zip"
- set "ZIP_PATH=%PROJECT_ROOT%\release\windows\%ZIP_NAME%"
- :: 使用 PowerShell 命令进行 ZIP 压缩
- powershell -Command "Compress-Archive -Path '%WIN_DEST%\*' -DestinationPath '%ZIP_PATH%' -Force"
- if exist "%ZIP_PATH%" (
- echo [INFO] 应用已成功压缩: %ZIP_PATH%
- ) else (
- echo [Error] 压缩失败,请检查系统是否支持 Compress-Archive
- pause
- exit /b 1
- )
|