command line

For a lot of us, the fact that we can plug our Android phone or tablet into our computer and interact with it is a big plus. Besides the times when we've broken something and need to fix it, there are plenty of reasons why an advanced Android user would want to talk to his or her device. To do that, you need to have a few tools and know a few commands. That's what we're going to talk about today. Granted, this won't be the end-all be-all discussion of adb commands, but there are 10 basic commands everyone should know if they plan to get down and dirty with the command line. 

The tools are easy. If you're a Mac or Linux user, you'll want to install the SDK as explained at the Android developers site. It's not hard, and you don't have the whole driver mess that Windows users do. Follow the directions and get things set up while I talk to the Windows using folks for a minute. 

If you're using Windows, things are easier and harder at the same time. The tools themselves are the easy part. Download this file. Open the zip file and you'll see a folder named android-tools. Drag that folder somewhere easy to get to. Next, visit the manufacturers page for your device and install the adb and fastboot drivers for Windows. You'll need this so that your computer can talk to your Android device. If you hit a snag, visit the forums and somebody is bound to be able to help you through it. 

Now that we're all on the same page, enable USB debugging on your device (see your devices manual if you need help finding it, and remember it was hidden in Android 4.2), and plug it in to your computer. Now skip past the break and let's begin!

1. The adb devices command

location

The adb devices command is the most important one of the bunch, as it's what is used to make sure your computer and Android device are communicating. That's why we're covering it first.

If you're a pro at the operating system on your computer, you'll want to add the directory with the Android tools to your path. If you're not, no worries. Just start up your terminal or command console and point it at the folder with the tools in it. This will be the file you downloaded earlier if you use Windows, or the platform-tools folder in the fully installed Android SDK. Windows users have another easy shortcut here, and can simply Shift + right click on the folder itself to open a console in the right spot. Mac and Linux users need to navigate there once the terminal is open, or install an extension for your file manager to do the same right click magic that's in Windows by default. 

Once you're sure that you are in the right folder, type "adb devices" (without the quotes) at the command prompt. If you get a serial number, you're good to go! If you don't, make sure you're in the right folder and that you have the device driver installed correctly if you're using Windows. And be sure you have USB debugging turned on!

Now that we have everything set up, let's look at a few more commands.

2. The adb push command

adb push

If you want to move a file onto your Android device programmatically, you want to use the adb push command. You'll need to know a few parameters, namely the full path of the file you're pushing, and the full path to where you want to put it. Let's practice by placing a short video (in my case it's a poorly done cover of the Rick James tune Superfreak) into the Movies folder on your device storage.

I copied the superfreak.mp4 file into the android-tools folder so I didn't need to type out a long path to my desktop. I suggest you do the same. I jumped back to the command line and typed "adb push superfreak.mp4 /sdcard/Movies/" and the file copied itself to my Nexus 4, right in the Movies folder. If I hadn't dropped the file into my tools folder, I would have had to specify the full path to it -- something like C:\Users\Jerry\Desktop\superfreak.mp4. Either way works, but it's always easier to just drop the file into your tools folder and save the typing.

You also have to specify the full path on your device where you want the file to go. Use any of the popular Android file explorer apps from Google Play to find this. Windows users need to remember that on Android, you use forward slashes (one of these -- / ) to switch folders because it's Linux.

3. The adb pull command

adb pull

If adb push sends files to your Android device, it stands to reason the adb pull command gets them out. That's exactly what it does, and it works the same way as the adb push command did. You need to know both the path of the file you want to pull off, as well as the path you want it placed into. You can leave the destination path blank and it will drop the file into your tools folder to make things easy. 

In this example, I did it the hard way so you can see what it looks like. The path of the file on the device is "/sdcard/Movies/superfreak.mp4" and I put it on my Windows 8 desktop at "C:\Users\Jerry\Desktop". Again, the easy way it to just let it drop into your tools folder by not giving a destination, which would have been "adb pull /sdcard/Movies/superfreak.mp4". Remember your forwards slash for the Android side, and you'll have no problems here.

4. The adb reboot command

adb reboot

This is exactly what you think it is -- a way to reboot your device from the command line. Running it is simple, just type "adb reboot" and enter. Before you say "I can just push the button!" you have to understand that these commands can be scripted, and your device can reboot in the middle of a script if you need it to. And it's a good segue to number five.

5. The adb reboot-bootloader and adb reboot recovery commands

bootloader

Not only can you reboot your device, you can specify that it reboots to the bootloader. This is awfully handy, as sometimes those button combos are touchy, and if you have a lot of devices you can never remember them all. Some devices (the LG Optimus Black comes to mind) don't even a way to boot to the bootloader without this command. And once again, being able to use this command in a script is priceless. Doing it is easy, just type "adb reboot-bootloader" and hit the enter key.

Most devices can also boot to the recovery directly with the "adb reboot recovery" (note there is no hyphen in this one) and some can't. It won't hurt anything to try, and if yours can't nothing will happen.

6. The fastboot devices command

fastboot devices

When you're working in the bootloader, adb no longer works. You're not yet booted into Android, and the debugging tools aren't active to communicate with. We use the fastboot command in it's place. 

Fastboot is probably the most powerful tool available, and many devices don't have it enabled. If you're does, you need to be sure things are communicating. That's where the fastboot devices command comes into play. At the prompt, just type in "fastboot devices" and you should see a serial number, just like the adb devices command we looked at earlier.

If things aren't working and you are using Windows, you likely have a driver issue. Hit those forums for the answer.

7. The fastboot oem unlock command

unlock

The holy grail of Android commands, fastboot oem unlock does one thing, and one thing only -- unlocks your Nexus device (or an HTC device using their official tool). If you're using a phone from a different manufacturer, you have a different method of unlocking things -- maybe with ODIN or .sbf files -- and this won't apply to you. We're including it because even if you don't need it, it's an important part of Android's openness. Google doesn't care what we do with phones or tablets that we've bought, and include this easy way to crack them open. That's something you usually don't see from any tech company, and a big part of the reason why many of us choose Android.

Using it is easy enough. Once you've used fastboot devices to make sure everything is communicating, just type "fastboot oem unlock" at the prompt and hit enter. Look at your device, read carefully, and choose wisely.

Protip: Using "fastboot oem unlock" will erase everything on your device

8. The adb shell command

adb shell

The adb shell command confuses a lot of folks. There are two ways to use it, one where you send a command to the device to run in its own command line shell, and one where you actually enter the device's command shell from your terminal. In the image above, I'm inside the device shell, listing the flies and folders on the device. Getting there is easy enough, just type "adb shell" and enter. Once inside, you can escalate yourself to root if you need to. I'll warn you, unless you're familiar with an ash or bash shell, you need to be careful here -- especially if you're root. Things can turn south quickly if you're not careful. If you're not familiar, ash and bash are command shells that a lot of folks use on their Linux or Mac computers. It's nothing like DOS. 

The other method of using the adb shell command is in conjunction with one of those Ash commands your Android device can run. You'll often use it for more advanced tasks like changing permissions of files or folders, or running a script. Using it is easy -- "adb shell <command>". An example would be changing permissions on a file like so: "adb shell chmod 666 /data/somefile". As mentioned, be very careful running direct commands using these methods.

9. The adb install command

adb install

While adb push can copy files to our Android devices, adb install can actually install .apk files. Using it is similar to use the push command, because we need to provide the path to the file we're installing. That means it's always easier to just drop the app you're installing into your tools folder. Once you've got that path, you tell your device to sideload it like this: "adb install TheAppName.apk".

If you're updating an app, you use the -r switch: "adb install -r TheAppName.apk". There is also a -s switch which tries to install on the SD card if your ROM supports it, and the -l switch will forward lock the app (install it to /data/app-private). there are also some very advanced encryption switches, but those are best left for another article.

And finally, you can uninstall apps by their package name with "adb uninstall TheAppName.apk". Uninstall has a switch, too. The -k switch will uninstall the app but leave all the app data and cache in place.

10. The adb logcat command

adb logcat

The adb logcat command is one of the most useful commands for some folks, but just prints a bunch of gibberish unless you understand what you're seeing. It returns the events written to the various logs in the running Android system, providing invaluable information for app developers and system debuggers. Most of us will only run this one when asked by one of those developers, but it's very important that we know how to use it correctly.

To see the log output on your computer screen, just type "adb logcat" and hit enter. Things can scroll by pretty fast, and chances are you won't find what you're looking for. There are two ways to handle this one -- filters, or text output.

The filter switch is used when a developer has placed a tag in his or her application, and wants to see what the event logs are saying about it. If it's needed, the developer will tell you what tag to append to the command. The text output is more useful, as it logs to a .txt file on your computer for reading later. Evoke is like so: "adb logcat > filename.txt". Let it run while you're doing whatever it takes to crash the app or system program you're debugging, then close it with the CTRL+C keystroke. You'll find the full log file saved in the directory you're working from, likely your tools folder. This is what you'll send to the developer.

Be warned that sensitive information can be contained in the log files. Be sure you trust the person you're sending them to, or open the log file in a text editor and see just what you're sending and edit as necessary.

There are plenty of other switches for the logcat command. Savvy developers can choose between the main, event, or radio logs, save and rotate log files on the device or their computer, and even change the verbosity of the log entries. These methods are a bit more advanced, and anyone interested should read the Android developer documentation.

Bonus: The adb sideload command

adb sideload

This one's relatively new, and it's one of the easier ways to update a stock Nexus device. Every over-the-air update downloads the update file from a public URL. That means you can download the update and install it manually without having to wait for your phone to have the update pushed to it. We call it "manually updating," and the end result is the same as if you wait. But we hate waiting.

All you have to do is download the update to your computer. Plug your phone into the computer. Reboot into recovery on your phone and choose "Apply update from ADB." Then hop into your favorite terminal/command line and type "adb sideload xxxxxxxx.zip," with the variable pointing to the update you downloaded. Let things run their course, and you're golden.


And there you have it. There are plenty more commands to learn if you 're the type who likes to learn commands, but these 10 are the ones you really need to know if you if you want to start digging around at the command prompt. 

 
There are 38 comments

URPREY says:

Excellent recap! One thing I've noticed is that most people don't know you can just drag a file into the terminal window on Mac and Windows to automatically fill in the path for that file. It saves you from typing a long path; just drag and it will fill.

CoolBeit says:

I did not know this...

plosquad3600 says:

Also, if you go to the platform-tools folder in file explorer (Windows), you can hold shift and right click the folder. Then you have an option to "Open Command Window here" or something like that. It will have directed you there :) Much easier in my opinion.

AndrewDobie1 says:

Love my job, since I've been bringing in $5600… I sit at home, music playing while I work in front of my new iMac that I got now that I'm making it online.(Click Home information)
http://www.Fab55.com

AndrewDobie1 says:

Love my job, since I've been bringing in $5600… I sit at home, music playing while I work in front of my new iMac that I got now that I'm making it online.(Click Home information)
http://www.Fab55.com

Thanks for the "bonus" tip. I didn't know you could drag-and-drop into the "terminal" on Win7! I guess n00b moments happen more often than I realized.

CoolBeit says:

This is an awesome article. I knew some of these but not others, and was using some of the ones I did know blindly. Thanks!

MERCDROID says:

+9000

Ad infinitum

lightyear420 says:

Great guide...but I disagree with one part...windows is definitely NOT easier. With windows you have to install the entire sdk. With ubuntu you can just apt-get fastboot and adb installations without the need for the full sdk ;)

Plus, if you're running ubuntu, you're already halfway to being able to start developing for android. All you need from there are java, the dependancies, a good detailed guide, and some patience.

Honestly, I think it would be wise to start steering potential future developers away from windows altogether, and towards ubuntu. It's just as easy to learn as windows these days, and the more people who use it, the more people we have who could be willing to learn development ;)

Shadowriver says:

That really depends how Android SDK is pakaged in distribution, Google distribute Linux SDK the same as for Windows one with there SDK menager as there own package repository. What Linux Android SDK (as well as OS X) is good at is that you don't need any extra driver to make ADB work.

I don't really see any dramatic diffrence between Linux and Windows SDK, whatever you use it will fell the same

Metallinatus says:

Am I the only one that got this message here on AC?
"Danger: Malware Ahead!
Google Chrome has blocked access to this page on www.androidcentral.com.
Content from cmi.netseer.com, a known malware distributor, has been inserted into this web page. Visiting this page now is very likely to infect your computer with malware"

I tweeted this. AC replied said they are working on a fix. It is working fro me now in Chrome. I also had the same thing happen to me on CNET it seems to be ad related. Today is the first time that has ever happened to me and it has happened on 2 different tech sites. Kinda weird.

It's not us. It's an ad thing that we don't control. That's why you're seeing it everwhere.

Kinda what I figured when it started popping up more and more. Thanks for the heads up. I am on lunch now and getting it everywhere.

Dan29466 says:

Use a hosts file and block the dirtbags. Hostsman auto-updates your hosts file for free.
http://www.abelhadigital.com/hostsman

TankMech says:

Yet another reason to use linux, no worries with virus or malware ;) if games worked more fluently on my ubuntu partition i would use it solely. That and if i could use my cac for ako. I really wish i could find or learn to make a cac reader program for all us dod and military that want to use linux or android to check our ako with the tabs or phones with otg for a cac reader. Its such a pain to use windows just for ako. But of course the government is in bed with ie so all the security is most likely the reason its not all ready done. Ugh..sigh.

speculatrix says:

Valve/steam now has linux games... and more coming.

srkmagnus says:

Jerry, what type of sensitive information can be shared through a logcat?

MERCDROID says:

If I had to take a guess, I would say that a logcat can share keystrokes. So, if you type passwords while the command is running, those may be included in the logcat. Someone please correct me if I'm wrong.

Account names, location data, ip address, AP name, running applications, phone number, IMEI number -- things like this. No passwords.

 

MERCDROID says:

Sweet, thanks Jerry.

slhpss says:

to be fair... none of these commands are android terminal commands. They are cli commands for adb and fastboot. Android terminal commands would be commands within an android terminal or the environment you're in when you use adb shell.

crxssi says:

Correct. Once you ARE in an Android shell, it is just standard Linux/Unix stuff.

Shadowriver says:

"It's nothing like DOS", yet cd command work nearly as same :p

And i agree this is not Android terminal commands, but how to use ADB

crxssi says:

And neither one is "like DOS". Comparing the Linux/Unix shell to [MS-]"DOS" is like comparing a Yugo to a Lamborghini. Of course, the ADB commands are not terribly sophisticated.

Jimbob4414 says:

Wow...so the ADB/Shell commands are MORE limited than DOS, yet you describe them as a Lambo vs Yuga.

Sorry - that's just a history and logic fail. DOS came right out of Unix - in a sense it was the predecessor to Linux, as both were attempts to create an OS that could run on "micro computers" and were modelled after Unix. Bill (and the guy who wrote 86 DOS) both had Unix backgrounds, but knew a microcomputer couldn't run a full Unix system. Now why would they write something that didn't use similar conventions? Remember these OS's had to function in a much more limited (8kb!) memory space.

Show this to iFanBoy and watch their teeth grinning to you.

*I Kid!*

dmart81 says:

Thanks for writing this up. I have used some of the list doing different things with my phone. It is nice to have a list that explains everything with the how and the why.

rd_nest says:

Nice. Good read!

hrw2 says:

And "adb hell" as well ;D

A l i says:

Thanks Jerry, very helpful.
Regarding the adb install command, what about if I want to install 10 apps at once? How to do it?

soomuch says:

Good read Jerry.

smwinn7 says:

thanks Jerry

dravoid says:

This is one of the best articles on the basics of the commands that I have read. Very clear and extremely helpful.

THANKS!

jung11 says:

hi, is there anyway I can detect whether the sdcard is inserted or not?
The device already has sdcard directory and the space varies depends on the sdcard.
However, whatever I try, it is returning it as the sdcard is already inserted when its not.
Please help
Thanks!

hakatit says:

On Ubuntu Linux:$ sudo apt-get install adb-tools fastboot-tools
The exact name I could be wrong on but you don't need the full SDK.