FORUMS
Remove All Ads from XDA

[TUTORIAL] Everything about ADB - A reference for everyone

5,530 posts
Thanks Meter: 2,296
 
By Droidzone, Inactive Recognized Developer on 30th August 2011, 06:26 PM
Post Reply Email Thread
TUTORIAL - EVERYTHING ABOUT ADB - Fully Illustrated


This will be part of a series of Tutorials compiled to better educate the Beginner-Intermediate users in XDA thread, and help them get rid of the "n00b" or "newbie" tag thrown at them!



1. WHAT IS ADB?

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
  2. Next install the exe file and note the location where you install it to.
  3. After install is over, use Windows explorer and navigate to the folder where you installed the SDK.
  4. Double-click the SDK Manager.exe/SDK Setup.exe file at the root of the Android SDK directory.
  5. This will open up the SDK Installation window, where you can choose from a list of packages to install
  6. 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)
  7. That's it, adb.exe is now installed


Fig1:


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:\droidzone\windows; c:\droidzone\blahblah

It now becomes:
c:\droidzone\windows; c:\droidzone\blahblah;C:\Software\Phone\android-sdk-windows\tools

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.


Next step: Elementary Adb commands

Don't forget to Hit the Thanks button to let me know that my posts helped you!
The Following 122 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:26 PM |#2  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
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)

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

Code:
cmd


Once there, type out the following:

Code:
adb devices
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:

Code:
adb shell
Immediately, you will get a prompt like this:
Code:
sh-3.2#
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.

Quote:

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:
Quote:

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:
Code:
adb install
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:

Code:
adb install C:\Desktop\TitaniumBackup.apk
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:

Code:
adb push C:\Desktop\TitaniumBackup.apk /sdcard/
will trasfer the file C:\Desktop\TitaniumBackup.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:

Code:
adb push C:\Desktop\wallpaper.zip /data/local/
Contd..

Don't forget to Hit the Thanks button to let me know that my posts helped you!
The Following 112 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:26 PM |#3  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
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:

Code:
adb pull /system/etc/init.d/01data
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:

Code:
adb remount
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.

Type:
Code:
adb shell
mount
For me, it displays:
Code:
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
id=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset
=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
ime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,ioch
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
sh-3.2#
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:
Code:
mount -o rw,remount /dev/block/mtdblock3 /system
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

Don't forget to Hit the Thanks button to let me know that my posts helped you!
The Following 55 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:27 PM |#4  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
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:
Code:
adb logcat
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:
Code:
adb logcat > log.txt
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:

Code:
adb kill-server
echo "" > log.txt
start log.txt
adb logcat > log.txt
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?

Don't forget to Hit the Thanks button to let me know that my posts helped you!

Attached Files
File Type: zip getlog.zip - [Click for QR Code] (191 Bytes, 813 views)
The Following 57 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:27 PM |#5  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
Summary of other adb commands
The following is the partial list of commands supported by adb. You can obtain this list by the following command:

Code:
adb /?
Code:
C:\Users>adb /?
Android Debug Bridge version 1.0.26

 -d                            - directs command to the only connected USB devic
e
                                 returns an error if more than one USB device is
 present.
 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is r
unning.
 -s <serial number>            - directs command to the USB device or emulator w
ith
                                 the given serial number. Overrides ANDROID_SERI
AL
                                 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:
                                   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 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

DATAOPTS:
 (no option)                   - don't touch the data partition
  -w                           - wipe the data partition
  -d                           - flash the data partition

scripting:
  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
ad-write
  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
networking:
  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
pdated.

  - If it is "system" or "data", only the corresponding partition
    is updated.
I will add notes for these if you require them.
The Following 36 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:28 PM |#6  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
See the next post for Kernel errors..
The Following 14 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 06:28 PM |#7  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
How to get Kernel error messages
You can get debug messages from a running kernel with:

Code:
adb shell
dmesg
If you have reboots due to kernel panic, you should make users capture the last_kmsg log from /proc immediately on the reboot.

Note that dmesg can be disabled by the kernel maintainer, and hence some roms/kernels may not support the command.

Code:
adb shell 
cat /proc/last_kmsg > /sdcard/last_kmsg
Should be done immediately after the reboot..Otherwise it will just get overwritten by newer kernel message.

So in brief, if you'd like to look at what the kernel is doing right now (any errors etc), you should use dmesg. If you want to know why your kernel rebooted, use the file proc/last_kmsg


It's extremely useful!

Don't forget to Hit the Thanks button to let me know that my posts helped you!
The Following 27 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 08:13 PM |#8  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
Guys, part of the tutorial is over.. Hope it is helpful. Will add more useful and advanced stuff later.. Hope it helps the newbies and some more seasoned users.

Feel free to ask any doubt that you think is silly, without fear of being ridiculed or being asked to search the thread! It should be related to adb though!
The Following 29 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
30th August 2011, 09:41 PM |#9  
djpbx's Avatar
Inactive Recognized Developer
Thanks Meter: 1,569
 
More
Impressive tutorial. You'll get my thanks when im back at my home pc

Sent from my HTC Desire S using XDA App
31st August 2011, 07:52 AM |#10  
coolexe's Avatar
Retired Recognized Developer
Thanks Meter: 5,438
 
Donate to Me
More
Nice tutorial bro. shoud be on dev section...???
The Following User Says Thank You to coolexe For This Useful Post: [ View ] Gift coolexe Ad-Free
31st August 2011, 07:55 AM |#11  
Droidzone's Avatar
OP Inactive Recognized Developer
Flag Kochi
Thanks Meter: 2,296
 
Donate to Me
More
Quote:
Originally Posted by coolexe

Nice tutorial bro. shoud be on dev section...???

Thanks bro.. I thought that might scare away newbies, plus since I havent done any actual development..
The Following 2 Users Say Thank You to Droidzone For This Useful Post: [ View ] Gift Droidzone Ad-Free
Post Reply Subscribe to Thread

Tags
adb, android, desire, tutorial

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes