JevDroid
September 19, 2026 · View on GitHub
A Python framework for controlling Android over ADB with Jev.
Give Jev a goal. It reads Android's accessibility tree, chooses an action, and JevDroid executes it: open apps, tap, swipe, and navigate back.
Use run() for the full loop or compose observe(), decide(), and act().
Includes standard ADB and persistent UIAutomator2 backends, TypeSafe and Vercel
providers, action permissions, and per-run budgets.
Speed and cost
| Metric | Result |
|---|---|
| Jev decision latency | 314 ms median |
| Estimated cost per decision | $0.00003374 average |
| Estimated decisions per $1 | ~29,600 at the same average cost |
| Decision accuracy | 78.6% |
Measured on 56 synthetic decisions across 28 cases, including incorrect answers. API timings exclude Android input. Results and limitations.
Quick start
Requires Python 3.11+, ADB, and an unlocked Android device with USB debugging authorized.
git clone https://github.com/antiyro/jevdroid.git
cd jevdroid
python -m venv .venv
source .venv/bin/activate
pip install -e ".[android]"
jevdroid run "Open Display settings without changing a setting" \
--package com.android.settings --allow-taps --budget 0.05
The CLI prompts for a hidden Vercel API key. Use --provider typesafe for direct
TypeSafe access, or jevdroid demo to try an offline simulation without a key.
On Windows, activate with .venv\Scripts\activate.
Python API
import getpass
from jevdroid import JevDroid, Policy
with JevDroid.connect(
api_key=getpass.getpass("Vercel API key: "),
policy=Policy(("com.android.settings",), allow_taps=True),
) as droid:
result = droid.run("Open Display settings without changing a setting.")
print(result.status, result.estimated_usd)
Early alpha. Goals and visible UI text are sent to the selected provider.
SDK · CLI · Architecture · Examples · Contributing · MIT License