android-adb — Claude Code skill: what it does, how to install
Teaches coding agents to interact with Android devices and emulators using raw ADB commands. It handles app launches, touch input, UI hierarchy dumps, and screen captures.
npx skills add httprunner/skills --skill android-adb -a claude-codeWhat android-adb does
This skill guides your AI assistant through direct adb command execution. It provides patterns for device discovery, pairing over Wi-Fi via tcpip 5555, starting packages with monkey or am start, force-stopping apps, and retrieving screen dumps with screencap or uiautomator.
Before executing coordinate taps or swipes, instructions mandate checking display resolution with adb -s SERIAL shell wm size. When more than one phone or emulator is online, the agent must supply -s <serial> with every call to avoid targeting errors.
Stock text input via input text is restricted to ASCII strings with space escaping. Because of this limitation, the workflow switches to ADB Keyboard broadcasts with base64 encoding whenever non-ASCII or special symbols need to be typed into input fields.
What it helps with
- connect to an Android device over Wi-Fi using tcpip
- capture a screenshot or extract the XML view hierarchy
- launch an activity or force-stop a running Android package
- simulate taps, long presses, back gestures, and key events
Example prompts for the agent
- Connect to the device at
192.168.1.42:5555and check the active screen size - Take a screenshot from emulator
emulator-5554and save it toshot.png - Launch package
com.sample.appand tap the coordinates 540 1200
How to install android-adb
1Skills CLI (Vercel)
npx skills add httprunner/skills --skill android-adb -a claude-code2Manually: put the files in place
~/.claude/skills/android-adb/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/android-adb/
1Skills CLI (Vercel)
npx skills add httprunner/skills --skill android-adb -a codex2Manually: put the files in place
.agents/skills/android-adb/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add httprunner/skills --skill android-adb -a cursor2Manually: put the files in place
.cursor/skills/android-adb/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install httprunner/skills android-adb2Manually: put the files in place
.github/skills/android-adb/SKILL.md1Skills CLI (Vercel)
npx skills add httprunner/skills --skill android-adb -a gemini-cli2Platform CLI
gemini skills install https://github.com/httprunner/skills --path android-adbManually: put the files in place
.devin/skills/android-adb/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add httprunner/skills --skill android-adb -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about android-adb
How do I install android-adb in Claude Code?
Run npx skills add httprunner/skills --skill android-adb -a claude-code in your terminal. The configuration installs to ~/.claude/skills/android-adb/SKILL.md.
What does android-adb do?
It provides syntax and constraints for controlling Android devices or emulators through raw ADB terminal commands. It enables your assistant to manage apps, inspect screen state, and automate input events.
How does it handle non-ASCII text input?
Default Android shell input only accepts ASCII text. To send non-English characters or symbols, the skill switches input methods to ADB Keyboard and broadcasts the string formatted in base64.
Source text
SKILL.md · MIT
--- name: android-adb description: Android device control via raw ADB commands. Use for device/emulator discovery, USB or Wi-Fi connection, app launch/force-stop, tap/swipe/keyevent/text input, screenshots, UI hierarchy dump, and ADB troubleshooting. --- # Android ADB Reference for controlling Android devices with raw `adb` commands. ## Execution Constraints - Use `adb -s <serial>` whenever more than one device is connected. - Confirm screen resolution before coordinate actions: `adb -s SERIAL shell wm size`. - Ask for missing required inputs before executing (serial, package/activity, coordinates, APK path). - Surface actionable stderr on failure (authorization, cable/network, tcpip state). - Prefer ADB Keyboard broadcast for CJK and special character input when ADB Keyboard is installed. ## Device And Server ```bash # Start ADB server adb start-server # Stop ADB server adb kill-server # List devices adb devices -l # Target a specific device (use when multiple devices are online) adb -s SERIAL <command> ``` ## Wi-Fi Connection ```bash # Enable tcpip (USB required first) adb -s SERIAL tcpip 5555 # Get device IP adb -s SERIAL shell ip route | grep src # or adb -s SERIAL shell ip addr show wlan0 # Connect over network adb connect <ip>:5555 # Disconnect adb disconnect <ip>:5555 ``` ## Device State ```bash # Screen size adb -s SERIAL shell wm size # Current foreground app (package/activity from mCurrentFocus) adb -s SERIAL shell dumpsys window | grep -E 'mCurrentFocus|mFocusedApp' # Get home launcher package (for back-home detection) adb -s SERIAL shell cmd package resolve-activity --brief -c android.intent.category.HOME # Raw shell command adb -s SERIAL shell <command> ``` ## App Lifecycle ```bash # Verify package installed adb -s SERIAL shell pm list packages | grep <package> # Launch by package (via monkey) adb -s SERIAL shell monkey -p <package> -c android.intent.category.LAUNCHER 1 # Launch by activity adb -s SERIAL shell am start -W -n <package>/<activity> # Launch by URI/scheme adb -s SERIAL shell am start -W -a android.intent.action.VIEW -d "<scheme://path>" # Force-stop adb -s SERIAL shell am force-stop <package> ``` ## Input Actions ```bash # Tap adb -s SERIAL shell input tap X Y # Double tap (two taps with short delay) adb -s SERIAL shell input tap X Y && sleep 0.1 && adb -s SERIAL shell input tap X Y # Long press (swipe to same point with duration) adb -s SERIAL shell input swipe X Y X Y 3000 # Swipe adb -s SERIAL shell input swipe X1 Y1 X2 Y2 [duration_ms] # Key event adb -s SERIAL shell input keyevent KEYCODE_BACK adb -s SERIAL shell input keyevent KEYCODE_HOME adb -s SERIAL shell input keyevent KEYCODE_ENTER # Return to home (press BACK repeatedly, check foreground against home launcher) for i in $(seq 1 20); do adb -s SERIAL shell input keyevent KEYCODE_BACK sleep 0.5 # Check if home reached by comparing current focus to home package CURRENT=$(adb -s SERIAL shell dumpsys window | grep mCurrentFocus) echo "Round $i: $CURRENT" done ``` ## Text Input ```bash # Plain text input (ASCII only, spaces escaped as %s) adb -s SERIAL shell input text "hello%sworld" # Input via ADB Keyboard (supports CJK and special characters) # First ensure ADB Keyboard is active: adb -s SERIAL shell ime set com.android.adbkeyboard/.AdbIME # Then send text (base64 encoded): adb -s SERIAL shell am broadcast -a ADB_INPUT_B64 --es msg "$(echo -n 'your text' | base64)" # Clear text via ADB Keyboard adb -s SERIAL shell am broadcast -a ADB_CLEAR_TEXT ``` ## Screenshot And UI Tree ```bash # Screenshot to local file adb -s SERIAL exec-out screencap -p > screenshot.png # Screenshot to device then pull adb -s SERIAL shell screencap -p /sdcard/screen.png adb -s SERIAL pull /sdcard/screen.png ./screen.png # Dump UI hierarchy XML adb -s SERIAL shell uiautomator dump /sdcard/window_dump.xml adb -s SERIAL pull /sdcard/window_dump.xml ./window_dump.xml ``` ## App Install And Uninstall ```bash # Install APK (replace existing) adb -s SERIAL install -r /path/to/app.apk # Uninstall adb -s SERIAL uninstall <package> ``` ## Common Keycodes | Keycode | Description | |---------|-------------| | `KEYCODE_BACK` | Back button | | `KEYCODE_HOME` | Home button | | `KEYCODE_ENTER` | Enter/confirm | | `KEYCODE_DEL` | Delete/backspace | | `KEYCODE_VOLUME_UP` | Volume up | | `KEYCODE_VOLUME_DOWN` | Volume down | | `KEYCODE_POWER` | Power button | | `KEYCODE_TAB` | Tab key | | `KEYCODE_ESCAPE` | Escape key |
© httprunner · MIT · httprunner/skills