rwadurian/frontend/mobile-app/scripts/build.ps1

117 lines
3.5 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =============================================================================
# Flutter APK 构建脚本(自动增加构建号)- Windows PowerShell 版本
# =============================================================================
# 用法:
# .\scripts\build.ps1 # 构建 release APK自动增加构建号
# .\scripts\build.ps1 -NoBump # 构建但不增加构建号
# .\scripts\build.ps1 -SetBuild 100 # 设置指定构建号
# =============================================================================
param(
[switch]$NoBump,
[int]$SetBuild = 0
)
$ErrorActionPreference = "Stop"
# 获取脚本目录
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$ProjectDir = Split-Path -Parent $ScriptDir
$PubspecFile = Join-Path $ProjectDir "pubspec.yaml"
function Write-Info { param($msg) Write-Host "[INFO] $msg" -ForegroundColor Blue }
function Write-Success { param($msg) Write-Host "[OK] $msg" -ForegroundColor Green }
function Write-Warn { param($msg) Write-Host "[WARN] $msg" -ForegroundColor Yellow }
# 读取当前版本
function Get-CurrentVersion {
$content = Get-Content $PubspecFile -Raw
if ($content -match "version:\s*(.+)") {
return $Matches[1].Trim()
}
return "1.0.0+1"
}
# 解析版本号
function Parse-Version {
param($version)
$parts = $version -split '\+'
return @{
Name = $parts[0]
Build = [int]$parts[1]
}
}
# 更新版本号
function Update-Version {
param($newVersion)
$content = Get-Content $PubspecFile -Raw
$content = $content -replace "version:\s*.+", "version: $newVersion"
Set-Content $PubspecFile $content -NoNewline
}
# 主函数
function Main {
Set-Location $ProjectDir
# 获取当前版本
$currentVersion = Get-CurrentVersion
$version = Parse-Version $currentVersion
Write-Info "当前版本: $currentVersion"
Write-Info "版本名: $($version.Name), 构建号: $($version.Build)"
# 更新构建号
$buildNumber = $version.Build
if ($SetBuild -gt 0) {
$buildNumber = $SetBuild
Write-Info "设置构建号为: $buildNumber"
} elseif (-not $NoBump) {
$buildNumber = $buildNumber + 1
Write-Info "自动增加构建号为: $buildNumber"
}
$newVersion = "$($version.Name)+$buildNumber"
if ($currentVersion -ne $newVersion) {
Update-Version $newVersion
Write-Success "版本更新为: $newVersion"
}
# 清理并获取依赖
Write-Info "获取依赖..."
flutter pub get
# 构建 APK
Write-Info "构建 Release APK..."
flutter build apk --release
# 输出结果
$apkPath = Join-Path $ProjectDir "build\app\outputs\flutter-apk\app-release.apk"
if (Test-Path $apkPath) {
$apkSize = (Get-Item $apkPath).Length / 1MB
Write-Success "构建完成!"
Write-Host ""
Write-Host "APK 信息:"
Write-Host " 版本: $newVersion"
Write-Host " 路径: $apkPath"
Write-Host " 大小: $([math]::Round($apkSize, 2)) MB"
Write-Host ""
# 复制到 publish 目录
$publishDir = Join-Path $ProjectDir "publish"
if (-not (Test-Path $publishDir)) {
New-Item -ItemType Directory -Path $publishDir | Out-Null
}
$publishPath = Join-Path $publishDir "rwa-durian-$($version.Name)-$buildNumber.apk"
Copy-Item $apkPath $publishPath
Write-Success "已复制到: $publishPath"
} else {
Write-Warn "APK 文件未找到"
exit 1
}
}
Main