build.bat 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. @echo off
  2. chcp 936 >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 [错误] 用法:run_env.bat [prod^|dev] [^|no_pda^|offline] [appName]
  10. echo [示例] run_env.bat prod no_pda "no_pda_cf-app"
  11. pause
  12. exit /b 1
  13. )
  14. if /i not "%1" == "prod" if /i not "%1" == "dev" (
  15. echo [错误] 第一个参数必须是 prod 或 dev
  16. pause
  17. exit /b 1
  18. )
  19. if not "%2" == "" if /i not "%2" == "no_pda" if /i not "%2" == "offline" (
  20. echo [错误] 第二个参数只能是空、no_pda 或 offline
  21. pause
  22. exit /b 1
  23. )
  24. :: ========== 3. 核心变量拼接(修复APP_NAME) ==========
  25. set "ENV=%1"
  26. if not "%2" == "" set "ENV=%1_%2"
  27. :: APP名称修复:先赋值默认值,再拼接修饰符
  28. set "APP_NAME=cf-app" :: 先设置默认值
  29. if not "%2" == "" set "APP_NAME=%2_%APP_NAME%" :: 有修饰符则拼接
  30. if not "%3" == "" set "APP_NAME=%3" :: 自定义名称优先级最高
  31. set "ENV_FILE=%PROJECT_ROOT%\.env\.env.%ENV%"
  32. if not exist "%ENV_FILE%" (
  33. echo [错误] 配置文件不存在:%ENV_FILE%
  34. pause
  35. exit /b 1
  36. )
  37. :: ========== 4. 解析dart-define参数 ==========
  38. set "DEFINE_ARGS="
  39. for /f "tokens=1,* delims==" %%a in ('type "%ENV_FILE%" ^| findstr /v "^#" ^| findstr /v "^$"') do (
  40. set "DEFINE_ARGS=!DEFINE_ARGS! --dart-define=%%a=%%b"
  41. )
  42. :: ========== 5. 执行编译 ==========
  43. echo ==============================================
  44. echo [开始编译] 环境:%ENV% ^| APP名称:%APP_NAME%
  45. echo ==============================================
  46. cd /d "%PROJECT_ROOT%"
  47. call flutter build apk !DEFINE_ARGS! --target-platform android-arm --no-tree-shake-icons
  48. if !errorlevel! neq 0 (
  49. echo [错误] Flutter编译失败!
  50. pause
  51. exit /b 1
  52. )
  53. :: ========== 6. 简化版时间戳 ==========
  54. set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
  55. set "TIMESTAMP=!TIMESTAMP: =0!"
  56. set "TIMESTAMP=!TIMESTAMP:周一=!" & set "TIMESTAMP=!TIMESTAMP:周二=!" & set "TIMESTAMP=!TIMESTAMP:周三=!"
  57. set "TIMESTAMP=!TIMESTAMP:周四=!" & set "TIMESTAMP=!TIMESTAMP:周五=!" & set "TIMESTAMP=!TIMESTAMP:周六=!" & set "TIMESTAMP=!TIMESTAMP:周日=!"
  58. :: ========== 7. 复制APK文件 ==========
  59. set "APK_SOURCE=%PROJECT_ROOT%\build\app\outputs\flutter-apk\app-release.apk"
  60. set "APK_DEST_DIR=%PROJECT_ROOT%\release\app\"
  61. set "APK_DEST=%APK_DEST_DIR%%APP_NAME%_!TIMESTAMP!.apk"
  62. if not exist "%APK_DEST_DIR%" md "%APK_DEST_DIR%" >nul
  63. if exist "%APK_SOURCE%" (
  64. copy /y "%APK_SOURCE%" "%APK_DEST%" >nul
  65. echo ==============================================
  66. echo [编译成功] APK文件已生成:
  67. echo %APK_DEST%
  68. echo ==============================================
  69. ) else (
  70. echo [错误] 未找到编译产物:%APK_SOURCE%
  71. )