Site is giving me a database error, so I'm committing the sin of posting based only on the title :(
Hipster Mountain View/Palo Alto is not the world. Most people who manage to afford to buy a smartphone, use the thing until it dies. I personally just upgraded from an Android 2.3 device, and my latest Apple device is on iOS 2. And I read Hacker News for christ's sake.
Maybe for your app, your community the norms are different. But be careful not to bias your data - you better be sure that you are not unknowingly turning away people who would be customers if only you supported their device.
Even in the world outside of "hipster palo alto", 70% of active Android users are on 4.0+: http://developer.android.com/about/dashboards/index.html
It seems to be growing 5% per month, so already by the end of the year 2.3 market share might fall below 10%.
Starting from 4.0, many APIs were cleaned up, many bugs were fixed, and it seems that many carriers/manufacturers have stopped shipping bizarrely broken custom modifications.
Unless you have a large development team and absolutely must reach every possible customer, targeting 4.0 and upwards seems to be the most efficient choice.
FWIW, remember that these figures are biased in construction.
Less importantly, they only take into account devices that have the Play Store (which you might consider your audience, but there are tons of people in the world happy to buy things from alternative markets available on their devices).
However, and this is somewhat insidious: they measure devices used in the last seven days. How often do normal users "actively visit the Play Store"? I find it highly unlikely that every normal user does so at least once every week.
In fact, I would be much less surprised by a universe where people only "visit the Play Store" once a month at best, and only when there's something specific for them to be doing (maybe they hear about a new product, and go to download).
I would then further submit that this frequency decreases the older the device is: during the first month of owning your device, you probably have tons of things you suddenly realize you want, because the device comes with no apps installed.
With an expectation curve on the usage of the device thereby working against older devices, you will see a chart that only looks at the most recent 7 days biased towards recent versions as the probability of older versions dips.
Let's look at what happens then if we posit that the average 2.3 user is using the Play Store once every four weeks, while the average 4.x user is using the Play Store once every two weeks: this mild skew makes 30/70 become almost 50/50.
Are these people who are using 2.3 really outside of your target market because they only download an app every month instead of every couple weeks? If you market to them, and make it clear your app supports them, will they not buy it?
While that might be true, it isn't something you can support with just these numbers from Google. It's even worse, in fact, when you remember that when Google was tracking "active devices" instead of "devices actively visiting Play" the 2.3/4.x split was so far in the other direction as to be unbelievable, and when Google decided "fine, we are limiting it to active users" the numbers jumped.
And now, we see the numbers creeping better and better... but did you notice that they changed the time range from 2 weeks to 7 days in the few months since Apple lambasted their uptake at WWDC? If not, you aren't paying enough attention ;P, as that's a really critical detail: Google keeps moving the goal post, so you can't take any solace in "we are making progress".
How many devices are out there that could be running 4.0+ but aren't due to manufacturer or carrier interference? Not everyone is capable of rooting and installing custom versions of the OS.
Android fragmentation is purely a manufacturer/carrier issue. To the article's point, maybe developers can help that process by enforcing 4.0+.
as someone who paid google $600 for a nexus one that can only run 2.3 (2.3.3 with CM), i'm very offended. Even more so because they could have easily ported all the features such as browser rendering engine to the device.
You can be a great developer and not know the first thing about server administration. They aren't mutually inclusive skill-sets in the least. If I spend my day working on embedded systems, why would I give a rat's ass about a webserver?
Not to mention there are still plenty on new GB phones sold in developing markets.
He's advocating dropping potentially 30% of his potential consumers because it's technically easier. Some of us can probably afford that, some can't. But I just think broad statements like "Just drop support for the older version, it'll push people to upgrade and make the entire system better" is a stupid argument.
The reality is people paid a lot of money for their sweet new Android 2.3 phones 2 years ago or less. Why should you punish them now and not spend the extra time to make your app work well there?
The biggest problem with GB that I've seen isn't necessarily the lack of certain APIs , but the constraints in terms of resources on phones with GB, which tend to have worse hardware (because they are older devices or lower-end devices). If you think by developing on ICS/JB you magically can stop worrying about performance or resource constraints, you'd be mistaken. Some of the new cheaper Android phones in developing markets are very resource constrained.
Cheap devices aren't going away. Dropping GB support does not mean you can stop writing performance-optimized code or profiling your app.
Interesting tone. I would have flipped it to the opposite: "He's advocating dropping support for the 30% least valuable users, who are in reality your least likely customers. Some large developers might be able to support such a cost, like Facebook, but for most developers its probably not worth the cost.
People with older phones that they paid only a few hundred bucks for two years ago should not have the expectation for it to keep working. It is not punishment, they can continue to use their devices as is perfectly fine."
It's true, Gingerbread devices are still very common (I have a rooted Kindle Fire that's still running GB, and there's nothing I can do to change that). However, something to note is that there are new Gingerbread phones being sold in the US right now. A friend of mine just bought one. He's a student without a lot of money, and it was inexpensive and didn't require a long term contract. He doesn't have data on this phone, or even text messages. He has voice only, and does everything else over wifi.
They're still out there, absolutely.
Also, writing code to work well on lower end phones might be a pain, but it means it's going to make your app even smoother on the higher end devices. It requires more time, buy you get more of a performance buffer.
...but I understand that only techies dare to go download random images from the interwebz and attempt flashing their device. Personally, my Kindle Fire is running this SimpleCM9 Android 4.0.4 quite well.
Well I'll be. I guess I hadn't taken a look at what's being done to modify the Kindle Fire in a while, I shouldn't have doubted someone would build a newer ROM for it :)
>Most people who manage to afford to buy a smartphone, use the thing until it dies.
I've been making this argument for a while, whenever someone cries about fragmentation, mainly from my personal experience. I'm a "techy"; I want the latest and greatest. But in my family there are 4 Android users, 3 of which don't know what version they're running, or care in the least. They use the phone to make calls, check email, text, browse the internet and maybe download an app or two. Every version of Android has those capabilities.
It's amazing to me that we're saying that a three year old OS is too old to have software written for it. Especially given that a part of the laptop market has metamorphosed into the tablet market.
I guess that's not a problem if you buy new tablets/phones every year, which is what we're moving towards.
Most people buy apps when their device is new-ish. Three year old phones are fine. Five year old phones are fine. But you are not going to sell the users of these devices an app that you started writing today. And you won't lose customers if you stop upgrading them, either.
> Android 4.0+ is just much more mature than 2.3 in terms of UI and API.
Maturity is a very important point. Between 2.3 and 4.0, Android became scale-able across tablets and handsets, with unified APIs enabling a unified code-base.
Compared to that big change, dealing with API differences from Android 4.0 to 4.4 is a relatively small matter, comparable to testing for hardware capabilities (and often tied to hardware capabilities). You can test for the API version on the fly and keep a unified code base.
I feel that supporting Android 2.3 at this time is roughly equivalent to supporting IE6. For the majority of people, just stop targeting 2.3 support as a requirement. Perhaps it'll net you some additional marketshare in emerging markets, but for the most part, ≥API14 is ubiquitous to a point where this is a sensible decision.
I'm no Android developer, but with as many API versions I know of for Android it's not hard to imagine that the development experience is very similar. Supporting <API14 may cost more in development and support than the potential customer base gain, especially if the target market is the sort that would have newer devices.
I will grant that it is a bad comparison. But, not for percentage based reasons. I initially wrote the comment that abandoning <14 now is like abandoning ie6 back in 2010, when google dropped support[1], but percentage wise, that's not fair either.
Since Android API 14 is just celebrating its 14th birthday, I'd guess (nothing to back this up) that you're going to see a sharp dropoff of Android 2.3 marketshare as people replace their old phones. Between developing for the future, and incentivising people to switch away from old technology (people don't want to buy an old phone that can't run the latest goodies), I think this is still the correct path to choose.
Kill it with fire. I don't take much issue with making Android 2.3 a second-class citizen at this point.
>I'd guess (nothing to back this up) that you're going to see a sharp dropoff of Android 2.3 marketshare as people replace their old phones... Kill it with fire. I don't take much issue with making Android 2.3 a second-class citizen at this point.
You could very well be right, but I think you have the wrong impression of the users.
We view IE6 users as a completely technology inept minority. They could upgrade to a better browser in seconds (not including the enterprise).
Android users on the other hand? I've been an Android user for 4 years. I got tired of getting gouged by Verizon and just switched to Republic wireless. So I have a brand new phone and I'm on 2.3.
Even leaving the percentages out of it, I don't think it's appropriate.
I'm not going to lie--I think buying any device running 2.3 at this point is a giant waste of money, comparable to buying a laptop with Windows XP on it. There is no reason. Nexus 4s are recently out of stock at $200, and the Nexus 5 will probably compete in that area too.
It's a shame that republic wireless is handing out 2.3 devices--that really should stop.
There is a big difference though. People who run IE6 would be usually capable of running some more recent browser, but for various reasons choose not to.
People who are stuck with Android 2.x are stuck because their hardware can't support newer versions of Android (well there are various custom ROMs that "work" with various degree of success on older devices, but not really in a usable form).
I'ma let him finish when his site comes up, but here why I generally recommend targeting Android 4:
1. If you want to make a UI that scales across all device sizes, and you don't want to use hacks like ActionBarSherlock that will become a maintenance headache after the moment of convenience, build your app skeleton around Android 4 APIs.
2. Targeting Android 4 avoids use of the Support Library for back-compatibility, and therefore avoids using FragmentActivity. This isn't as bad as some of the back-compatible action bar hacks, but it is still an unnecessary complication in most cases. N.B. you may still want to use the Support Library for new APIs like PagerAdapter.
3. Tablets are going to increase in importance, and for some apps, tablets are the main target. Center your implementation strategy around tablets as the ideal experience, with multiple fragments on each tablet-size layout that are "unrolled" into sub-activities when running on a handset.
4. If you think the above point implies a unified code-base, yes, it does. Targeting Android 4 and above will simplify your unified code base.
The exception is apps that MUST target every user, and every device in the field. For example, my consultancy had an engagement with a dating site that needed to upgrade their Android app. After weighing the pluses and minuses, the conclusion was that it was better to put in more effort and incur some technical debt to reach every possible user. On the other hand, if you are writing an enterprise app for a green-field deployment, don't even consider supporting old versions.
Excellent article! I'll link it on G+ and on the Programming Andorid page.
I would add to the list the fact that people buy apps most often when they have just bought a new handset. Supporting old versions is like making a retrofit product. The market is inherently limited and more costly to support.
Hipster Mountain View/Palo Alto is not the world. Most people who manage to afford to buy a smartphone, use the thing until it dies. I personally just upgraded from an Android 2.3 device, and my latest Apple device is on iOS 2. And I read Hacker News for christ's sake.
Maybe for your app, your community the norms are different. But be careful not to bias your data - you better be sure that you are not unknowingly turning away people who would be customers if only you supported their device.