Checking browser support…
Wireless debugging (adb over Wi-Fi)
Switch the phone's ADB daemon to TCP port 5555 and get the connect command for a desktop terminal. Both devices have to be on the same network, and the switch is forgotten when the phone reboots.
adb tcpip 5555Connect a phone to use this section. The command above works in any shell.
Screenshot
Takes a PNG with the phone's own screencap and pulls it back over the cable at full resolution. DRM-protected content comes out black, because the compositor will not hand those frames to anyone.
screencap -pConnect a phone to use this section. The command above works in any shell.
Send text and key presses
Types into whatever has focus on the phone, using the same input text the platform gives adb. Handy for long passwords, URLs and test data you do not want to thumb in.
input text 'hello world'
input keyevent 3Connect a phone to use this section. The command above works in any shell.
Deep link tester
Fires a VIEW intent at a URL and reads back whether anything claimed it, which activity won, and how long the launch took. The query string survives — the ampersands go to the phone rather than to a shell.
am start -W -a android.intent.action.VIEW -d 'myapp://open/item/42'Connect a phone to use this section. The command above works in any shell.
Fake screen size and density (wm size)
Makes the phone pretend to be a different screen, which is the cheapest way to see your layout at another breakpoint on real hardware. A breakpoint reacts to dp — pixels times 160 divided by dpi — so every preset sets both.
wm size 1080x2340
wm density 420
wm size reset
wm density resetConnect a phone to use this section. The command above works in any shell.
Developer switches
The switches from the phone's Developer options, without walking through six menus: animation speeds, touch feedback, pointer coordinates, do-not-keep-activities and forced right-to-left layout.
settings put global window_animation_scale 0.0
settings put system show_touches 1Connect a phone to use this section. The command above works in any shell.
Device proxy (mitmproxy, Charles, Fiddler)
Points the phone's HTTP stack at a proxy on your machine, which is the one-line version of the wiring every traffic-capture tutorial starts with. Clearing it is one press and is the first button here for a reason.
settings put global http_proxy 10.0.0.5:8080
settings put global http_proxy :0Connect a phone to use this section. The command above works in any shell.
System properties (getprop)
The whole property table — usually over a thousand entries — searchable, with the fifteen that answer what is this device pinned on top. Nothing typed here reaches the phone: the search runs in this tab.
getpropConnect a phone to use this section. The command above works in any shell.
A debuggable app's databases
Lists the SQLite files in a debug build's private data directory and pulls one back, without root. This is the useful half of run-as: the shell cannot read an app's data, but the app's own uid can, and run-as lends you that uid for one command.
run-as com.example.app ls -l databases
run-as com.example.app cat 'databases/app.db'Connect a phone to use this section. The command above works in any shell.
Recent crashes and ANRs
Reads DropBoxManager, the platform's own ring buffer of things that went wrong: app crashes, ANRs, native crashes, Log.wtf calls and kernel tombstones, with their timestamps.
dumpsys dropbox
dumpsys dropbox --print data_app_crashConnect a phone to use this section. The command above works in any shell.
Screen recording
Recording lives with the mirror rather than here, because both are about the display and one implementation of screenrecord is safer than two — the process has to be stopped on every path, or it keeps encoding with nobody watching.
screenrecord --time-limit 180 --bit-rate 20000000 /sdcard/out.mp4What a browser cannot do with ADB
Not a list of features waiting to be built. These are things the platform or the browser sandbox makes impossible, and the reasons are worth knowing before you go looking for a workaround.
- adb forward / adb reverse
Port forwarding needs a TCP listener, and a web page cannot be one. A tab has no server socket in any browser, by design — so there is nowhere for localhost:8080 on your machine to point. The desktop adb keeps this one.
- adb backup / adb restore
adb backup was deprecated in Android 12 and most apps opted out of it long before that with allowBackup=false, so what it produces on a modern phone is a nearly empty archive. Pulling the files you actually want is what the file browser does.
- fastboot
Fastboot is a different protocol on a different USB interface, spoken by the bootloader rather than by Android. It is implementable over WebUSB, but nothing in the ADB code path helps, so it belongs in a tool of its own rather than as a checkbox here.
- input text (non-ASCII)
input text can only produce characters the virtual keyboard key map knows, which is printable ASCII. This is a limit of the platform command: a desktop adb cannot type Japanese either.
- adb root / su
adb root only works on an engineering or userdebug build, and su only exists on a rooted phone. Everything on this page is built to work without either, which is also why some of it politely refuses.
Everything else on this page runs through the ordinary ADB shell, on an ordinary retail phone, with USB debugging switched on and nothing installed.