<# build-hap.ps1 - 命令行构建 HAP(CI 与本地通用) 用法: powershell -ExecutionPolicy Bypass -File ci\build-hap.ps1 [-BuildMode debug|release] [-Product default] [-SdkHome ] [-DryRun] 说明: - 只封装 hvigorw 调用与产物定位,签名由 CI 的独立步骤完成(见 ci/README.md); - -DryRun 只打印将要执行的命令,不触发构建(用于自检与流水线 dry-run)。 #> param( [ValidateSet('debug', 'release')][string]$BuildMode = 'debug', [string]$Product = 'default', [string]$SdkHome = 'D:\env\huawei\command-line-tools\sdk', [switch]$DryRun ) $ErrorActionPreference = 'Stop' $projectRoot = Split-Path -Parent $PSScriptRoot if (-not (Test-Path (Join-Path $projectRoot 'hvigorfile.ts'))) { throw "未找到工程根目录(缺少 hvigorfile.ts): $projectRoot" } if (-not (Test-Path $SdkHome)) { throw "SDK 路径不存在: $SdkHome" } $env:DEVECO_SDK_HOME = $SdkHome $hvArgs = @( 'assembleHap', '--mode', 'module', '-p', "product=$Product", '-p', "buildMode=$BuildMode", '--no-daemon' ) if ($DryRun) { Write-Output ("PROJECT: " + $projectRoot) Write-Output ("SDK: " + $SdkHome) Write-Output ("DRYRUN: hvigorw " + ($hvArgs -join ' ')) return } Push-Location $projectRoot try { & hvigorw @hvArgs if ($LASTEXITCODE -ne 0) { throw "hvigorw 构建失败,退出码 $LASTEXITCODE" } } finally { Pop-Location } $outDir = Join-Path $projectRoot ("entry\build\" + $Product + "\outputs\" + $Product) $hap = Get-ChildItem $outDir -Filter '*.hap' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if ($null -eq $hap) { throw "未找到 HAP 产物: $outDir" } Write-Output ("ARTIFACT: " + $hap.FullName) Write-Output ("SIZE: " + $hap.Length)