feat: integrate N7Cockpit remote mode control
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$AdbPath = 'D:\Android\Sdk\platform-tools\adb.exe',
|
||||
[string]$PackageName = 'com.seeker.n7cockpit.remote',
|
||||
[string]$ActivityName = 'com.seeker.n7cockpit.MainActivity',
|
||||
[int]$TimeoutSeconds = 15
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
if (-not (Test-Path -LiteralPath $AdbPath)) {
|
||||
throw "adb does not exist: $AdbPath"
|
||||
}
|
||||
|
||||
$deviceLines = @(& $AdbPath devices) | Where-Object { $_ -match "\tdevice$" }
|
||||
if ($deviceLines.Count -ne 1) {
|
||||
throw "Exactly one online Android device is required; found $($deviceLines.Count)."
|
||||
}
|
||||
|
||||
$installed = (& $AdbPath shell pm list packages $PackageName | Out-String).Trim()
|
||||
if ($installed -notmatch [regex]::Escape($PackageName)) {
|
||||
throw "The remote debug app is not installed: $PackageName"
|
||||
}
|
||||
|
||||
$component = "$PackageName/$ActivityName"
|
||||
& $AdbPath shell am force-stop $PackageName | Out-Null
|
||||
$launchOutput = & $AdbPath shell am start -W -n $component 2>&1
|
||||
if ($LASTEXITCODE -ne 0 -or ($launchOutput -join "`n") -notmatch 'Status:\s+ok') {
|
||||
throw "Failed to launch app:`n$($launchOutput -join "`n")"
|
||||
}
|
||||
|
||||
$deadline = (Get-Date).AddSeconds($TimeoutSeconds)
|
||||
$resumed = ''
|
||||
$pidValue = ''
|
||||
do {
|
||||
Start-Sleep -Milliseconds 500
|
||||
$pidValue = (& $AdbPath shell pidof $PackageName 2>$null | Out-String).Trim()
|
||||
$resumed = (& $AdbPath shell dumpsys activity activities |
|
||||
Select-String 'topResumedActivity' |
|
||||
Select-Object -First 1).Line
|
||||
} while ((-not $pidValue -or $resumed -notmatch [regex]::Escape($component)) -and
|
||||
(Get-Date) -lt $deadline)
|
||||
|
||||
if (-not $pidValue) {
|
||||
throw 'The app process was not found after launch.'
|
||||
}
|
||||
if ($resumed -notmatch [regex]::Escape($component)) {
|
||||
throw "The app process exists but its Activity is not foreground: $resumed"
|
||||
}
|
||||
|
||||
[pscustomobject]@{
|
||||
Device = (([string]$deviceLines) -split "\t")[0]
|
||||
Package = $PackageName
|
||||
Component = $component
|
||||
Pid = $pidValue
|
||||
Foreground = $true
|
||||
}
|
||||
Reference in New Issue
Block a user