33 lines
1.9 KiB
PowerShell
33 lines
1.9 KiB
PowerShell
param(
|
|
[string]$ToolchainRoot = 'C:/Users/david/Desktop/app/.tools',
|
|
[ValidateSet('debug', 'release')][string]$Mode = 'release'
|
|
)
|
|
$ErrorActionPreference = 'Stop'
|
|
$env:HEPAN_TOOLCHAIN_ROOT=$ToolchainRoot
|
|
. "$PSScriptRoot/android-env.ps1"
|
|
$projectRoot=Split-Path $PSScriptRoot -Parent
|
|
Push-Location "$projectRoot/mobile"
|
|
try {
|
|
# Refresh local dependency metadata without network. The build then regenerates
|
|
# plugin registration for its mode, excluding test-only plugins from release.
|
|
flutter.bat pub get --offline
|
|
if($LASTEXITCODE -ne 0) { throw '本地依赖准备失败,未开始构建' }
|
|
flutter.bat build apk "--$Mode"
|
|
if($LASTEXITCODE -ne 0) { throw 'Android 构建失败,未复制 APK' }
|
|
$built=Join-Path (Get-Location) "build/app/outputs/flutter-apk/app-$Mode.apk"
|
|
if(!(Test-Path -LiteralPath $built)) { throw '本次构建未生成 APK' }
|
|
$taskSigner = Join-Path $env:ANDROID_HOME 'build-tools/36.0.0/apksigner.bat'
|
|
$taskSignature = & $taskSigner verify --print-certs $built
|
|
if ($LASTEXITCODE -ne 0) { throw 'APK 签名验证失败,未复制 APK' }
|
|
$taskExpectedCertificate = 'AF5C21B1BA1E48E461D8EA38DF0FE1C3653F64EB7E8E7728BAE6E5D988BA0D0A'
|
|
$taskSignatureText = $taskSignature -join "`n"
|
|
if ($taskSignatureText -notmatch 'certificate SHA-256 digest:\s*([a-fA-F0-9]{64})' -or
|
|
$Matches[1].ToUpperInvariant() -ne $taskExpectedCertificate) {
|
|
throw '签名证书与原证书不一致,未复制 APK。请保留原有签名文件,不要重新生成。'
|
|
}
|
|
New-Item -ItemType Directory -Force "$projectRoot/dist" | Out-Null
|
|
$taskArtifact = if ($Mode -eq 'release') { 'TPSchedule.apk' } else { 'TPSchedule-debug.apk' }
|
|
Copy-Item -LiteralPath $built -Destination "$projectRoot/dist/$taskArtifact" -Force
|
|
Get-Item -LiteralPath "$projectRoot/dist/$taskArtifact" | Select-Object FullName,Length,LastWriteTime
|
|
} finally { Pop-Location }
|