|
@@ -0,0 +1,86 @@
|
|
|
|
|
+@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%
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+
|