109 lines
2.5 KiB
Batchfile
109 lines
2.5 KiB
Batchfile
@echo off
|
||
SETLOCAL EnableDelayedExpansion
|
||
|
||
:: 设置 UTF-8 代码页以支持中文显示
|
||
chcp 65001 > nul
|
||
|
||
:: 获取项目根目录
|
||
for %%I in ("%~dp0.") do set "PROJECT_DIR=%%~fI"
|
||
|
||
:: 1. 强制终止所有Java进程(Gradle相关)
|
||
echo Terminating processes...
|
||
taskkill /f /im java.exe 2>nul
|
||
taskkill /f /im gradlew.exe 2>nul
|
||
timeout /t 2 /nobreak >nul
|
||
|
||
:: 修复后的Flutter构建脚本
|
||
echo Running flutter clean...
|
||
call flutter clean
|
||
if !ERRORLEVEL! neq 0 (
|
||
echo flutter clean failed with error: !ERRORLEVEL!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
:: 3. 强制删除构建目录(带重试机制)
|
||
echo Removing residual files
|
||
call :ForceDelete "build"
|
||
call :ForceDelete ".dart_tool"
|
||
call :ForceDelete "pubspec.lock"
|
||
|
||
echo Running flutter pub get...
|
||
call flutter pub get
|
||
if !ERRORLEVEL! neq 0 (
|
||
echo flutter pub get failed with error: !ERRORLEVEL!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
echo Running build_runner...
|
||
call flutter packages pub run build_runner build --delete-conflicting-outputs
|
||
if !ERRORLEVEL! neq 0 (
|
||
echo build_runner failed with error: !ERRORLEVEL!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
echo Building release APK...
|
||
call flutter build apk --release
|
||
if !ERRORLEVEL! neq 0 (
|
||
echo APK build failed with error: !ERRORLEVEL!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
:: 新增:打开APK所在文件夹
|
||
echo Opening APK directory
|
||
if exist "build\app\outputs\flutter-apk\" (
|
||
explorer "build\app\outputs\flutter-apk\"
|
||
) else (
|
||
echo APK directory does not exist
|
||
)
|
||
|
||
echo.
|
||
echo All steps completed successfully!
|
||
echo APK file generated at: %PROJECT_DIR%\build\app\outputs\flutter-apk\
|
||
echo.
|
||
timeout /t 3 /nobreak >nul
|
||
exit /b 0
|
||
|
||
:: 函数区 -------------------------------------------------
|
||
:ForceDelete
|
||
setlocal
|
||
set "target=%~1"
|
||
set "max_retries=3"
|
||
set "retry_delay=1"
|
||
|
||
:: 检查目标是否存在
|
||
if not exist "%target%" (
|
||
endlocal
|
||
goto :eof
|
||
)
|
||
|
||
:: 尝试多次删除
|
||
for /l %%i in (1,1,%max_retries%) do (
|
||
echo Attempting to delete %target% (try %%i of %max_retries%)
|
||
|
||
:: 先尝试删除文件
|
||
del /f /q /s "%target%\*" 2>nul
|
||
:: 再尝试删除目录
|
||
rmdir /s /q "%target%" 2>nul
|
||
|
||
:: 检查是否删除成功
|
||
if not exist "%target%" (
|
||
echo Successfully deleted %target%
|
||
endlocal
|
||
goto :eof
|
||
)
|
||
|
||
:: 如果未成功,等待后重试
|
||
if %%i lss %max_retries% (
|
||
timeout /t %retry_delay% /nobreak >nul
|
||
set /a retry_delay*=2 :: 指数退避策略
|
||
)
|
||
)
|
||
|
||
:: 如果所有尝试都失败
|
||
echo Warning: Could not completely delete %target%, some files may be in use
|
||
endlocal
|
||
goto :eof |