ime_commit_proof 补上 phone_chain_proof 没覆盖的那半段:IME **显示**状态下 按键被输入法消费,只有 RemoteInputConnection.commitText 能到达我们——这正是 方案风险 R1(vivo ROM + 第三方中文 IME 行为未观测)此前唯一没有证据的点。 真机实测:mInputShown=true、mHaveConnection=true、状态栏 commit 2u、 Windows 靶窗收到 Hi(讯飞把首字母自动大写,属输入法行为,不是链路缺陷)。 back 键第一次只关键盘不断会话,也在这支脚本里断言。 shot.ps1 / capture_evidence.ps1:PS 5.1 的 '>' 以 UTF-16 写文件, 'adb exec-out screencap -p > x.png' 产出的 9 张证据图首字节全是 FF FE, 全部不可用;改为设备内 screencap 落地再 pull,并校验 PNG 签名。 V5 等待预算 30s→50s:不可达 IP 实测 32s 才回表单报 timed out, 预算过小会把「仍在超时中」误判成验收失败。
24 lines
1.0 KiB
PowerShell
24 lines
1.0 KiB
PowerShell
# Byte-safe device screenshot helper.
|
|
# ASCII-only. PS 5.1 `>` redirection writes UTF-16, which corrupts PNG bytes
|
|
# (measured 2026-10-30: `adb exec-out screencap -p > x.png` produced a file
|
|
# starting with FF FE). Capture on-device and pull instead.
|
|
param(
|
|
[Parameter(Mandatory = $true)][string]$Out,
|
|
[string]$Device = "/sdcard/shot.png"
|
|
)
|
|
$ErrorActionPreference = "Stop"
|
|
$adb = "D:\working\android\sdk\platform-tools\adb.exe"
|
|
$old = $ErrorActionPreference
|
|
$ErrorActionPreference = "Continue"
|
|
try {
|
|
& $adb shell screencap -p $Device | Out-Null
|
|
if ($LASTEXITCODE -ne 0) { throw "screencap failed ($LASTEXITCODE)" }
|
|
& $adb pull $Device $Out | Out-Null
|
|
if ($LASTEXITCODE -ne 0) { throw "pull failed ($LASTEXITCODE)" }
|
|
}
|
|
finally { $ErrorActionPreference = $old }
|
|
$b = [System.IO.File]::ReadAllBytes($Out)
|
|
$sig = ($b[0..3] | ForEach-Object { $_.ToString("X2") }) -join " "
|
|
if ($sig -ne "89 50 4E 47") { throw "not a PNG (sig=$sig): $Out" }
|
|
Write-Host ("OK {0} ({1:N0} bytes)" -f (Split-Path $Out -Leaf), $b.Length)
|