|
|
@@ -0,0 +1,113 @@
|
|
|
+@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
|
|
|
+)
|