_build.bat 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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.bat [prod^|dev] [version] [no_pda^|offline] [appName]
  10. echo [示例] _build.bat prod v1.0.0 no_pda "cf-app-v1.0.0-no_pda"
  11. pause
  12. exit /b 1
  13. )
  14. if /i not "%~1"=="prod" if /i not "%~1"=="dev" (
  15. echo [Error] 参数1无效,仅支持 prod 或 dev
  16. pause
  17. exit /b 1
  18. )
  19. :: 注意:参数2是version,参数3是环境标识(no_pda/offline),参数4是appName
  20. :: ========== 3. 环境变量加载 ==========
  21. set "ENV=%~1"
  22. if not "%~3"=="" if /i "%~3"=="no_pda" (
  23. set "ENV=%~1_no_pda"
  24. ) else if not "%~3"=="" if /i "%~3"=="offline" (
  25. set "ENV=%~1_offline"
  26. )
  27. set "ANDROID_PLATFORM=android-arm64"
  28. set "APP_NAME=cf-app"
  29. :: 根据参数组合设置APP_NAME
  30. if not "%~4"=="" (
  31. :: 如果提供了appName(第四个参数)
  32. set "APP_NAME=%~4"
  33. ) else (
  34. :: 否则按规则构造APP_NAME
  35. if not "%~3"=="" (
  36. if "%~3"=="no_pda" (
  37. set "APP_NAME=pda_no_cf-app"
  38. ) else if "%~3"=="offline" (
  39. set "APP_NAME=pda_offline_cf-app"
  40. )
  41. ) else (
  42. set "APP_NAME=pda_cf-app"
  43. )
  44. set "APP_VERSION=V1.0.0"
  45. :: 添加版本号到APP_NAME
  46. if not "%~2"=="" (
  47. set "APP_VERSION=%~2"
  48. )
  49. )
  50. set "ENV_FILE=%PROJECT_ROOT%\.env\.env.%ENV%"
  51. if not exist "%ENV_FILE%" (
  52. echo [Error] 环境文件不存在: %ENV_FILE%
  53. pause
  54. exit /b 1
  55. )
  56. :: ========== 4. 构建参数生成 ==========
  57. set "DEFINE_ARGS="
  58. for /f "tokens=1,* delims==" %%a in ('type "%ENV_FILE%" ^| findstr /v "^#" ^| findstr /v "^$"') do (
  59. set "DEFINE_ARGS=!DEFINE_ARGS! --dart-define=%%a=%%b"
  60. )
  61. :: ========== 5. 执行构建 ==========
  62. echo ==============================================
  63. echo [INFO] 开始构建: 环境=%ENV% ^| 平台=%ANDROID_PLATFORM% ^| 应用=%APP_NAME%
  64. cd /d "%PROJECT_ROOT%"
  65. call flutter build apk !DEFINE_ARGS! --target-platform !ANDROID_PLATFORM! --no-tree-shake-icons
  66. if !errorlevel! neq 0 (
  67. echo [Error] Flutter构建失败
  68. pause
  69. exit /b 1
  70. )
  71. :: ========== 6. 文件处理优化 ==========
  72. :: 生成时间戳 (YYYYMMDDHHMMSS)
  73. @REM for /f %%i in ('powershell -Command "Get-Date -Format yyyyMMddHHmmss"') do set TIMESTAMP=%%i
  74. set "APK_SOURCE=%PROJECT_ROOT%\build\app\outputs\flutter-apk\app-release.apk"
  75. set "APK_DEST=%PROJECT_ROOT%\release\app\%APP_NAME%_%APP_VERSION%.apk"
  76. if exist "%APK_SOURCE%" (
  77. copy /y "%APK_SOURCE%" "%APK_DEST%" >nul
  78. echo ==============================================
  79. echo [INFO] APK生成成功: %APK_DEST%
  80. echo ==============================================
  81. ) else (
  82. echo [Error] APK源文件不存在: %APK_SOURCE%
  83. )