ADB - Android Debug Bridge

How to install ADB on Windows, Mac OS and Linux

ADB is a command line with which you can explore, perform actions and make changes to an Android device and on some KaiOS devices.

The best guide on the web to install ADB on Windows, Mac OS and Linux is provided by the XDA-DEVELOPERS website.

This guide is especially useful for Windows and Mac OS users who want to use ADB.

How to install ADB on Debian/Fedora/SUSE-based Linux distros

Some Linux users should be aware that there can be an easier way to install ADB on their computer.

The guide above will certainly work for you, but those own a Debian or Fedora/SUSE-based distro of Linux can skip steps 1 and 2 of the guide above and can use the official packages of their own distribution.

  • Debian-based Linux users can type the following command to install ADB:
sudo apt-get install adb
  • Fedora/SUSE-based Linux users can type the following command to install ADB:
sudo yum install android-tools

BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides minimalist replacements for most of the utilities you usually find in GNU coreutils, util-linux, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts.

BusyBox has been written with size-optimization and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or features) at compile time. This makes it easy to customize your embedded systems. To create a working system, just add /dev, /etc, and a Linux kernel. BusyBox provides a fairly complete POSIX environment for any small or embedded system.

BusyBox is extremely configurable. This allows you to include only the components you need, thereby reducing binary size. Run 'make config' or 'make menuconfig' to select the functionality that you wish to enable. Then run 'make' to compile BusyBox using your configuration.

After the compile has finished, you should use 'make install' to install BusyBox. This will install the 'bin/busybox' binary, in the target directory specified by CONFIG_PREFIX. CONFIG_PREFIX can be set when configuring BusyBox, or you can specify an alternative location at install time (i.e., with a command line like 'make CONFIG_PREFIX=/tmp/foo install'). If you enabled any applet installation scheme (either as symlinks or hardlinks), these will also be installed in the location pointed to by CONFIG_PREFIX.

ADB HELP - this command will show you the following list

Source: Android Debug Bridge version 1.0.39, Version 1:8.1.0+r23-5~18.04 (ubuntu)

Installed as /usr/lib/android-sdk/platform-tools/adb

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]

general commands:

devices [-l] list connected devices (-l for long output)

help show this help message

version show version num


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

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)

forward --remove LOCAL remove specific forward socket connection

forward --remove-all remove all forward socket connections

ppp TTY [PARAMETER...] run PPP over USB

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

file transfer:

push [--sync] LOCAL... REMOTE

copy local files/directories to device

--sync: only push files that are newer on the host than the device

pull [-a] REMOTE... LOCAL

copy files/dirs from device

-a: preserve file timestamp and mode

sync [system|vendor|oem|data|all]

sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)

-l: list but don't copy


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: force PTY allocation

-x: disable remote exit codes and stdout/stderr separation

emu COMMAND run emulator console command

app installation:

install [-lrtsdg] PACKAGE

install-multiple [-lrtsdpg] PACKAGE...

push package(s) to the device and install them

-l: forward lock application

-r: replace existing application

-t: allow test packages

-s: install application on sdcard

-d: allow version code downgrade (debuggable packages only)

-p: partial application install (install-multiple only)

-g: grant all runtime permissions

uninstall [-k] PACKAGE

remove this app package from the device

'-k': keep the data and cache directories


to show usage run "adb shell bu help"


bugreport [PATH]

write bugreport to given PATH [];

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)


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,

public key stored in (existing files overwritten)



wait for device to be in the given state

State: device, recovery, sideload, or bootloader

Transport: usb, local, or any [default=any]

get-state print offline | bootloader | device

get-serialno print <serial-number>

get-devpath print <device-path>


remount /system, /vendor, and /oem partitions read-write

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 adb server listening on USB

tcpip PORT restart adb server 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

environment variables:


comma-separated list of debug info to log:


$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)