Why It’s Time To Support Only Android 4.0 and Above

Part of developing on the Android platform is dealing with the dreaded “F” word which is FRAGMENTATION.

It’s what tech blogs mention when they write about Android. It’s the word that scares some developers away from the platform. It’s what Apple love to put in a pie chart in their product launches to prove that iOS is the most amazing mobile OS yet.

Personally, I’d rather see a Fragmented Android than a Fragmented Mobile OS ecosystem. It’s likely that without Android, we’d be developing apps for Sony OS, Samsung OS, HTC OS, and so on. I can’t imagine that Apple would actually let other companies build phones using iOS.

But still, Fragmentation is a pain. If it can be minimized or eliminated entirely, I’d be happier.

Until recently, I was working at Wedding Party (http://weddingpartyapp.com) as an Android Developer. The app was supporting Android version 2.3 and above.

To create consistent UI for all versions, we used the ActionBarSherlock and HoloEverywhere libraries. Animations should be carefully done since one that runs smoothly on 4.x would, more often than not, be sluggish on 2.3.

The Wedding Party app also deals with a lot of images. High-resolution images were out of the question because it uses a lot of resources & using multiple of these images in one screen would almost certainly crash on older devices.

At Google I/O back in May, Jeff Gilfelt started giving away stickers that says ‘minSdkVersion=”14”’. It was a well-received campaign among Android developers that got this conversation started.

In the same vein was Reto Meier’s talk “Android Protips: Making Apps Work Like Magic”.

What struck me the most was Meier’s advice: “Skate where the puck is going” and “Create the best possible app for every user especially those on the latest devices.”

Jeff’s minSdkVersion=14 sticker campaign and Reto Meier’s talk made me think about the Wedding Party app.

Because we were supporting older Android versions, it was holding us back. We were skating where the puck was. Before we develop new features for the app, we needed make sure first that it would work on older devices.

After Google IO, I pitched the minSdkVersion=14 idea to the Wedding Party team. There were some hesitation at first but after looking at our Android stats and the pace of our development (development of Android app was at least six months behind the IPhone), we were convinced that minSdkVersion=14 was the way to go.

Installs for the Wedding Party app is constantly growing since its release for all versions of Android. While the overall number is getting bigger, Android 2.x’s slice of the pie is shrinking. Share of the Android 4.x devices, on the other hand, is growing at a fast pace.

What we did was create two versions of our code. Our current code would be for 2.x devices and we created a new branch of the code for 4.0 and above.

As a developer, it made my life easier.

We removed all the 3rd-party compatibility libraries and purged all code specific to supporting older devices. We became more adventurous with the UI especially with the animations. We switched to using high-resolution images without much issue.

Our automated (Robotium) tests run more consistently. (On Android 2.x, we had to use longer timeouts so the tests would not fail.) We also had fewer phones to do our manual testing in.

Overall, our development time was a lot quicker. For a good stretch of time, we were able to do weekly releases except when developing major features.

While we only actively developed for 4.0 and above. Our 2.x users can still download an old version of the app since Google Play has Multiple APK support.

When we made the decision to stop supporting older devices, we made several assumptions.

Owners of older devices do not expect a high-quality app. Fortunately, there wasn’t much complaints from users on why some features are not available on their phones.

Since a large part of Wedding Party users are in the US and US smartphone users would likely have newer devices, Android 2.x share would continue to shrink over time. (Android 2.x % for Wedding Party have been dropping a few percentage points every month).

Our decision was made a lot easier knowing that several developers went in the same direction.

Popular apps like Vine & the latest version of Holo Sudoku  only supports 4.0 and above and there wasn’t much of an uproar.

More recently, Square Cash and Flyne have the same requirement.

Jake Wharton, who works on Android at Square, also popularly known for his ActionBarSherlock library, said that developer productivity was the main factor on why the Cash app only supports 4.0 and above.

Developer productivity is #1. The app cannot ship unless it gets finished. Cash was developed primarily by one person with a tiny bit of support from other Android engineers. Could we have supported Android 2.x and hit our ship date? Probably. Could we hit our ship date only supporting Android 4.x+. Absolutely. Cash is a beautiful app. This can be achieved on Android 2.x but it requires more effort.” says Jake.

The type of app Cash is was also something they considered. According to Jake, “We conducted some simple research into our user base and have seen that the kinds of people who would be willing to download an email-based money moving product on Android are overwhelmingly on 4.0 and above.”

NPR will also support only 4.0 and above in their upcoming app which will have streaming audio and video.

According to Mike Seifollahi, one of developers building the NPR app, “codec support on older devices is hit or miss.  When trying to deliver the best user experience for our streaming audio and video content, being able to support the right codecs is essential.  Having to write/deal with software decoding for older device support is not a good use of resources.”

Android 4.0+ APIs also shows the maturity of the platform.

”Android 4.0 is a grass-is-greener ideal that actually is the greenest damn thing you’ll see. APIs are sane and normalized. There are new APIs for rich, dynamic, declarative development that allows you to engage the user more effectively. This version of Android is the first which actually helps you write better apps.” added Jake.

Jeff Gilfelt shares the same sentiment. “API 14 is when Android got serious. When design became a first class citizen and the default wasn’t ugly. It was a milestone release in many ways, and in 2013 I think it is a sensible line in the sand. Furthermore, multiple APK support in Google Play means you can still distribute a stable legacy version of your app to new customers who are running older platform versions.”

There may be some cases where supporting only 4.0 and above may not apply. If your app relies on network effects (similar to Twitter or Facebook) and/or target a worldwide audience (specifically India and China), you might need to support older versions.

If your app does not fall in the above categories, the positives of minSdkVersion=14 greatly outweigh the negatives.

With the holiday season coming, expect the share of Android 2.x devices to fall sharply. A huge number of Android device activations happen during this time and all of them would have at least Android 4.0. I won’t be surprised if 2.x share would be in the single digits by January 2014.

To reiterate Reto Meier’s point above, let’s start building the best possible Android app for every user.

Now go to your AndroidManifest.xml and change the minSdkVersion to 14!

  • josegonzalezdamico

    You have convinced me. Thanks for this insightful advice.

  • sudarshan

    I’ll show this to people at my company :)

  • Jermichael Ensalada

    Most of the developers I’ve spoken to in the Android world are planning to either retire the old 2.x applications or split off to 4.x and leave the old one sitting there.

    • Sirajuddin

      How does the retirement of the old 2.x apps change the number of apps in the android play store as a whole? It would definitely fall behind Apple. :)

      • Dylan Wilson (@craftworkgames)

        For every retired 2.0 version there would be a 4.0 replacement so I don’t think number of apps would change much. Besides, getting rid of crapps is probably a good thing.

  • asdf

    So spending money TODAY is more than spending money LAST WEEK?

    this is retarded and only benefits:
    1. chinese phone factories
    2. google who is slacking of OS upgrades for 2 year old phones. TWO YEAR is considered dead end… what about being green and all that echo shit?

    • lmno

      Just spend a few minutes comparing a 2x device to a nexus 4 and you’ll see why.

  • jimsilverman

    to be fair, most hardware still running 2.3 is very old.

    • Detrimental

      Not true, i have a spice mi425 with a 1ghz snapdragon processor running 2.3 smoothly. You call that old?

      • Sirajuddin

        All single core processor devices should be considered old!

      • jimsilverman

        i would, yes. but i believe Kitkat just rendered this entire discussion moot.

  • Gene

    Awesome post, Danny! Optimizing developer productivity as a function of *future* user acquisition is often overlooked. Developer time has not scaled with other components in the computing world (cpu / machines / compile time / bandwidth / etc.), which makes this concept particularly important.

    Gene

  • Kevin Peck

    Excellent points. The current app I am working on will target tablets only as it needs the extra screen space to be usable. It has been nice not dealing with the old compatibility libraries. Sure makes getting a project up and running under Eclipse or Android Studio easier.

    I was really close to taking the plunge to 4.0+ for all projects and this is making me really feel like it is the right way to go. Older hardware is a pain. Even the Genymotion emulator does not want to go back and play with that crap.

  • Tim

    25% of my users still use Android 2.x. I’d lose 25% revenue if I didn’t support them.

    • Quentin Dommerc

      But can you tell how many happy users you’ll make if you stop backporting/fixing bugs/investigating for android <4.0? Happy users make more users. That's the point of this article

  • manis

    Please devs do not drop 2.x. I can completely understand you if you drop 1.5/1.6 but at least 2.2/2.3 should be possible.

    I know how it is if you cannot afford a new device or you’re still in a contact and you can’t get a single app anymore.

    I’d support actively developing for 4.x only but please leave the old app in store and simply provide security updates so users can continue using the app.

    Using 2.3 I wouldn’t expect the latest and greatest but simply an app that works.

    • Sirajuddin

      Yes, I think that is what Jeff and the wedding app team did. Totally killing off the app on 2.3 would be ineffective.

  • stevenzeiler

    You don’t have to tell me twice, thanks!

  • Tony Anderson

    Android is the new Windows …think IE6 and IE7, XP support still going to this day. Google wants their products everywhere, but at what cost?

  • eor

    Fragmentation is a term sold to us by the marketing people of rival organisations. The reality is that their markets are also becoming, or already are, fragmented. A better non-attacking term would be ‘diverse’ or ‘freedom of choice’.

    I whole heartidly agree; minSdkVersion=14 should be standard. It’s all about quality and development time. If you spend 2/3rds of your development cycle trying to get that beautiful and engaging app working on older platforms, they’re not worth supporting.

    Yes, you will in the short term lose out on potential sales. However, the upside is that a faster development cycle, ability to focus more on the quality that you can offer by being 4.0+, and ability to work on more projects if you so wish, all result in a better upside. This trend will only continue, and a year from now we’ll all be pondering if we should support 4.1+ as standard.

    iOS developers have no choice, at least you can choose to support lower end versions if you so wish. And my challenge to anyone who complains about not supporting below 4.0 would be; make your own version of XYZ app that does.

  • Sky Kelsey

    I love this article, but as someone who works on a library for Android developers, I am stuck supporting 2.3 (actually 2.1), until our customers move on. I really don’t like to think about how long that will be, but conservatively, I’d say 2.1 until the end of the year, 2.2 until the middle of next year, and 2.3 until the end of 2014.

  • aditya kushwaha

    its wonderful to read this after we did the same to our application. The positives certainly outweigh the negatives, even though our app is targeted for larger audiences in India and such markets. The user expectation at the lower end of the bandwagon isnt understood well. Honestly there was no uproar when we stopped pushing updates for 2.x .