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,…
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 # 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 ## 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 # 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 # 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 # 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 # 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 # 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 # 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
don't have the plugin yet? install it then click "run inline in claude" again.