@echo off chcp 936 >nul 2>&1 setlocal enabledelayedexpansion :: ========== 1. 基础配置 ========== set "PROJECT_ROOT=%~dp0\.." for %%i in ("%PROJECT_ROOT%") do set "PROJECT_ROOT=%%~fi" :: ========== 2. 参数校验 ========== if "%1" == "" ( echo [错误] 用法:run_env.bat [prod^|dev] [^|no_pda^|offline] [appName] echo [示例] run_env.bat prod no_pda "no_pda_cf-app" pause exit /b 1 ) if /i not "%1" == "prod" if /i not "%1" == "dev" ( echo [错误] 第一个参数必须是 prod 或 dev pause exit /b 1 ) if not "%2" == "" if /i not "%2" == "no_pda" if /i not "%2" == "offline" ( echo [错误] 第二个参数只能是空、no_pda 或 offline pause exit /b 1 ) :: ========== 3. 核心变量拼接(修复APP_NAME) ========== set "ENV=%1" if not "%2" == "" set "ENV=%1_%2" :: APP名称修复:先赋值默认值,再拼接修饰符 set "APP_NAME=cf-app" :: 先设置默认值 if not "%2" == "" set "APP_NAME=%2_%APP_NAME%" :: 有修饰符则拼接 if not "%3" == "" set "APP_NAME=%3" :: 自定义名称优先级最高 set "ENV_FILE=%PROJECT_ROOT%\.env\.env.%ENV%" if not exist "%ENV_FILE%" ( echo [错误] 配置文件不存在:%ENV_FILE% pause exit /b 1 ) :: ========== 4. 解析dart-define参数 ========== 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 [开始编译] 环境:%ENV% ^| APP名称:%APP_NAME% echo ============================================== cd /d "%PROJECT_ROOT%" call flutter build apk !DEFINE_ARGS! --target-platform android-arm --no-tree-shake-icons if !errorlevel! neq 0 ( echo [错误] Flutter编译失败! pause exit /b 1 ) :: ========== 6. 简化版时间戳 ========== set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%" set "TIMESTAMP=!TIMESTAMP: =0!" set "TIMESTAMP=!TIMESTAMP:周一=!" & set "TIMESTAMP=!TIMESTAMP:周二=!" & set "TIMESTAMP=!TIMESTAMP:周三=!" set "TIMESTAMP=!TIMESTAMP:周四=!" & set "TIMESTAMP=!TIMESTAMP:周五=!" & set "TIMESTAMP=!TIMESTAMP:周六=!" & set "TIMESTAMP=!TIMESTAMP:周日=!" :: ========== 7. 复制APK文件 ========== set "APK_SOURCE=%PROJECT_ROOT%\build\app\outputs\flutter-apk\app-release.apk" set "APK_DEST_DIR=%PROJECT_ROOT%\release\app\" set "APK_DEST=%APK_DEST_DIR%%APP_NAME%_!TIMESTAMP!.apk" if not exist "%APK_DEST_DIR%" md "%APK_DEST_DIR%" >nul if exist "%APK_SOURCE%" ( copy /y "%APK_SOURCE%" "%APK_DEST%" >nul echo ============================================== echo [编译成功] APK文件已生成: echo %APK_DEST% echo ============================================== ) else ( echo [错误] 未找到编译产物:%APK_SOURCE% )