Everything about ADB – Android Debug Bridge for Beginners




ADB or Android Debug Bridge is a command line program which is used to communicate with your Android phone (or an emulator used by programmers). The use of Adb for Android phone users ranges from using it as a tool to get the logcat- A realtime log of the Android system, which allows one to know the cause of any errors. It is very helpful to app hackers to know exctly what block of code does what, and to modify apps accordingly

2. HOW TO USE ADB – Running adb.exe

adb.exe is part of a package of tools called Android SDK or Software Development Kit. For users, the main applications useful for them are adb.exe, fastboot.exe and aapt.exe.

2.1 Installing adb.exe (Windows)

  1. First, download the Android SDK package(exe file) from here The installer will prompt you to download and install the JDK (Java Development Kit) if you dont have it already installed
  • Next install the exe file and note the location where you install it to.
  • After install is over, use Windows explorer and navigate to the folder where you installed the SDK.
  • Double-click the SDK Manager.exe/SDK Setup.exe file at the root of the Android SDK directory.
  • This will open up the SDK Installation window, where you can choose from a list of packages to install
  • If you want to use only adb.exe and fastboot.exe, choose to install only the “Android SDK Tools” from the list (See fig 1 below)
  • That’s it, adb.exe is now installed



Take a note of where you install it. It usually installs to a folder named Android-sdk-windows. Once you have it installed, you can copy the entire folder on a portable usb key/CD and use it on any other PC without a need to install it. I recommend that you make it a part of your Android CD (with rooting tools, unrooting tools, gold card etc).

2.2 Using adb.exe-Preparing your PC for running adb.exe quickly

Adding Adb to your Windows Path
Once installed, you should add the location of adb.exe to the* Windows Environment Path variable. To do that, go the subfolder of Android-sdk-windows where adb.exe can be found. Click on the Windows Explorer path displayed on Top, and copy the path to the Clipboard

Go to Start Menu, and Right click Computer, Choose Properties

Choose Advanced System Settings and then Environment variables

Now, add the Location you copied to the Clipboard earlier, to the end of the current path, after adding a “;”(without the quotes) to the end of the current path.

So, in my case, the current path shows:
c:droidzonewindows; c:droidzoneblahblah

It now becomes:
c:droidzonewindows; c:droidzoneblahblah;C:SoftwarePhoneandroid-sdk-windowstools

Hit Enter to everything.

From now, whenever you open a Command prompt in Windows, you will be able to execute Adb and Fastboot from there without needing to navigate to the folder where they are installed.

Default Elementary Adb commands

Ok, now that you’ve got adb all setup and prepared your computer to use it, you’re ready to learn some basic adb commands. I’ll be teaching some of them in this section.

Understanding how adb and the shell works

Let’s first check if adb is working by asking it to communicate with our phone. Connect the phone with a usb cable to the PC. Note that you should have installed the HTC drivers already (They come with HTC Sync). Another important point to note is that you should have enabled USB Debugging on your phone (Menu>Settings>Applications>Development>USB Debugging)

From your Windows Start Menu, Click on Run, then type the following and press enter. That should open a command shell:



Once there, type out the following:


adb devices[/code]

This will display a list showing the connected phones with their serial numbers (and emulators-But let us not worry about what these are, right now)

Great, now we have confirmation that adb is working! We're now ready to issue our basic commands.

First thing to note is the basic command to enter the Android custom linux shell. Like Windows has cmd.exe to enter the dos shell, the graphical eyecandy with Sense overlay that you see on your device has a custom linux kernel running, so basically the language of its shell is the Linux shell language.

Accessing the Linux terminal (adb shell) is what we do to issue commands. To enter the shell of our device, the basic command is:


adb shell[/code]

Immediately, you will get a prompt like this:


Now we can type out any (most) linux commands and these will be executed in our device.

The file system on Android is laid out over MTD partitions in your device's NAND (Internal memory), and the SD card. The Nand is strictly organized in a Linux system with Linux file permissions and ownership rights (Just know that these exist, for now)

So, right now, you will be dropped in the "root" of the filesystem, from where you can navigate to other places.


Note! An important difference between Linux and Windows is that while Windows uses the Backslash (), Linux/Android uses the forward slash (/) to depict directory hierarchies. Another one you shouldnt forget is that in Linux/Android, a file named boot.img is different from Boot.img, BOOT.IMG and BoOt.img, while on Windows, they are all the same.


My tutorial is about adb commands, and not linux, so I'll give only a short summary of elementary linux commands below. I will expand the list and explanation for this at a later date if you require it:

pwd-Shows the current working directory
cp-copy a file
mv-move a file (copy a file and then delete the original file)
chmod-set file permissions
chown-set file ownerships
rm-delete a file
cd-change directory
rmdir-delete a directory

Elementary Adb commands

Installing applications with adb
You can install any apk from your PC to the phone very easily. Open a cmd shell, and then type in:

adb install[/code]

followed by a space. Now drag an apk file in Windows explorer to the shell we have opened. Immediately, the path of the file becomes inserted in our prompt that it becomes:


adb install C:DesktopTitaniumBackup.apk[/code]

assuming that the file TitaniumBackup.apk was present in the location C:Desktop. Hit enter and you will notice that it gets installed.

Transferring files to the sdcard without connecting the device as Disk drive:


adb push C:DesktopTitaniumBackup.apk /sdcard/[/code]

will trasfer the file C:DesktopTitaniumBackup.apk to the root (main) directory of your sdcard. Likewise, you can transfer any file from the PC to any location on your device.

Eg: I want to transfer a file called wallpaper.zip to a location /data/local. The command would be:


adb push C:Desktopwallpaper.zip /data/local/[/code]
More elementary adb commands:

Getting a file from your phone to your PC:

To get a file /system/etc/init.d/01data to your PC, you would type out the following:


adb pull /system/etc/init.d/01data[/code]

which will transfer the spcified file to the location on your pc where you have opened the cmd.exe shell.

Mounting the system partition as Read Write to transfer files to your /system partition:

Method 1:


adb remount[/code]

Method 2:
This can also be accomplished with the more advanced mount command in the adb shell. First we need to know the mount point of the partitions.


adb shell

For me, it displays:

rootfs / rootfs rw,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /app-cache tmpfs rw,relatime,size=8192k,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /system/data yaffs2 rw,nosuid,nodev,noatime,nodiratime 0 0
/dev/block/mmcblk0p2 /data ext4 rw,nosuid,nodev,noatime,nodiratime,commit=50,bar
rier=0,stripe=64,data=ordered,noauto_da_alloc 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,u
=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:1 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relat
arset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0

Note that the entry for system partition shows:
/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0

The ro means that /system is mounted as RO-i.e Read Only. The whole line means that the Nand MTD block device on /dev/block/mtdblock3 is mounted on the mount point /system, to use technical jargon.

We need to mount it as RW (Read Write)
The command is:

mount -o rw,remount /dev/block/mtdblock3 /system[/code]
This essentially mounts the /system as Read Write so that you can write to it (Normally you cant write to the /system partition), which is what "adb remount " also does. However the commands above can be executed from a Terminal Emulator application too. Next: Getting an Adb logcat [/code]
Getting an adb logcat

Many a time, you might have heard people telling you to get a logcat to report your error with a Rom installation.

What is a logcat?

A logcat is a report from the Android logging system, which takes place in the background the whole time your phone is on. It starts the moment you switch on the phone, and continues till you shut it down completely. This log is extremely useful for finding out what went wrong with your system. It is useful to find out why your phone is having bootloops or force closes. It is infact useful for all errors!

How to get the logcat?
Basically, you can view the logcat log with the following command:




adb logcat[/code]
But that means getting overwhelmed by an endless haze of output flowing at a rate that you cant read and will overwhelm your command shell's capacity very soon. So the system we normally use is to output the log to a file from which we can read later. This is done by the following command:


adb logcat > log.txt[/code]
My Technique As a Rom developer and apk patcher, I have to constantly check for errors in my system. So I've devised an ingenous method to easily log logcat, and view them readily. I use a combo of commands executed in succession:


adb kill-server
echo "" > log.txt
start log.txt
adb logcat > log.txt[/code]

These commands essentially create a blank file named log.txt in the same path as the command shell you've opened. Then, it opens the file log.txt (which is blank at this point of time. Then it logs logcat output to that file. Once you refresh the opened file, it will show the output of logcat to this point of time. Refresh it once again, and it updates once more. You should install Notepad++ and associate .txt files with it, to get best results. Instead of executing these four commands, you can download the batch file getlog.cmd and extract it from the zip file to the folder containing adb.exe. Once you type in the following command (from anywhere in Windows), you will achieve the same result as typing the four commands as above! Ingenious, eh?

Default Summary of other adb commands



The following is the exhaustive list of commands supported by adb. You can obtain this list by the following command:

adb /?[/code]
C:Users>adb /?
Android Debug Bridge version 1.0.26

-d - directs command to the only connected USB devic
returns an error if more than one USB device is
-e - directs command to the only running emulator.
returns an error if more than one emulator is r
-s <serial number> - directs command to the USB device or emulator w
the given serial number. Overrides ANDROID_SERI
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.
devices - list all connected devices
connect <host>:<port> - connect to a device via TCP/IP
disconnect <host>:<port> - disconnect from a TCP/IP device

device commands:
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:
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 i
nstall it
('-l' means forward-lock the app)
('-r' means reinstall the app, keeping its data
('-s' means install on SD card instead of inter
nal 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

(no option) - don't touch the data partition
-w - wipe the data partition
-d - 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 specifie
d device
adb remount - remounts the /system partition on the device re
adb reboot [bootloader|recovery] - reboots the device, optionally into the boo
tloader 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 th
e 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 notes: adb sync [ <directory> ]
<localdir> can be interpreted in several ways:

- If <directory> is not specified, both /system and /data partitions will be u

- If it is "system" or "data", only the corresponding partition
is updated.[/code]

I will add notes for these if you require them.


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.