Android developer options

There's more there than USB debugging

Hidden in the settings on your phone, (really, they are hidden by default) are settings used for debugging and application development. While plenty of us have dove in there to switch to the ART runtime or to enable USB debugging, there's a long list of options. While most of us will never use them, it's always nice to know what's going on under the hood of your phone.

Let's take a look at them, and see if we can't decipher some of these settings so that all of us have a better understading of what happens when you tap them. Come on, you've tapped them ...

'Unlocking' the developer options settings

Android developer options

As we mentioned, the developer options on your phone are hidden by default. This actually makes a lot of sense, because they are easy to "unhide" and most people have little need to use any of them. But everyone reading this is a bit more advanced than most people, simply because you are reading an Android enthusiast website.

Unlocking them is easy-peasy. Open the settings on your phone, and find the "About" section. Look through it until you see the "Build number" entry. Tap if five times in quick succession, and you should see a small dialog letting you know that you're now a developer. Try not to break stuff, mmkay? Or break everything — either way is good! Really, some of these settings can make your phone run really really poorly.

Let's have a look at them and figure out why.

The settings

Android developer options

  • Take bug report: Tapping this option grabs the current log files on your device, packages them up and prepares them for sending to, well, whomever you want to have it. It takes a minute or two after you tap it, and you'll see a notification once it's ready. Tap that notification to send it on it's way. Swipe it away to cancel.
  • Desktop backup password: You can use ADB to backup and restore things like apps and their associated data to and from your computer. This option forces a password on those backups, and they can't be restored without that password.
  • Stay awake: Checking this box will force the screen on your phone to stay on anytime and every time it is plugged in. This works with a wall charger or your computer's USB port, and is a great way to make sure you burn images into your screen. Don't use this one unless you need to!
  • Select runtime: Here is where (for now)you choose to use Dalvik or ART. ART is still experimental and what we have now isn't what will eventually be released in Android L. Some phones really don't like the current ART runtime preview, so refer to the forum for your particular device before going there.
  • Enable Bluetooth HCI snoop log: Sometimes, a developer (or security specialist) will need to capture and analyze Bluetooth HCI (Host Controller Interface) packets. Enabling this will place them in a file on the device storage (/sdcard/btsnoop_hci.log) for retrieval. You can then analyze them with a program like Wireshark.
  • Process stats: Everything you ever needed to know about the running processes on your phone. Go ahead and tap it, then tap one of the entries. For the layman, it's just a lot of numbers, but for a developer debugging his or her app, this information might save the day.
  • USB debugging: This is what allows your phone to communicate over the USB port on your computer via the Android Debug Bridge (ADB). You need to enable this to use things like DDMS, or to use ADB commands.
  • Revoke USB debugging authorizations: When you use a computer to debug over USB for the first time, you have to authorize it and set up a keypair. This setting revokes all those and forces you to do it again.
  • Power menu bug reports: Puts an option in the menu you see when you press and hold the power key to collect and send a bug report (as seen above). Very handy if you're testing something.
  • Allow mock locations: This setting will let you manually write location information, making your phone think it is somewhere it really isn't. Besides cheating at foursquare, this is useful if an app uses location information.
  • Select debug app: This setting lets you choose an application to debug. You don't really need to attach it to a debugger, but if you do it prevents error messages when paused on a breakpoint. If you don't understand what this means, you'll never need to use this setting and probably shouldn't. It's built for use with tools application developers use to make sure their app runs as intended.
  • Wait for debugger: This setting is greyed out unless you've set an app to debug. When set up and selected, it simply prevents the chosen application from starting until the debugger is attached. This is more application debugging stuff most of us will never need.
  • Verify apps over USB: Lets Google scan applications you installed via ADB for malicious behavior. This is a good thing.
  • Show touches: Select this to see a visual cue on the screen when and where a touch was registered.
  • Pointer location: This setting places an information bar at the top of your screen telling you the screen coordinates of the last place the screen was touched.
  • Show surface updates: Makes the edge of a "window" flash when its contents are updated. Annoying as hell.
  • Show layout bounds: Marks the edges of all the elements in a dialog so you know where any touch will activate them. Try this one, then quickly shut it off.
  • Force RTL layout direction: Forces screen orientation for right to left language support.
  • Window animation scale: Sets the speed for window animation playback. A lower number is faster.
  • Transition animation scale: Sets the speed for transition animation playback. Again, lower is faster.
  • Simulate secondary displays: This setting allows developers to simulate different screen sizes. It's pretty wonky.
  • Force GPU rendering: Forces applications to use hardware 2D rendering if they were written to not use it by default. Sometimes, this does wonders. Other times, everything goes to hell. Be careful here.
  • Show GPU view updates: With this setting, any view that is drawn with the GPU hardware gets a red overlay.
  • Show hardware layer updates: Read what Romain Guy has to say about using hardware layers to back your applications views. This setting will tell you when those layers update.
  • Debug GPU overdraw: Overdraw happens every time the application asks the system to draw something on top of something else. This setting lets you see when and where this is happening so you know if it is a problem.
  • Force 4x MSAA: This setting forces multi-sample anti-aliasing (MSAA). Like any other computer graphics hardware, more AA makes things look better, but performance takes a hit.
  • Strict mode enabled: This setting flashes the screen when an application uses the main thread to perform long, intensive operations.
  • Show CPU usage: Places a tiny window in the upper right of your screen with information about the CPU and how it is being used. A neat one to play with.
  • Profile GPU rendering: This setting can either draw a graph on the screen, or write it to a file. The graph is a visual rendering of how hard the GPU is working. This is another really neat one to try.
  • Enable OpenGL traces: This setting watches for OpenGL errors, and places them in the log file you chose when you started it up. Nothing that most users will ever need to touch.
  • Don't keep activities: This setting destroys (as in, forces everything closed) any and every application as soon as you leave the main view. Nothing good can come of this, regardless of what you might have heard on the Internet.
  • Background process limit: Allows a custom setting of how many process can run in the background at once. Another one most of us shouldn't be fiddling with very often, if at all.
  • Show all ANRs: This setting makes every process show an "App Not Responding" dialog if it gets hung — even background processes that the user did not start. Useful if one application is interfering with another.

Android developer options

Clearly, most of us will have no need for the bulk of these settings. Also, getting in there and tapping things for the sake of tapping them can really make bad things happen. But it's always good to know what can be done, even if we never intend to do it.

Hopefully, this clears up a few questions about those cryptically-worded options and settings!