1. What is ADB?
ADB stands for Android Debug Bridge, it is a command line tool (a client-server program) which helps a developer to communicate with an Android device (Phone/Tablet/TV/Watch) to get important log information to debug and test an Android application.
The adb can be used to run commands on a device.
2. What are the components of adb?
The adb consists of 3 compoments:
- Client: The client runs on the developer's machine and is used to send commands to the Android device.
- Daemon: It is also known as atbd (Android Debug Bridge Daemon) which is a background service/process that runs on the device used to run the commands sent by the client.
- Server: The server is a program that runs as a background service/process that runs on the developer's device. It is used to manage communication between the client and the daemon (atbd).
3. Where is adb available?
The adb is available Android SDK Platform Tools package.
adb location on Mac (macOS)
You can find adb under /Users/user-name/Library/Android/sdk/platform-toolsExample:
% cd ~/Library/Android/sdk/platform-tools % ls -ltrh total 49520 -rwxr-xr-x@ 1 c2ctechtv staff 235K Jul 13 23:13 dmtracedump -rwxr-xr-x@ 1 c2ctechtv staff 1.5M Jul 13 23:13 mke2fs drwxr-xr-x@ 3 c2ctechtv staff 96B Jul 13 23:13 lib64 -rwxr-xr-x@ 1 c2ctechtv staff 549K Jul 13 23:13 make_f2fs_casefold -rw-r--r--@ 1 c2ctechtv staff 38B Jul 13 23:13 source.properties -rw-r--r--@ 1 c2ctechtv staff 1.1K Jul 13 23:13 mke2fs.conf -rwxr-xr-x@ 1 c2ctechtv staff 13M Jul 13 23:13 adb -rwxr-xr-x@ 1 c2ctechtv staff 656K Jul 13 23:13 etc1tool -rwxr-xr-x@ 1 c2ctechtv staff 3.9M Jul 13 23:13 fastboot -rwxr-xr-x@ 1 c2ctechtv staff 549K Jul 13 23:13 make_f2fs -rwxr-xr-x@ 1 c2ctechtv staff 2.7M Jul 13 23:13 sqlite3 -rwxr-xr-x@ 1 c2ctechtv staff 131K Jul 13 23:13 hprof-conv -rw-r--r--@ 1 c2ctechtv staff 1.0M Jul 13 23:13 NOTICE.txt -rw-r--r--@ 1 c2ctechtv staff 18K Jul 13 23:13 package.xml
adb location on Windows
On Windows you can find adb under C:\Users\user-name\AppData\Local\Android\Sdk\platform-tools\adb.exeExample:
4. What port does the adb server run on?
The adb server runs on the TCP port 5037. The adb clients make use of the port 5037 to communicate with the adb server.
5. How to enable adb debugging on your device using USB Cable
- Enable USB debugging on the Android device under Developer options (which is disabled by default, needs to be enabled)
- Connect your device with USB to the developer's computer.
- You can verify the device is connected successfully using the adb devices command.
./adb devices * daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached - Google Pixel 6A - Samsung Galaxy S10
6. How to enable adb debugging on your device using Wifi Connection
Note: Wifi Debugging is supported from Android 11 (API level 30) and higher.
- Make sure the developer's option is enabled on your Android device.
- In Android Studio go to Run -> Run Configurations -> Pair Devices Using Wi-Fi
- Now Pair devices over Wi-Fi using the QR code
- Now on your device enable - Wireless debugging.
- Once connected, run and deploy your app to the device.
7. ADB Commands with Examples
||To list all connected Android devices||
||To open an interactive shell on the device||
||To install an Android application||
||To uninstall an installed application||
||To copy a file from your computer to the device||
||To copy a file from the device to your computer||
||To display the device log messages||
||Log messages from the device|
||To reboot the device||
||To capture a screenshot of the device's screen||
||To record the device's screen as a video||
||To launch an activity of a specific package on the device||
||To list all installed packages on the device||
||List of installed packages|
||To forward a local port to a remote port on the device||
||To reverse port forwarding from a remote to a local port||
||To create a full backup of the specified package||
||To restore a backup previously created with adb||
||To grant permission to a specified package on the device||
||To revoke permission from a specified package on the device||
8. ADB Commands List
You can make use of the help command in Terminal/Console to know the list of all commands.
./adb help Android Debug Bridge version 1.0.41 Version 34.0.4-10411341 Installed as /Users/c2ctechtv/Library/Android/sdk/platform-tools/adb Running on Darwin 23.0.0 (arm64) global options: -a listen on all network interfaces, not just localhost -d use USB device (error if multiple devices connected) -e use TCP/IP device (error if multiple TCP/IP devices available) -s SERIAL use device with given serial (overrides $ANDROID_SERIAL) -t ID use device with given transport id -H name of adb server host [default=localhost] -P port of adb server [default=5037] -L SOCKET listen on given socket for adb server [default=tcp:localhost:5037] --one-device SERIAL|USB only allowed with 'start-server' or 'server nodaemon', server will only connect to one USB device, specified by a serial number or USB device address. --exit-on-write-error exit if stdout is closed general commands: devices [-l] list connected devices (-l for long output) help show this help message version show version num networking: connect HOST[:PORT] connect to a device via TCP/IP [default port=5555] disconnect [HOST[:PORT]] disconnect from given TCP/IP device [default port=5555], or all pair HOST[:PORT] [PAIRING CODE] pair with a device for secure TCP/IP communication forward --list list all forward socket connections forward [--no-rebind] LOCAL REMOTE forward socket connection using: tcp:<port> (<local> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> dev:<character device name> jdwp:<process pid> (remote only) vsock:<CID>:<port> (remote only) acceptfd:<fd> (listen only) forward --remove LOCAL remove specific forward socket connection forward --remove-all remove all forward socket connections reverse --list list all reverse socket connections from device reverse [--no-rebind] REMOTE LOCAL reverse socket connection using: tcp:<port> (<remote> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> reverse --remove REMOTE remove specific reverse socket connection reverse --remove-all remove all reverse socket connections from device mdns check check if mdns discovery is available mdns services list all discovered services file transfer: push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE copy local files/directories to device --sync: only push files that are newer on the host than the device -n: dry run: push files to device without storing to the filesystem -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd) -Z: disable compression pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL copy files/dirs from device -a: preserve file timestamp and mode -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd) -Z: disable compression sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor] sync a local build from $ANDROID_PRODUCT_OUT to the device (default all) -n: dry run: push files to device without storing to the filesystem -l: list files that would be copied, but don't copy them -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd) -Z: disable compression shell: shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...] run remote shell command (interactive shell if no command given) -e: choose escape character, or "none"; default '~' -n: don't read from stdin -T: disable pty allocation -t: allocate a pty if on a tty (-tt: force pty allocation) -x: disable remote exit codes and stdout/stderr separation emu COMMAND run emulator console command app installation (see also `adb shell cmd package help`): install [-lrtsdg] [--instant] PACKAGE push a single package to the device and install it install-multiple [-lrtsdpg] [--instant] PACKAGE... push multiple APKs to the device for a single package and install them install-multi-package [-lrtsdpg] [--instant] PACKAGE... push one or more packages to the device and install them atomically -r: replace existing application -t: allow test packages -d: allow version code downgrade (debuggable packages only) -p: partial application install (install-multiple only) -g: grant all runtime permissions --abi ABI: override platform's default ABI --instant: cause the app to be installed as an ephemeral install app --no-streaming: always push APK to device and invoke Package Manager as separate steps --streaming: force streaming APK directly into Package Manager --fastdeploy: use fast deploy --no-fastdeploy: prevent use of fast deploy --force-agent: force update of deployment agent when using fast deploy --date-check-agent: update deployment agent when local version is newer and using fast deploy --version-check-agent: update deployment agent when local version has different version code and using fast deploy --local-agent: locate agent files from local source build (instead of SDK location) (See also `adb shell pm help` for more options.) uninstall [-k] PACKAGE remove this app package from the device '-k': keep the data and cache directories debugging: bugreport [PATH] write bugreport to given PATH [default=bugreport.zip]; if PATH is a directory, the bug report is saved in that directory. devices that don't support zipped bug reports output to stdout. jdwp list pids of processes hosting a JDWP transport logcat show device log (logcat --help for more) security: disable-verity disable dm-verity checking on userdebug builds enable-verity re-enable dm-verity checking on userdebug builds keygen FILE generate adb public/private key; private key stored in FILE, scripting: wait-for[-TRANSPORT]-STATE... wait for device to be in a given state STATE: device, recovery, rescue, sideload, bootloader, or disconnect TRANSPORT: usb, local, or any [default=any] get-state print offline | bootloader | device get-serialno print <serial-number> get-devpath print <device-path> remount [-R] remount partitions read-write. if a reboot is required, -R will will automatically reboot the device. reboot [bootloader|recovery|sideload|sideload-auto-reboot] reboot the device; defaults to booting system image but supports bootloader and recovery too. sideload reboots into recovery and automatically starts sideload mode, sideload-auto-reboot is the same but reboots after sideloading. sideload OTAPACKAGE sideload the given full OTA package root restart adbd with root permissions unroot restart adbd without root permissions usb restart adbd listening on USB tcpip PORT restart adbd listening on TCP on PORT internal debugging: start-server ensure that there is a server running kill-server kill the server if it is running reconnect kick connection from host side to force reconnect reconnect device kick connection from device side to force reconnect reconnect offline reset offline/unauthorized devices to force reconnect usb: attach attach a detached USB device detach detach from a USB device to allow use by other processes environment variables: $ADB_TRACE comma-separated list of debug info to log: all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp $ADB_VENDOR_KEYS colon-separated list of keys (files or directories) $ANDROID_SERIAL serial number to connect to (see -s) $ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help) $ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus) $ADB_MDNS_AUTO_CONNECT comma-separated list of mdns services to allow auto-connect (default adb-tls-connect) Online documentation (MAN Page): https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/master/docs/user/adb.1.md
- adb commands mannual
Facing issues? Have Questions? Post them here! I am happy to answer!
- Increase Android Emulator Timeout time
- Android : Remove ListView Separator/divider programmatically or using xml property
- Error : Invalid key hash.The key hash does not match any stored key hashes
- How to Change Android Toast Position?
- Android Alert Dialog with Checkboxes example
- Android : No Launcher activity found! Error
- Android Development: Spinners with Example
- Failed to sync Gradle project Error:failed to find target android-23
- INSTALL_FAILED_INSUFFICIENT_STORAGE Android Error
- Disable Fading Edges Scroll Effect Android Views
- How to create Toast messages in Android?
- Channel 50 SMSes received every few minutes Android Phones
- Android xml error Attribute is missing the Android namespace prefix [Solution]
- Create Custom Android AlertDialog
- How To Disable Landscape Mode in Android Application
- Android Development - How to switch between two Activities
- incorrect line ending: found carriage return (\r) without corresponding newline (\n)
- Generate Facebook Android SDK keyhash using java code
- Android Error Generating Final Archive - Debug Certificate Expired
- 21 Useful Android Emulator Short-cut Keyboard Keys
- Android RatingBar Example
- 11 Weeks of Android Online Sessions-15-Jun-to-28-Aug-2020
- Download interrupted: Unknown Host dl-ssl.google.com Error Android SDK Manager
- fill_parent vs match_parent vs wrap_content
- Android : Connection with adb was interrupted 0 attempts have been made to reconnect
- Create simple struts2 project using maven commands - Java
- 300+ Eclipse IDE Keyboard Shortcuts for Mac - Eclipse
- 5 ways to pop out a Chat in Microsoft Teams - Teams
- How to load zsh profile on opening shell terminal - MacOS
- 33: Python Program to find the current time in India (IST) - Python-Programs
- How to Upload a File to Google Colab (txt, csv, json, xml, xlsx) - Google
- Git Revision Questions Before the Interview - Git
- Java Date Time API: LocalDateTime get(TemporalField field) examples - Java