@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.bat [prod^|dev] [version] [no_pda^|offline] [appName] echo [示例] _build.bat prod v1.0.0 no_pda "cf-app-v1.0.0-no_pda" pause exit /b 1 ) if /i not "%~1"=="prod" if /i not "%~1"=="dev" ( echo [Error] 参数1无效,仅支持 prod 或 dev pause exit /b 1 ) :: 注意:参数2是version,参数3是环境标识(no_pda/offline),参数4是appName :: ========== 3. 环境变量加载 ========== set "ENV=%~1" if not "%~3"=="" if /i "%~3"=="no_pda" ( set "ENV=%~1_no_pda" ) else if not "%~3"=="" if /i "%~3"=="offline" ( set "ENV=%~1_offline" ) set "ANDROID_PLATFORM=android-arm64" set "APP_NAME=cf-app" :: 根据参数组合设置APP_NAME if not "%~4"=="" ( :: 如果提供了appName(第四个参数) set "APP_NAME=%~4" ) else ( :: 否则按规则构造APP_NAME if not "%~3"=="" ( if "%~3"=="no_pda" ( set "APP_NAME=pda_no_cf-app" ) else if "%~3"=="offline" ( set "APP_NAME=pda_offline_cf-app" ) ) else ( set "APP_NAME=pda_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% ^| 平台=%ANDROID_PLATFORM% ^| 应用=%APP_NAME% cd /d "%PROJECT_ROOT%" call flutter build apk !DEFINE_ARGS! --target-platform !ANDROID_PLATFORM! --no-tree-shake-icons if !errorlevel! neq 0 ( echo [Error] Flutter构建失败 pause exit /b 1 ) :: ========== 6. 文件处理优化 ========== :: 生成时间戳 (YYYYMMDDHHMMSS) @REM for /f %%i in ('powershell -Command "Get-Date -Format yyyyMMddHHmmss"') do set TIMESTAMP=%%i set "APK_SOURCE=%PROJECT_ROOT%\build\app\outputs\flutter-apk\app-release.apk" set "APK_DEST=%PROJECT_ROOT%\release\app\%APP_NAME%_%APP_VERSION%.apk" if exist "%APK_SOURCE%" ( copy /y "%APK_SOURCE%" "%APK_DEST%" >nul echo ============================================== echo [INFO] APK生成成功: %APK_DEST% echo ============================================== ) else ( echo [Error] APK源文件不存在: %APK_SOURCE% )