117 lines
3.6 KiB
PowerShell
117 lines
3.6 KiB
PowerShell
# =============================================================================
|
||
# 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
|