

The shocking toll of hardware and software fragmentation on Android development - j_col
http://thenextweb.com/mobile/2012/03/30/the-shocking-toll-of-hardware-and-software-fragmentation-on-android-development

======
mrb
This article is obviously biased toward extolling the advantages of iOS's
uniformness, yet the best example it takes to argue against Android's
fragmentation is an application that fails to support only 7.8% of the Android
market! How is this a proof that fragmentation is causing a "shocking toll"?

For the curious, I decompiled this "Temple Run" app. It requires Android 2.2
or higher, because its AndroidManifest.xml declares the use of OpenGL ES 2.0
which was introduced in that version of Android. (And the app's minimum API
level is Android 2.1.) The app also needs
android.hardware.sensor.accelerometer and
android.hardware.touchscreen.multitouch, but virtually all Android 2.2 devices
have these capabilities.

So, effectively, Temple Run works on any Android 2.2+ device, which represents
92.2% of the devices in the wild:
[http://developer.android.com/resources/dashboard/platform-
ve...](http://developer.android.com/resources/dashboard/platform-
versions.html) When the developer says they support 707 of the 1443 unique
devices on Android Market, this means that these 707 devices represent 92.2%
of the market, whereas the article tries to present this as "only half the
market is supported".

Yet another article written by an iOS fanboy trying to unfairly depict the
state of the Android ecosystem... Nothing to see here.

~~~
cageface
The problem is that a lot of Android devices that claim to support these specs
do so in buggy and inconsistent ways. GL shaders, for instance, sometimes have
to be tweaked for individual devices.

~~~
daeken
GL shaders have to be tweaked on every platform, and every device. The only
thing that's consistent about them is that they're inconsistent _everywhere_.
For example, certain drivers will reject shaders using integer literals where
floats are expected, others won't; different GPUs will also behave different
with respect to precision, or with how they handle a NaN in math.

~~~
xsmasher
And iOS has a smaller set of GPUs, and a common compression scheme (PVR)

------
btilly
Yes, Android is a free-wheeling mess. But I am not concerned.

I see this as a replay of the 1980s. Apple was the dominant player with a
premium option on nice hardware, a consolidated set of software options, and
facing fragmented opposition. (Then the PC/Windows landscape. Now Android.)

Then Steve Jobs was yanked from the picture (then by being fired, now by
dying), Apple lost its focus, and the fact that so many people were on the
messy platform caused it to win in the marketplace.

There are big differences. Tim Cook is hopefully not as incompetent as John
Sculley proved to be. Google is not Microsoft reborn.

But we've seen this before. The rule of thumb in computers for decades has
been, "the commodity always wins". And Android is better positioned to be that
commodity than Apple is.

~~~
radicalbyte
> I see this as a replay of the 1980s. Apple was the dominant player with a
> premium option on nice hardware

No they weren't. In Job's first stint at Apple he was beaten by Commodore.

Commodore were vertically integrated. They owned the company who designed the
chips in early Apple computers. They focussed aggressively on price, and they
won the battles with the Vic 20, C64 and early Amigas. After a bunch of crazy
decisions at the end of the decade they eventually lost the war and died a
death in the mid 90s.

As they say, it's the winner of the war who gets to write the history books,
and in Cupertino they're done an excellent job at it.

~~~
nkassis
For those interested, On The Edge by Brian Bagnall ([http://www.amazon.com/On-
Edge-Spectacular-Rise-Commodore/dp/...](http://www.amazon.com/On-Edge-
Spectacular-Rise-Commodore/dp/0973864907)) does a good job recounting the life
and death of Commodore. The management of that company was definitively rocky.

------
guelo
This article is overblown.

In Android you don't have to support any device you don't want to, just
exclude it from being shown to those users. Same with the OS version, if you
don't want to support 1.6 you can make it unavailable to those users.

Most apps don't have fragmentation problems unless you're doing something
tricky and hardware dependent, like trying to do fancy things with the camera.
I've released several semi-popular apps with few bug complaints.

If you look at Temple Run in Play you will see it is very highly rated and it
has over a million downloads.
[https://play.google.com/store/apps/details?id=com.imangi.tem...](https://play.google.com/store/apps/details?id=com.imangi.templerun)

Finally, the author's link to one badly voted Reddit comment with little
discussion made me think he was just out to write an Android bashing article
as link bait.

~~~
gcp
_In Android you don't have to support any device you don't want to, just
exclude it from being shown to those users._

This will: 1) Be quite tricky due to the sheer number of devices making it
difficult to test everywhere. 2) Only supporting those you know to work isn't
viable due to the amount of fragmentation.

 _Most apps don't have fragmentation problems unless you're doing something
tricky and hardware dependent_

How about reading from a zipped resource on storage? (10x slower on Galaxy S,
in some circumstances, due to filesystem bugs) How about doing an SQL query
with a JOIN? (100x slower, in some circumstances, on pre-2.3 devices due to a
query optimizer bug in the SQLite version they ship) Showing a splash screen?
(Top cut off on Samsung devices running Gingerbread, nowhere else. Still
tracing the reason)

 _Finally, the author's link to one badly voted Reddit comment with little
discussion made me think he was just out to write an Android bashing article
as link bait._

That's a valid criticism. The author found _one_ person that didn't want to
pay a dollar, and a few hundred calling him out on being stupid.

Can we get more income comparisons between popular apps on iOS and Android?
That's the real data.

~~~
rbanffy
Fragmentation is not that bad of a problem because the distribution is far
from even: you can still support most (as in 90%+) with just a handful of
types. You van also restrict support by limiting the minimum OS version. The
707 devices supported cover more than 90% of the devices used.

The article is linkbait. And less than stellar journalism. Looks like someone
had to fill the weekly quota of articles and took the easy option.

------
ericd
I really, really hate supporting an app on Android. This is a big part of the
reason for that.

As an example, at one point it apparently would simply refuse to start on the
Droid X, despite running great on the original Droid I had to test it with,
and the VM I set up to emulate the X. Without access to a physical Droid X, it
couldn't be debugged. The app doesn't require anything from the hardware
besides a GPS, so I was at a loss for what would cause this.

Because it's a huge pain to properly test new versions, I tend not to keep the
Android version up to speed with the iOS version of the same app. As a result
of that, I get a lot of complaints from Android users that feel short changed
and bad reviews from people who feel like the app isn't keeping pace with the
alternative apps (mostly they use the web app as reference).

It's just a really crappy situation. I've thought about dropping Android
support, but then they would just complain that the iOS crowd get an app and
they don't, so that wouldn't be much better. At least I wouldn't have a low
star rating publicly attached to my brand, though.

~~~
JoshTriplett
> As an example, at one point it apparently would simply refuse to start on
> the Droid X, despite running great on the original Droid I had to test it
> with, and the VM I set up to emulate the X. Without access to a physical
> Droid X, it couldn't be debugged. The app doesn't require anything from the
> hardware besides a GPS, so I was at a loss for what would cause this.

What ended up causing that problem?

~~~
ericd
It seems to have fixed itself since then, so I never figured it out.

------
dendory
I think it's very valid criticism and it can't really be compared with
Windows. There's many differences:

\- Windows has a lot of APIs and hardware abstraction levels. Microsoft has
always been known to change things very, very slowly, and keep backward
compatibility.

\- Hardware makers don't mess with Windows nearly as much as they do with
Android. They will install a Norton trial and that's it. They don't remove the
UI and put their own.

\- Microsoft acts as a gate to what innovation hardware vendors can bring in,
even more so today with driver testing and signing. Remember back in the day
when an OEM did something crazy you'd get BSODs from bad drivers. Now that
doesn't happen anymore, because everything is so much more robust. Android is
still no where near that, and Google isn't doing much, relying on the open
community.

~~~
huggyface
_There's many differences_

None of your differences are really the differences you think they are.

Android has a lot of APIs and hardware abstraction levels. Of course it does
or it wouldn't work across over a thousand devices with a pretty high degree
of success.

OpenGL ES 2.0 _itself_ is an abstraction that has allowed for lots of triple-A
(relative to mobile) iOS apps to painlessly get ported to the NDK on Android.

To get the market and the Google apps -- to be a Google sanctioned Android
device -- the maker has to pass the Android compatibility tests. Should they
be more stringent? Absolutely, but they exist and have done a good job.

The linked article is _terrible_ , and horrendously biased, using exaggerated
language at every turn. It makes completely unsupported claims at every turn.
What Android has accomplished is _amazing_ , and the level of compatibility is
incredibly high, but yes with over a thousand devices, not all of which are
certified, hundreds of millions of users, and hundreds of thousands of apps,
you _will_ find problems. Big surprise.

------
kalleboo
What I'm curious about why it is fragmentation is such an issue on mobile
devices, when it was never this big a deal on desktops. Outside of cutting-
edge 3D games, Windows developers don't need to have 100 laptops to test all
the different hardware permutations for their software.

~~~
masklinn
> What I'm curious about is why is fragmentation such an issue on mobile
> devices, when it was never this big a deal on desktops.

Stable APIs and abstractions, better renderers, ability not to go fullscreen
and nobody caring about dpi. Resolutions changed very slowly, especially
before the 00s and 3D games. Also culture, somewhat, probably: if the game
does not work due to a bizarre combination of drivers it's the users problem.

And it's definitely not true that "it was never this big a deal on desktops",
stable hardware target is regularly mentioned as a reason to go console by
developers.

~~~
intended
Heck it was never a big deal is factually incorrect. IT is STILL a big deal:

Fragmentation means your ATI card not working one day, or your novice user
having to go dig through pages of support to figure out how to debug a faulty
driver.

Or its your printer not working on XP, but working on 7 || your games being
unplayable on one set up and working on another without a hiccup || any of a
massive set of issues that people take for granted when they have to deal with
PCs.

Fragmentation is an issue, its just that people have gotten used to it and
familiar with it.

Fragmentation IS a problem and remains that way.

------
mrb
If you are a mobile software developer who refuses to deal with Android under
the pretext it is "fragmented", you will simply be obliterated by your
competition. The Android market is so large, and becoming larger every day,
that other developers will gladly do the work you refuse to do. And they will
succeed, just like the desktop/server software development world has learned
how to cope with "fragmentation" in the Windows/Linux ecosystem by supporting
the various OS versions, editions, service packs, distributions, locales, etc.

It does not matter what you think about Android fragmentation. It exists. Deal
with it.

~~~
rbarooah
The point about the market being 'large' is the very thing that fragmentation
undermines. What matters is how many paying customers can receive a good user
experience from your app, and what this costs to provide.

You also assume that Android will continue to outpace iOS in terms of growth -
i.e. the trajectory will be like the PC rather than like the iPod.

It matters very much what you think about Android fragmentation. Dealing with
it has been a costly mistake for some developers, and could be for you.

------
babarock
Stop complaining about fragmentation and define yourself which devices you
support!

It's crazy to think that a common OS among such a wide variety of phones is
enough to achieve perfect portability. Let's take an analogy: Your Windows PC
runs an OS very similar to the ATM across the street (I'm not even mentioning
the wide array of platform Linux runs on). Do you really expect your app to
run on all Windows machines flawlessly?

The real issue is that Google is only too happy to brag about number of
Android users, or apps in their market (what's the proper naming convention
now? Play?). Corporate bullshit meant to appease shareholders and attract
developers.

You can sit all day complaining that Android isn't the developer paradise it
was advertised, or you can be more pragmatic, restrict yourself to fewer
devices and achieve quality.

But we, as developers, are greedy and pretentious. We want our apps to run on
every machine possible, and be featured on top of their stupidly competitive
"market".

I blame Apple for the broken model (but hey, it works for them), and Google
for not knowing better.

~~~
brazzy
_Do you really expect your app to run on all Windows machines flawlessly?_

By and large, yes, people expect that and developers largely achieve that. But
of course Windows is a much more mature platform than Android.

~~~
babarock
I think you missed the part where I mention that Windows _runs on an ATM!_ I'm
not crazy enough to suggest that Windows apps running on your Dell laptop
would run on a Toshiba laptop. After all, they're both clones of the same
machine (<http://en.wikipedia.org/wiki/Pc_clone>)

~~~
brazzy
I've programmed ATMs, and dendory has it exactly right: those are completely
regular stock PC hardware running a completely regular copy of Windows. The
only thing special about them is that they're physically secured and have some
very unusual peripherals and assorted drivers.

~~~
babarock
Honestly I never did program on an ATM so I may be wrong. But I'm willing to
assume that unusual peripherals and drivers are analogous to the portability
issues across android phones. Genuinely asking, not claiming to have the
truth.

~~~
brazzy
There's actually a standard for ATM hardware interfaces originally developed
by Microsoft (WOSA/XFS, now CEN/XFS), which is a major reason _why_ ATMs run
Windows.

When I worked in the industry 10 years ago, there were lots of ambiguities in
the standard and the drivers were pretty flaky, so the situation there may
actually have looked like Android does now.

But ATM-specific hardware and software is a niche market with few customers
paying lots of money each, so the pressure to eliminate incompatibilities is
not as strong - you can just throw people and money at fixing issues as they
crop up.

The situation is completely different with mass-market PC hardware and
software though, and I'd say that it should be possible for Android to get
there as well, since it's also a mass-market product.

------
Tichy
Somehow thousands of Android developers still seem to manage fine. Some parts
of the article made me quite suspicious that it was really an Apple marketing
piece.

~~~
rbarooah
Android developers are incurring higher costs for less revenue.

That may be 'fine' but it's still a disadvantage.

------
sehugg
Our experience supporting both iOS and Android versions of our app for 18
months (>1M daily users) is that Android users are much less satisfied. We are
twice as likely to get a support request from an Android user and those
requests tend to be more complex (and qualitatively more grumpy).

For example, take push notifications. C2DM only works on 2.2 devices with a
logged-in Google account, so you need a fall back push mechanism. Even with
C2DM you must struggle with various challenges surrounding power management
and wifi sleep. In comparison, APNS just works.

Also, Android aggressively deprecates. With ICS there's a brand new Fragments
API, which to be sure has a backward compatibility library, but now you are
faced with the choice of rewriting your app to fit the new UI style (and
potentially confusing existing users), limping along with the old Android
styles, or supporting both and making your life miserable. Hey, and don't
forget landscape mode and multiple aspect ratios!

I could go on, but I'm getting negative.

------
Zigurd
The first sign of trouble is:

" A previously (very) successful game on iOS, it was brought over to Android
in order to take advantage of the huge number of devices that run the OS."

Right. A game with graphical assets designed for a couple of fixed screen
sizes and resolutions is going to have problems on a system that forces
developers to handle multiple screen dimensions and resolutions.

Shocked. I'm shocked.

The one thing Android "fragmentation" (meaning whatever it means in which ever
context) hasn't caused for applications that were developed for Android is
compatibility problems. Android apps are remarkably compatible on hardware
that they were never tested on.

There is plenty to hate about OEMs' craplets and "enhancements" - which
comprise the more commonly held definition of "fragmentation" - but they have
had very little effect on application compatibility.

------
Tomis
This very "hard" problem was solved long time ago by releasing your product
along with a free demo (or shareware, or whatever). As a developer you simply
have to make sure your product works on the most popular platforms, or
whatever kind of platforms you want. Before the user buys he tries it, so
there will be less complaints that the app does not work for them. Hardware
and software will always be fragmented in a free market, and that's ok.

------
shareme
the article is link bait..

How do I know? Because the same fragmentation exists on iphone but smaller in
quantities..to say it is not there on iphone is a bit somewhat lying like
republicans..

Now lets see someone be honest about this on both platforms or STFU

~~~
objclxt
I run a 10-person development team, split 50:50 Android / iOS, under a digital
agency. We build apps for carriers (account management apps), brands, etc.

From my own personal experience, which having built apps since the first iOS
SDK and Android 1.6 is hopefully fairly reliable, the QA and testing burden on
Android apps is _considerably higher_ than iOS.

That in itself isn't totally surprising, because there are far more handsets
on the market. But that's not the real issue: say I'm writing an app for a
network carrier. Carriers typically want their apps to run on all hardware
they've sold for the past two years (ie, everyone who's still under contract).

On iOS, that's iOS 3-5. Very soon, it'll be iOS 4-5 - 4 was released in June
2010.

On Android, that's 1.6, 2.0, 2.2, 2.3, 3.0, and 4.0. Because the _key
difference_ is when Apple release a new version of iOS, they stop selling the
old one. But that's not the case with Android. Even today there are still
phones on the market running 2.1.

When you say "the same fragmentation exists on iPhone but smaller in
quantities" - I don't really think you know what you're talking about. If
you're developing an app now you can pretty easily support iOS 4.3 upwards,
which would cover all handsets being actively sold by Apple for the past 21
months or so (the 3GS onwards, or three phone models and two tablets)). How
many Android phones running how many versions have been released in the past
21 months? Far, far more.

This doesn't inherently make Android a bad platform: lots of people choose to
develop PC games even though there's a much higher testing burden that
consoles (in terms of the varying environments and OS versions). I think
Android is great: I'm not arguing against developing for it. But I think you'd
be very hard pressed to find someone experienced with both the iOS and Android
platforms who'd disagree with the notion that fragmentation on Android takes
up a lot more time to deal with than iOS.

~~~
nextparadigms
Apple's major versions come out once a year, while Android's about twice per
year. In this case Android 2.1 (early 2010) is even newer than iOS 3.0. Are
you saying nobody has an iOS 3.0 iPhone anymore?

I don't think _phasing out_ versions is a big deal for Android. It happens
about as fast as for iOS (~3 years). What is a bigger deal is how fast the
_latest_ OS/API gets adopted. iOS can push out the new version in _days_ to at
least 50%-75% of the users, while for Android it takes about a year to be on
75% of the devices (that's how long it took for Gingerbread).

And the issue with that is that users don't get to take advantage too much of
the most cutting edge software, until months after release, when (or if) they
get their upgrade, while on iOS they can do that just days later.

------
damian2000
If you are a developer thinking about choosing between iOS or Android, well
after reading this article the decision is easy.

~~~
djmdjm
Which part? The fragmentation or the bit about the Android version hitting "1
million downloads in just 3 days"?

