Files

93 lines
3.4 KiB
PowerShell

# android-ui-verify.ps1 — Trigger CI Android debug APK build (optional), install via adb,
# capture logcat, and save UI screenshots. Artifacts stay local; do not commit outputs.
param(
[string]$Repo = "HKLHaoBin/openless",
[string]$Branch = "feat/mobile-portrait-ui",
[string]$Workflow = "Android APK (debug)",
[string]$ArtifactName = "openless-android-debug-arm64-v8a",
[switch]$SkipBuild,
[int]$StartupWaitSeconds = 8,
[string]$ProjectRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\\..\\..")).Path
)
$ErrorActionPreference = "Stop"
Set-Location $ProjectRoot
function Require-Command($name) {
if (-not (Get-Command $name -ErrorAction SilentlyContinue)) {
throw "Required command not found: $name"
}
}
Require-Command adb
if (-not $SkipBuild) {
Require-Command gh
}
$devices = adb devices | Select-String "device$"
if (-not $devices) {
throw "No adb device in 'device' state. Connect phone and enable USB debugging."
}
$ciDir = Join-Path $ProjectRoot "ci-artifacts"
$shotDir = Join-Path $ProjectRoot "android-screenshots"
New-Item -ItemType Directory -Force -Path $ciDir, $shotDir | Out-Null
if (-not $SkipBuild) {
Write-Host "Triggering workflow '$Workflow' on $Repo ref $Branch ..."
gh workflow run $Workflow --repo $Repo --ref $Branch
Start-Sleep -Seconds 5
$runLine = gh run list --repo $Repo --workflow $Workflow --limit 1 --json databaseId,status --jq '.[0]'
$run = $runLine | ConvertFrom-Json
if (-not $run.databaseId) {
throw "Could not resolve latest workflow run id."
}
$runId = $run.databaseId
Write-Host "Watching run $runId ..."
gh run watch $runId --repo $Repo --exit-status
if (Test-Path $ciDir) {
Get-ChildItem $ciDir -File | Remove-Item -Force
}
gh run download $runId --repo $Repo --name $ArtifactName --dir $ciDir
}
$apk = Get-ChildItem -Path $ciDir -Filter "OpenLess-android-debug-*.apk" -File | Select-Object -First 1
if (-not $apk) {
throw "No APK found in $ciDir. Run without -SkipBuild or place an APK there."
}
Write-Host "Installing $($apk.FullName) ..."
adb logcat -c
adb shell pm uninstall --user 0 com.openless.app 2>$null
if ($LASTEXITCODE -ne 0) {
adb uninstall com.openless.app 2>$null
}
adb install $apk.FullName
Write-Host "Starting MainActivity ..."
adb shell am start -n com.openless.app/.MainActivity
Start-Sleep -Seconds $StartupWaitSeconds
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$crashOnly = Join-Path $ProjectRoot "android-crash-only.log"
$fullLog = Join-Path $ProjectRoot "android-crash.log"
adb logcat -b crash -d -v time | Set-Content -Path $crashOnly -Encoding utf8
adb logcat -d -v time | Set-Content -Path $fullLog -Encoding utf8
adb shell dumpsys package com.openless.app | Set-Content -Path (Join-Path $ProjectRoot "openless-package.txt") -Encoding utf8
function Capture-Screen([string]$label) {
$out = Join-Path $shotDir "openless-screenshot-$label-$stamp.png"
$tmp = Join-Path $env:TEMP "openless-screencap-$label.png"
adb shell screencap -p /sdcard/openless-ui-$label.png
adb pull /sdcard/openless-ui-$label.png $tmp | Out-Null
if (Test-Path $tmp) {
Move-Item -Force $tmp $out
Write-Host "Screenshot: $out"
}
}
Capture-Screen "overview"
Write-Host "Capture additional screens manually or extend script with adb input tap coordinates."
Write-Host "Logs: $fullLog"
Write-Host "Filter: Select-String -Path '$fullLog' -Pattern 'FATAL EXCEPTION','panic','UnsatisfiedLinkError'"