Best daily deals

Links on Android Authority may earn us a commission. Learn more.

How to setup and use ADB (Android Debug Bridge)

August 21, 2011

The Android Debug Bridge (ADB) is a versatile command line tool that lets you communicate with and control an Android-powered device over a USB link from a computer. It comes along with other useful tools and code bundled with the Android Software Development Kit (SDK).

The ADB program includes three components:

  • A client, which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients.
  • A server, which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device.
  • A daemon, which runs as a background process on each emulator or device instance.

Setting Up ADB

On Windows and Linux

If you installed the Android SDK, the Android Debug Bridge will already be installed along with it. Otherwise, follow our guide on installing the Android SDK.

On Mac

If you have already downloaded the Android SDK, launch the SDK Manager by typing into a Terminal window:


where <sdk> is the path to the tools directory. For example, if the Android SDK is located on the desktop, then you have to type into the terminal window:


As soon as the SDK Manager is launched, click “Available packages”, then “Android Repository.” When the list of available packages pops up, choose the offered revision of “Android SDK Platform-tools”. Click “Install Selected.” If it is installed, the adb executable binary will be located in the platform-tools subdirectory.

If you don’t have the Android SDK installed yet, download its latest version and unzip it into an appropriate destination folder then follow the instructions above.

Testing If ADB Works

We want to make sure that ADB is now working. First, see to it that your Android device is set up for debugging. On your Android device running Gingerbread, go to the Settings > Applications > Development screen and make sure “USB Debugging” is checked. If you’re already on Ice Cream Sandwich, go to Settings > Developer options and tick “Android debugging” or “USB debugging.”

Connect your computer and Android device with a USB cable. Then, open a terminal on your computer and run the following command:

adb devices

You should see something like this:

List of devices attached

A result like that (where the X’s represent your device’s actual serial number) confirms that your ADB is set up and working.

Learning the Codes

Now that ADB is already set up on your machine, you might want to know how to use its various flags and command options.


directs command to the only connected USB device; returns an error if more than one USB device is present.
directs command to the only running emulator; returns an error if more than one emulator is running.
-s <serial number>
directs command to the USB device or emulator with the given serial number. Overrides ANDROID_SERIAL environment variable.
-p <product name or path>
simple product name like ‘sooner’, or a relative/absolute path to a product out directory like ‘out/target/product/sooner’. If -p is not specified, the ANDROID_PRODUCT_OUT environment variable is used, which must be an absolute path.
list all connected devices
connect <host>:<port>
connect to a device via TCP/IP
disconnect <host>:<port>
disconnect from a TCP/IP device


adb push <local> <remote>
copy file/dir to device
adb pull <remote> [<local>]
copy file/dir from device
adb sync [ <directory> ]
copy host » device only if changed (see ‘adb help all’)
adb shell
run remote shell interactively
adb shell <command>
run remote shell command
adb emu <command>
run emulator console command
adb logcat [ <filter-spec> ]
View device log
adb forward <local> <remote>
forward socket connections; forward specs are one of:

  • tcp:<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)
adb jdwp
list PIDs of processes hosting a JDWP transport
adb install [-l] [-r] [-s] <file>
push this package file to the device and install it

  • -l means forward-lock the app
  • -r means reinstall the app, keeping its data
  • -s means install on SD card instead of internal storage
adb uninstall [-k] <package>
remove this app package from the device (-k means keep the data and cache directories)
adb bugreport
return all information from the device that should be included in a bug report.
adb help
show this help message
adb version
show version num

Data Options


(no option)
don’t touch the data partition
wipe the data partition
flash the data partition


adb wait-for-device
block until device is online
adb start-server
ensure that there is a server running
adb kill-server
kill the server if it is running
adb get-state
prints: offline | bootloader | device
adb get-serialno
prints: <serial-number>
adb status-window
continuously print device status for a specified device
adb remount
remounts the /system partition on the device read-write
adb reboot [bootloader|recovery]
reboots the device, optionally into the bootloader or recovery program
adb reboot-bootloader
reboots the device into the bootloader
adb root
restarts the adbd daemon with root permissions
adb usb
restarts the adbd daemon listening on USB
adb tcpip <port>
restarts the adbd daemon listening on TCP on the specified port


adb ppp <tty> [parameters]
Run PPP over USB. Note: you should not automatically start a PPP connection.

  • <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
  • [parameters] – Eg. defaultroute debug dump local notty usepeerdns


adb sync [ <directory> ]
<localdir> can be interpreted in several ways:

  • If <directory> is not specified, both /system and /data partitions will be updated.
  • If it is “system” or “data”, only the corresponding partition is updated.

Once you already have ADB set up and functioning on your computer, you can start using it for a lot of important Android-related tasks, such as creating Android apps, debugging Android apps, and rooting your Android phone. Check out our how-to guides for rooting your Android phones.