How kimyeongseong/qa-device-farm works
QA Device Farm lets browser users and CLI/CI clients share Android devices through a FastAPI service, with leases, device operations, logs, macros, and streaming. The main workflow is client → API → device control or stream → result; ws-scrcpy supplies the low-latency browser stream, while the README also documents a simpler server-side fallback. Python endpoint details and most dashboard implementation are consolidated or absent from the supplied tree, so those capabilities are represented at their documented service boundary; ws-scrcpy edges are limited to indexed source references and excerpts.
Main entry points: server.py Farm API · StreamClientScrcpy.ts Scrcpy stream client · FileListingClient.ts File listing · ManagerClient.ts Client connections
Components 23
Farm clients
- Device dashboard
- Farm CLI
cli.py
Farm API
- Farm API
server.py - Device leases
server.py - Device inventory
server.py - Batch operations
server.py - Logcat and crashes
server.py - Macro record / replay
server.py - Basic stream fallback
server.py - Crash log analysis
analyze_logs.py
Device operations
- Device controls
server.py - ADB
- Android devices
Streaming
- Stream server
ws-scrcpy/src/server/index.ts - Scrcpy stream client
ws-scrcpy/src/app/googDevice/client/StreamClientScrcpy.ts - Video player
ws-scrcpy/src/app/player/BasePlayer.ts - Input interaction
ws-scrcpy/src/app/interactionHandler/InteractionHandler.ts - Client connections
ws-scrcpy/src/app/client/ManagerClient.ts - WebSocket multiplexer
ws-scrcpy/src/packages/multiplexer/Multiplexer.ts - File listing
ws-scrcpy/src/app/googDevice/client/FileListingClient.ts - File push handler
ws-scrcpy/src/app/googDevice/filePush/FilePushHandler.ts
Other components
- Browser user
- CLI / CI
Connections 23
- Browser user → Device dashboard: uses
- Device dashboard → Farm API: calls
- CLI / CI → Farm CLI: runs
- Farm CLI → Farm API: calls
- Farm API → Device leases: manages
server.py - Farm API → Device inventory: lists
server.py - Farm API → Batch operations: dispatches
server.py - Farm API → Logcat and crashes: collects
server.py - Farm API → Macro record / replay: records / replays
server.py - Farm API → Device controls: controls
server.py - Device controls → ADB: invokes
- ADB → Android devices: controls
- Device dashboard → Scrcpy stream client: opens stream
- Scrcpy stream client → Video player: renders with
ws-scrcpy/src/app/googDevice/client/StreamClientScrcpy.ts - Scrcpy stream client → Input interaction: uses input
ws-scrcpy/src/app/googDevice/client/StreamClientScrcpy.ts - Scrcpy stream client → Client connections: extends
- Client connections → WebSocket multiplexer: creates channels
ws-scrcpy/src/app/client/ManagerClient.ts - Device dashboard → Basic stream fallback: opens fallback
- Farm API → Crash log analysis: supports log review
- Stream server → Android devices: streams device
- File listing → Client connections: uses
ws-scrcpy/src/app/googDevice/client/FileListingClient.ts - File listing → WebSocket multiplexer: opens channels
ws-scrcpy/src/app/googDevice/client/FileListingClient.ts - File listing → File push handler: uses uploads
ws-scrcpy/src/app/googDevice/client/FileListingClient.ts