Skip to content

Publishing an Android app to 300 devices

December 31, 2011

Brian

At Google I/O 2011, the Android team announced that there were over 300 Android devices in distribution throughout the world.  These devices range in size from 2.5″ phones to 10″ tablets (or 60″ televisions).  They cover 9 different versions of Android and a variety of custom interfaces.  Some Android displays contain 143 pixels per linear inch, others as many as 342.  Some have physical devices, some have trackballs, some have gyroscopes.  Android was supposed to move us past the J2ME world’s compatibility issues, but with this much variation between devices, it still takes a lot of effort to look good on all of them.  What’s a company to do?

Fortunately, the Android team has done a lot to make adaptable apps possible.  All (…almost all) of Android’s layout classes are design to work well on a variety of screen sizes.  There’s a nifty resource scheme that makes it easy to provide different icons for screens with different pixel densities, and known patterns for making use of new features on newer Android versions while still degrading gracefully on older versions.  9-Patch graphics allow custom buttons and text boxes to stretch and shrink appropriately.

There are examples of companies handling almost everyone.  Rovio covered 97% of Android devices with Angry Birds Rio, and Pulse managed 99%.  Still, you have to draw the line somewhere and looking great on 95%+ of all Android devices requires an investment in polish.  If this is you first foray into developing a mobile app, I recommend targeting Android 1.6 (Donut) and up.  This covers 99.2% of all devices accessing the Android Market today.  If you end up needing an API from version 2.1 (Eclair), the next version still active, you can pretty safely jettison support for 1.6, which will only cost you another 1.3% of the Market’s devices.  2.1/Eclair is a tougher case to drop, at 9.6% of the Market, and you barely have a choice but to support 2.2/Froyo (35.3%).  You can use the fancy new features from later platforms, but again, you’ll have to go out of your way to build a simpler experience for older versions.

If you’re pretty sure you’re going to make an ongoing investment in native Android apps, you should be designing your apps with some of the newer UI features like fragments and action bars, especially because they make it easier to develop related, but distinct, interfaces for phones and tablets.  As a bonus, using newer UI features means your app won’t look dated 9 months from now.  Less than 3% of devices (3.0+) support Fragments today, but the Android team has provided a compatibility library so that you can use fragments all the way down to 1.6.

I hope this post and its included links have helped you understand what you’re up against in supporting the myriad Android devices available and what you can do about it.  If you’d like some more guidance, contact me and I’ll be glad to help you get past these challenges.

2 Comments

Post a comment
  1. Andrew #
    January 10, 2012

    ahhh so many varieties my head hurts. interesting article that advocates what you did, just buy a galaxy nexus: http://www.electronista.com/articles/11/12/31/android.needs.to.live.up.to.its.ambitions/ great seeing you!

  2. January 10, 2012

    Yeah, there’s a whole lot of crap that comes on most Android phones. The original Galaxy Tab won’t get 4.0 even though it’s about 15 months since it launched in the U.S., and Samsung says it’s because they can’t fit both Android 4.0 and their custom TouchWiz interface on the ROM. I haven’t bothered with rooting and custom builds so far, but I’m going to try very hard not to buy any phones with locked bootloaders, in case unwanted software ends up getting in the way like that.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: