Droid
Unified Android testing tool with JSON output for LLM-friendly automation.
CLI Discovery
The CLI is located at ./scripts/droid-cli/ relative to this SKILL.md file.
| Platform | Script |
|---|---|
| Unix/Linux/macOS | droid |
| Windows | droid.ps1 |
Claude Code: Use ${CLAUDE_PLUGIN_ROOT}/skills/droid/scripts/droid-cli/droid (or droid.ps1 on Windows).
Prerequisites
- •Bun runtime (https://bun.sh)
- •ADB (Android Debug Bridge) in PATH
- •Connected Android device or running emulator
- •USB debugging enabled on device
Quick Start
# Check device connection droid info # Screenshot + UI elements (most useful command) droid screenshot # Tap by text (no coordinates needed!) droid tap -t "Book Now" # Fill a form field in one command droid fill "Email" "user@example.com" # Wait for element to appear droid wait-for -t "Success" -s 5
Core Commands
screenshot
Capture screenshot AND UI elements. Returns element coordinates for tapping.
droid screenshot droid screenshot --clickable # Only clickable elements droid screenshot --no-ui # Fast, no element dump
Response: {"ok":true,"screenshot":"/tmp/screenshot.png","elements":[{"text":"Book","class":"Button","clickable":true,"x":540,"y":350,"bounds":[400,300,680,400]}]}
tap
Tap by text or coordinates.
droid tap -t "Book Now" # By text droid tap -t "State" --prefer-input # Prefer input fields over labels droid tap -t "Submit" --clickable # Only clickable elements droid tap 540 960 # By coordinates
fill
Fill text field in one command (tap + clear + type + hide-keyboard).
droid fill "Enter your email" "user@example.com"
wait-for
Wait for element to appear (with timeout).
droid wait-for -t "Welcome" -s 10
# Returns: {"ok":true,"found":true,"element":{...}} or {"ok":true,"found":false,"timeout":true}
Form Workflow Commands
clear / type / hide-keyboard
droid clear # Clear focused field droid type "hello@example.com" # Type into focused field droid hide-keyboard # Dismiss keyboard (use instead of 'key back')
key
Send key events.
| Key | Purpose |
|---|---|
back | Navigate back |
enter | Submit/confirm |
move_home | Cursor to start of text |
move_end | Cursor to end of text |
delete | Backspace |
app_home | Android home screen |
droid key back droid key move_home
Other Commands
| Command | Purpose | Example |
|---|---|---|
swipe | Scroll | droid swipe up |
longpress | Long press | droid longpress -t "Item" |
launch | Launch app | droid launch com.example.app |
current | Current activity | droid current |
info | Device info | droid info |
wait | Wait ms | droid wait 1000 |
select-all | Select text | droid select-all |
See references/commands.md for full documentation.
Testing Workflow
Recommended Pattern
# 1. Screenshot to see current state droid screenshot # 2. Read the screenshot image with Claude's Read tool # 3. Tap by text when possible droid tap -t "Book Now" -w 1000 # 4. Verify the action worked droid wait-for -t "Booking Confirmed" -s 5
Form Filling Pattern
# Use fill command for efficiency droid fill "Email" "user@example.com" droid fill "Password" "secret123" droid tap -t "Sign In" --clickable droid wait-for -t "Welcome" -s 10
Tips
- •Use
--prefer-inputwhen tapping form fields to avoid hitting labels - •Use
--clickablewhen tapping buttons to ensure element is interactive - •Use
hide-keyboardnotkey backto dismiss keyboard - •Use
wait-forinstead of blindwaitfor reliable verification
Error Handling
All errors return JSON with "ok":false:
droid tap -t "NonexistentButton"
# {"ok":false,"error":"No element found matching 'NonexistentButton'"}