_win_build.bat 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. @echo off
  2. chcp 65001 >nul 2>&1
  3. setlocal enabledelayedexpansion
  4. :: ========== 1. 项目根目录初始化 ==========
  5. set "PROJECT_ROOT=%~dp0\.."
  6. for %%i in ("%PROJECT_ROOT%") do set "PROJECT_ROOT=%%~fi"
  7. :: ========== 2. 参数校验 ==========
  8. if "%~1"=="" (
  9. echo [Error] 请使用命令: _build_win.bat [prod^|dev] [version] [^|offline]
  10. echo [示例] _build_win.bat prod v1.0.0 offline
  11. echo [示例] _build_win.bat prod v1.0.0
  12. pause
  13. exit /b 1
  14. )
  15. if /i not "%~1"=="prod" if /i not "%~1"=="dev" (
  16. echo [Error] 参数1无效,仅支持 prod 或 dev
  17. pause
  18. exit /b 1
  19. )
  20. :: ========== 3. 环境变量加载 ==========
  21. set "ENV=%~1_no_pda"
  22. if not "%~3"=="" if /i "%~3"=="offline" (
  23. set "ENV=%~1_no_pda_offline"
  24. ) else if not "%~3"=="" (
  25. set "ENV=%~1_no_pda_%~3"
  26. )
  27. set "BUILD_PLATFORM=windows-x64"
  28. set "APP_NAME=cf-app"
  29. :: 根据参数组合设置APP_NAME
  30. if not "%~3"=="" (
  31. :: 如果提供了第三个参数
  32. if "%~3"=="offline" (
  33. set "APP_NAME=win_offline_cf-app"
  34. ) else (
  35. set "APP_NAME=win_%~3_cf-app"
  36. )
  37. ) else (
  38. set "APP_NAME=win_cf-app"
  39. )
  40. set "APP_VERSION=V1.0.0"
  41. :: 添加版本号到APP_NAME
  42. if not "%~2"=="" (
  43. set "APP_VERSION=%~2"
  44. )
  45. set "ENV_FILE=%PROJECT_ROOT%\.env\.env.%ENV%"
  46. if not exist "%ENV_FILE%" (
  47. echo [Error] 环境文件不存在: %ENV_FILE%
  48. pause
  49. exit /b 1
  50. )
  51. :: ========== 4. 构建参数生成 ==========
  52. set "DEFINE_ARGS="
  53. for /f "tokens=1,* delims==" %%a in ('type "%ENV_FILE%" ^| findstr /v "^#" ^| findstr /v "^$"') do (
  54. set "DEFINE_ARGS=!DEFINE_ARGS! --dart-define=%%a=%%b"
  55. )
  56. :: ========== 5. 执行构建 ==========
  57. echo ==============================================
  58. echo [INFO] 开始构建: 环境=%ENV% ^| 平台=%BUILD_PLATFORM% ^| 应用=%APP_NAME%
  59. cd /d "%PROJECT_ROOT%"
  60. call flutter build windows !DEFINE_ARGS!
  61. if !errorlevel! neq 0 (
  62. echo [Error] Flutter构建失败
  63. pause
  64. exit /b 1
  65. )
  66. :: ========== 6. 文件处理优化 ==========
  67. :: 正确的构建输出路径
  68. set "WIN_SOURCE=%PROJECT_ROOT%\build\windows\x64\runner\Release"
  69. set "WIN_DEST=%PROJECT_ROOT%\release\windows\%APP_NAME%_%APP_VERSION%"
  70. if exist "%WIN_SOURCE%" (
  71. if not exist "%PROJECT_ROOT%\release\windows" (
  72. mkdir "%PROJECT_ROOT%\release\windows"
  73. )
  74. xcopy /E /I /Y "%WIN_SOURCE%" "%WIN_DEST%"
  75. echo ==============================================
  76. echo [INFO] Windows应用打包成功: %WIN_DEST%
  77. echo ==============================================
  78. ) else (
  79. echo [Error] Windows应用源文件不存在: %WIN_SOURCE%
  80. pause
  81. exit /b 1
  82. )
  83. :: ========== 7. 打包发布文件 ==========
  84. echo ==============================================
  85. echo [INFO] 正在压缩应用包...
  86. cd /d "%PROJECT_ROOT%"
  87. set "ZIP_NAME=%APP_NAME%_%APP_VERSION%.zip"
  88. set "ZIP_PATH=%PROJECT_ROOT%\release\windows\%ZIP_NAME%"
  89. :: 使用 PowerShell 命令进行 ZIP 压缩
  90. powershell -Command "Compress-Archive -Path '%WIN_DEST%\*' -DestinationPath '%ZIP_PATH%' -Force"
  91. if exist "%ZIP_PATH%" (
  92. echo [INFO] 应用已成功压缩: %ZIP_PATH%
  93. ) else (
  94. echo [Error] 压缩失败,请检查系统是否支持 Compress-Archive
  95. pause
  96. exit /b 1
  97. )