# 跨语言联调:桌面 JVM 的 Java 协议层 <-> 真实 Python 被控端 # 用法: pwsh -File _tests\run_java_bridge.ps1 $ErrorActionPreference = "Stop" $root = Split-Path -Parent $PSScriptRoot # LanRemote/ $jdkn = Join-Path $root "..\starklink\toolchain\jdk17" $javac = Join-Path $jdkn "bin\javac.exe" $java = Join-Path $jdkn "bin\java.exe" $src = Join-Path $root "android\src" $out = Join-Path $root "_tests\out_java" $codefile = Join-Path $env:TEMP "lr_paircode.txt" $port = 8799 if (-not (Test-Path $javac)) { throw "找不到 javac: $javac" } Write-Host "===== 1. 编译纯 Java 协议层 =====" -ForegroundColor Cyan if (Test-Path $out) { Remove-Item -Recurse -Force $out } New-Item -ItemType Directory -Force -Path $out | Out-Null $sources = @( (Join-Path $src "com\lanremote\watch\Json.java"), (Join-Path $src "com\lanremote\watch\B64.java"), (Join-Path $src "com\lanremote\watch\RemoteClient.java"), (Join-Path $root "_tests\java\JavaClientTest.java") ) & $javac --release 8 -encoding UTF-8 -d $out @sources 2>&1 if ($LASTEXITCODE -ne 0) { throw "javac 编译失败" } Write-Host "编译通过" -ForegroundColor Green Write-Host "`n===== 2. 启动 Python 被控端(桩模式)=====" -ForegroundColor Cyan if (Test-Path $codefile) { Remove-Item $codefile -Force } $stub = Start-Process -FilePath "python" ` -ArgumentList "_tests\run_stub_server.py", "--port", $port, "--code-file", $codefile ` -WorkingDirectory $root -PassThru -WindowStyle Hidden ` -RedirectStandardOutput (Join-Path $env:TEMP "lr_stub_out.txt") ` -RedirectStandardError (Join-Path $env:TEMP "lr_stub_err.txt") $deadline = (Get-Date).AddSeconds(20) while (-not (Test-Path $codefile) -and (Get-Date) -lt $deadline) { Start-Sleep -Milliseconds 300 } if (-not (Test-Path $codefile)) { Get-Content (Join-Path $env:TEMP "lr_stub_err.txt") -ErrorAction SilentlyContinue Stop-Process -Id $stub.Id -Force -ErrorAction SilentlyContinue throw "被控端未就绪" } $code = (Get-Content $codefile -Raw).Trim() Write-Host "被控端就绪,端口 $port,配对码 $code" -ForegroundColor Green Write-Host "`n===== 3. 运行 Java 客户端联调 =====" -ForegroundColor Cyan try { & $java "-Dfile.encoding=UTF-8" -cp $out JavaClientTest "127.0.0.1" $port $code 2>&1 $testExit = $LASTEXITCODE } finally { Stop-Process -Id $stub.Id -Force -ErrorAction SilentlyContinue Write-Host "`n已停止被控端" -ForegroundColor DarkGray } Write-Host "`nJava 测试退出码: $testExit" exit $testExit