Real input injection means taps, swipes, and key presses from your AI tool go through the platform's actual event pipeline — equivalent to a finger on the screen, not a mock or a simulated callback.
Every OmniDebugLink SDK ships a family of write tasks: ui_click, tap_screen, swipe, long_press, input_text, and send_key. When the AI calls one, the on-device SDK dispatches the gesture as genuine input events. The app under test cannot tell the difference, because there is none — overlays, gesture recognizers, and key handlers all react exactly as they would to a real user.
Each platform uses its native injection path. On Android the SDK posts a full touch sequence through dispatchTouchEvent on the target's own window root, so dialogs and popup windows are hit correctly. Unity resolves the tap target with an EventSystem raycast and delivers pointer down/up/click through the real event system; Flutter injects pointer events into the gesture binding; macOS posts real events to the app process. A swipe is delivered as a frame-by-frame drag with deltas and a duration, so kinetic scrolling and inertia behave naturally.
Coordinates for tap_screen and swipe are normalized to the 0-1 range, so the same call works on any screen size or density. The origin is top-left on every platform except Unity, where it is bottom-left — each task's description states its origin so the AI converts screenshot pixels correctly.
Key input is real too. On Android, send_key routes the back key through the activity's key dispatch. On Godot it injects a genuine key event through the engine's input system, so hardware-style keys like Escape and Back reach _unhandled_input handlers — something most engines can't do (see the Godot platform page). A global actionsEnabled switch turns any SDK into read-only observation mode, where all write tasks are rejected.
A tap is a single run_task call with normalized coordinates:
run_task
device: "pixel-7-living-room"
type: "tap_screen"
payload: { "x": 0.5, "y": 0.82 }
The synchronous call blocks until the device has dispatched the touch. A typical AI loop follows up with a screenshot to visually confirm the UI responded.
Input injection is built into all 7 official SDKs: Unity, Android, iOS · macOS, Flutter, React Native, Godot, and Web (JavaScript). See each platform page for its full task list.