Android's Overblown Fragmentation Problem
nick.typepad.com
nick.typepad.com
Most (but not all) Android phones being produced today support OpenGL 2.0 - even so, there are lots of tricky differences.
The obvious one is different screen sizes and resolutions. This can be a challenge, particularly for 2D games. You need either different versions of artwork, resolution independent artwork (through 9png, vector graphics, or something else), or to accept that your art is going to be stretched on most phones.
Additionally, different combinations of GPU/screen size have vastly different performance characteristics. A phone with a 720p screen might very well have the same GPU as a phone with an 800x480 resolution screen. Guess which one performs better? This requires a lot of testing, as the stereotypical "low end phone" might actually perform better than the latest and greatest with a giant screen.
Phones also differ, and sometimes greatly, based on the graphics chip/driver. HTC phones often don't preserve framebuffers in the way most other manufacturers do.
There are many more: non-po2 textures, compressed texture support, different context preservation behavior based on phone and OS version.
Games may not be the stereotypical application here, but they're a huge part of the market, and Android fragmentation has made developing performant, good looking games much more of a challenge than on iOS.
The bit about pixel-perfect art matters to some, I guess. PC game vendors have been doing resolution-independent games for decades now, so it's hardly a killer. But if you have to have it, then you're stuck with the iPhone (not even iOS, obviously, as you'd have to chuck iPad support).
And the rest is just saying that "OpenGL is hard". Yes: if you want to code to precisely the extension support and bug-for-bug quirks of one GPU (presumably the PVR SGX 5xx in your case), then it's easier to support just that phone. Duh. But that seems like bad practice to me. What if Apple goes with Mali or Tegra3 for the iPhone 5?
As for "OpenGL is hard" - I think a major point here is that Apple has made it far less so. Because of their extreme curation of devices (re: only Apple produced devices), and the ease of software updates (well over 30% of phones are upgraded to the latest iOS version [1], with > 80% on a 5.x version [2]), iOS has continued to be a remarkable homogenous platform.
As far as Apple choosing a new graphics chip for the new device, it's certainly possible. With iOS, though, you can support a known list of devices and have 100% coverage rate. On Android you either have to whitelist phones (and therefore exclude users), or try to do feature detection at runtime to enable the correct codepaths.
[1] http://david-smith.org/blog/2012/05/11/ios-5-dot-1-1-upgrade... [2] http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-s...
That's a sharp contrast with iOS's unified, simple developer story: all PVRTC without any maximum app size.
But yes: texture compression formats and hardware support are a terrible, terrible mess. Happily I believe the early patents on S3TC are set to expire soon.
Any other OS which tries to cover more devices and configurations than that will inherently be less standardized and "harder" for developers, especially in its first few years of existence. There used to be a lot of different GPU manufacturers for PC's out there also 15 years ago.
These sort of things tend to become more standardized after at least a few years have past, and not only the OS is more compatible with different hardware, but there are fewer manufacturers to worry about, too, once the leaders of the market have been set, and the manufacturers themselves work on making their own hardware and drivers more compatible with previous versions once the market is stable.
The author actually says that Android fragmentation is less of a problem than on the web or even on Windows! If that's true, then Android is already doing very well regarding supporting a ton of devices that are still compatible with each other. But again, I still want Google to constantly work hard on making it as small of a problem as possible.
One of the great things Google has done to help in this regard (whether intended or not) is the ability to push out releases to customers within minutes without review. While there are many reasons this lack of review can be dangerous for users, from the development side, it's really fantastic to be able to push out fixes to affected users as soon as you've got them implemented and tested. I.e., at least you can apply pressure to that gaping wound quickly.
Very much looking forward to what the Motorola acquisition has in store and am staying optimistic--one thing I've noticed is that the "dominant handset" changes fast - for us, sometimes, in a matter of months. And when we have a pretty stable dominant handset, life gets easier (the HTC era and the calm before the ICS storm was kind of nice). If a stable, Google-controlled and well-tested Motorola phone becomes the dominant for a significant amount of time, this has the potential to be a very good thing for developers.
But at any rate, it seems like the OP is trying to equivocate "well it's natural when you do things like this", but I'm not buying it. When your direct competitor doesn't have that problem, you can't wave it away by saying "it's inherent in the model".
So yes, there is no way that Android hardware & software fragmentation is going away. Just like there is no way that web browsers fragmentation is going away (hello HTML5 moving standard!). I'm also pretty sure that iOS fragmentation will become more and more important (new iPhone screen... Apple TV ...).
In both platforms you run into very little issues for most apps, and you need to add support for lot's of different configurations if you write on the system level (Game developers can tell you a tale or two about this).
At Game Closure, one of the foremost features of our SDK is our cross platform (all Android devices as well as iOS) engine.
And of course the 4/2 argument is bunk anyway. Web developers test ever major version of every browser (especially with IE) and every version of every OS. So for example it's {XP,Vista,7} cross {ChromeN,ChromeN-1,IE7,IE8,IE9,FirefoxN,FirefoxN-1} plus {Lion,Snow Leopard,Leopard} cross {Safari,ChromeN,ChromeN-1,FirefoxN,FirefoxN-1}, etc...
You can't have your argument both ways, basically: either the small market platform variants matter or they don't. If they don't, Android support is easier than the web by a significant margin.
At the end of the day we have to much less checking in web development than we do in mobile because while browsers are different that are more alike than they are different. That cannot be said for Android/iOS, they differ down to their very core and most cross-platform attempts fall hopelessly short of a usable app.
The point was that the added cost to development due to platform incompatibilities is less than it is in the web world. And I think that's largely inarguable. Where is the list of Android incompatibilities that is anywhere near as complicated or exhaustive as http://caniuse.com for example? People in this thread are having a lot of trouble coming up with any specifics at all, in fact. Mostly just a list of apps that break somewhere; no one seems to actually remember any real bugs or workarounds.
And it depends on your audience. For instance, if you're Reddit (or are targeting the Reddit users) you're looking at 7% on IE, and 2% on Opera. You can practically ignore those browsers in that case.
I bet the Reddit crowd are almost all up-to-date with whatever browser they are running. A stodgy enterprise or gov't office might mandate a certain outdated version for internal apps. I'd bet that a small slice of the vast number of websites out there actually target the average user. The ones that do are likely generic portal ("start page") sites, stores with broad appeal (Amazon, Target, B&N), or public services that everybody would access.
I could be wrong, but don't Chrome, Firefox, and even Opera now auto-update as well?
On the web one only has to test on 4 browsers x two operating systems. On Android, one only has to test on 1 browser and 1 operating system.
Not true. Each carrier has their own build of the OS, and they have different sets of bugs. For example, on one of the Samsung phones (I don't remember which one) on one carrier there's a loopback interface, and on another carrier there is none.
But for web apps? The browsers are free, the apps are (usually) free, and there is an expectation of approximate user experience on the web. On phones the standard is much higher.
That's at least the way I feel about it (and will be switching to an iPhone away from Nexus S because of all those reasons; my OS X / iOS devices always feel more "real" than my android phone).
Did you not pay for your computer itself, an Internet plan, and then for software (sometimes)? How is the Android experience any different?
In a sense the "browser" is a different part of the overall experience.
I know that I've become accustomed to have different expectations of web apps, because they are web apps.
I feel like when it comes to more native apps you have fewer excuses for something being wonky or broken.
Sure it's somewhat difficult to develop and test Android applications due to fragmentation, but I see the bigger problem being the end users with Android devices in their hands that can't run apps because their particular device or their new, but ancient build of Android isn't supported.
What Color? is an example of this. It doesn't work on the Galaxy Nexus. Who knows why. The Netflix app was another example, for at least a while.
And who knows if it will ever be supported, because only $x number of people own that device, which is one of hundreds available worldwide at any given time.
Seems to work fine on my Galaxy Nexus, though I've never heard of it before and maybe support was recently added. And to be fair: this (a camera-integrated "what is this color?" tool for colorblind users) is a really obscure app! The Netflix example is AFAIK wrong; I don't think it was ever "unsupported" in ICS, but maybe I'm misremembering.
Are there any real-world examples? I mean, sure: occasionally you see an app that has bugs on one handset or another, and sometimes those go unfixed. But to pretend that this is a serious problem for "end users" is vastly overstating the case.
The GPU thing is legitimate. If you let the market differentiate on graphics performance then software vendors will choose to optimize their platform compatibility in ways that don't include everyone. That's "fragmentation", though I'm hard pressed to see how you avoid it without making everyone code to a single core SGX 540 like iOS does.
And Firefox ships an app that doesn't support the native ABI of the platform (which, to be clear: has a slow ABI precisely to avoid fragmentation. iOS has the same backwards-compatible floating point issue, btw). Again, I don't see how preventing software vendors from making these decisions is helping anyone.
The NetFlix example was not specifically referring to the Galaxy Nexus or ICS. Upon its initial launch it was only compatible with selected devices.
What Color? may be an "obscure" app, but like I said, it's a case example of what I run into time and time again. And that's where I see the bulk of the fragmentation problem (however large the fragmentation problem is).
"This rounded corner on ie7/winxp doesn't look exactly the same as the rounded corner on my iphone4!" isn't the type of complaint I hear from clients any more, but font renderings, aliasing, shape of rounded corners, etc are all things I've had to deal with in the past.
We're now entering mobile devices/tablets, which will bring with it its own version of the same stuff. It was easier to tell someone "that's netscape, this is opera - they're different, and will look a little different*" than it will be to say "this is android, and that's android, but they don't work the same".
I hear this type of stuff all the time.
Android support is helpful but not neccesary, like supporting IE alongside Firefox a few years ago. Sure people use IE more than any other browser (now Chrome, yes!), but that doesn't mean a lot of IE users are going to use your website in the first place.
IMHO that applies to android today, iPhone users are way more likely to buy your service in the first place so you should focus on them. No need to leave android users hanging, but clearly the platform doesn't warrant anyone's sole focus so much as basic support.
Android is not the very worst one to support (that would be blackberry), but it is the worst within its own ecosystem. As a designer it infuriates me to no end to never know the Dimensions, PPI, or general experience of any given user. It makes any refined UI design nearly impossible. While I can't create great experiences on specific devices, for Android I have to make glorified web apps at best.
If I were a Android customer, I would be irritated that my platform has significantly handicapped my apps.
The article mentions video - that's directly related to either 3rd party ROMs or phone manufacturers not paying for/getting licenses for MPEG and/or other standards. Google APIs is another - there's various additional requirements that manufacturers have to deal with to get those. There is an alternative BTW to Google's maps - Mapquest (http://developer.mapquest.com/web/products/featured/android-...)
This doesn't make sense to me. Android gives you all the tools you need to scale a UI to different types of screens, so why would not having a set dimension/resolution/PPI value make it hard for design? The added challenge is thinking about how your UI may work gracefully on smaller or larger than expected screens, but those challenges can be overcome as they are on other platforms like the web.
That is, it works fine in theory. It just hasn't ever worked as advertised in reality. And trying has often generated more pain than it's saved.
It's worth noting that much of modern web design moved to a place of fixed minimum widths and white-space taking up the remainder. Responsive design promises to change that a bit toward scaling UI, but thus far is just a mechanism by which designers can incorporate a few hand-tuned minimum-width variants.
That's not to say there aren't challenges. But the whole point of Android was always to create an industry standard for a wide range of devices. This requires - by definition - support for a variety of screen sizes, DPIs, hardware features, etc. When most people talk about fragmentation as a negative point of Android, they're forgetting what Android is. A common platform, running on an unlimited number of devices. That's by design, not accident.
Compare a Galaxy Note to a Droid Razr. They have different sizes, dimensions, pixel densities and various other factors. The UI doesn't just 'stretch' and fix all that. It stretches and looks terrible, feels too large or too small on some devices, and makes fonts et al a mess.
Then throw in a Galaxy Tab, a Kindle, and a more tablet/phone 'tweeners'. Its a total mess. Then throw in operating system versioning and various hardware support and you see why many developers build for iOS first, then consider an Android app.
Edit: I support roughly 200 apps multiplied across all platforms on 20+ app stores. (Roughly 1000 app builds). I see more problems that your average developer sees.
How many different-sized images do you save out if you want a button to be crisp on all screens? Now how many if it's a compressed (gpu format) image?
I'm incredibly glad that Android doesn't go with the dogmatic 'our choice is the best choice' approach. It means I can use things as I want them, not as Google wants me to.
I can't agree with you enough.
this whole "fragmentation is a problem" argument falls on this one point alone. fragmentation isn't a problem, its a fact. as a pro android dev for a few years now, android is resoundingly the best sdk/os that I've ever used for mitigating such an insanely diverse set of hardware (tv, watch, dumb phone, smartphone, tablet, laptop, no problem)
Four months ago, we were experimenting with a combination of PhoneGap and mobile website versions of an app, and that was an unholy nightmare of bugs--not because of the version of Android, but because of the custom UI that phone manufacturers added on top of the stock OS.
We got three different Android devices (running 2.2, 2.3, and 4.1), and debugging for presentation, rendering, and behavioral issues was pretty painful. Two bugs that I can recall off the top of my head are:
* the "HTC Duplicate Input Bug", where the browser inserted a second <input> or <textarea> element on top of the original element in the DOM when you apply focus to a text input element and bring up the soft keyboard
* issues with heavy caching and cookie management that resulted in failed logins (depending on the user's device) and unpredictable rollout of new versions of CSS and JS
The problem with Android fragmentation is not necessarily that it's spread across the number of devices and versions; it's that the phone manufacturers have incentives to continue using legacy versions of the software (2.2-2.3x) because they have already invested time and resources into building their proprietary UI on top of them.
[1]: http://developer.android.com/resources/dashboard/platform-ve...
Just from a UI perspective I'm not sure he has addressed: ActionBarSherlock, black vs. white (or any?) Option Menu icons, portrait/landscape layouts (i.e. sideways keyboards), and multiple layout folders (3x just for tablets).
He's confident now because the app is small & easy. When you get to ~100k installs you start to encounter the niche users and when you're missing something "critical" and unique to them you'll get a lot of 1-star drive-bys...
(Also note other comments here about Color and Netflix apps.)
I don't know how to put this more polite, but if those are the only fragmentation issues he's had on Android, his applications are either fairly simple or they just don't have much users yet.
I don't have an opinion on whether it's worse on iOS (prolly not) or Windows, but it sure is a pain.
When coding a website and dealing with different browsers/capabilities/screen sizes I can test all of the different combinations on my laptop. The times when I need to test a site on windows I either get someone else to run QA on it at work or I fire up a remote solution such as http://browserstack.com. The bottom line is I CAN test all the combinations.
Now switch to Android. I'm sorry but emulators are NO EXCUSE for the real thing. I have had code fail in an emulator and then work fine on the device. The emulators are VERY slow and trying to run them on my Macbook Air (4GB RAM) is next to impossible. iOS's Simulator is 100x better. (Emulator != Simulator)
I'm sorry but I would rather write websites all day and have to test on 4 Browsers Across 2 OS's then write one more app for Android.
iOS presents is own challenges; running emulator tests for every change is difficult because the build process is opaque and the emulator only runs on Macs, which we do not use in production.
All in all, the tools that are available to mobile developers are extremely primitive compared to what server-side Java developers get, and wasting time fighting fragmentation isn't exactly helping.
ummm...what was your argument again?
That said, I don't fully agree with the OP's argument. Fragmentation is a very real pain in a lot of subtle unexpected areas (mostly UI related).
And there are a few tools you can implement to have full backwards compatibility to 2.2, probably even 2.1.
It's not that hard to do at all. I have a lot more trouble supporting IE in web development than I do all the Android versions.
Android dev provides some: http://android-developers.blogspot.com/2010/07/how-to-have-y... And I found some more: http://blog.evendanan.net/2011/04/Backward-compatibility-in-...
As Android developer you have to deal with myriad of manufacturer and community developed permutations of the OS - TouchWiz, Sense, Cyanogenmod, MIUI to name a few. If you make a widget app like us, you not only have to deal with HTC, Samsung, etc's launcher you have to deal with 3rd party launchers too - ADW, Apex, Launcher Pro, GO, etc.
How about when HTC decides to break multitasking in favor of better battery life?
http://www.theverge.com/2012/5/16/3024854/htc-one-x-multitas...
Personally, I think it's a bit of a double edged sword. A lot of the issues that make Android hard to develop good apps for make it a fun platform, ie the ability to choose whatever launcher or rom you want. That said, you're kidding yourself if you think fragmentation is not a major issue.
Anecdotal? Yes. But until it is more or less unheard of (especially for an application that "just" renders text and images), there is a fragmentation problem.
"Ice Cream Sandwich" has been available for months.
And only about 5% of phones have it.
Devs have to prioritize. Obviously, power-users are going to be up-to-date, but the vast majority of customers are probably not affected. I would imagine the customers of The Economist on Android are less likely to fit the power-user profile than other apps.
This is a statement of the fact that seems reasonable.
> Devs have to prioritize. Obviously, power-users are going to be up-to-date, but the vast majority of customers are probably not affected. I would imagine the customers of The Economist on Android are less likely to fit the power-user profile than other apps.
This is a justification I entirely agree with. It doesn't mean that there isn't a fragmentation problem that annoys customers.
I understand why this is, there was never to be doubt about it. Just because it is understandable doesn't get to the heart of my disagreement with the headline: there is a fragmentation problem.
Price of testing on multiple android devices: Thousands of dollars to purchase new phones without a contract.
It's a grand experiment with many competing designs, all striving to become the best and biggest (sounds like Osmos ;).
iPhone iterates down a closeted path. Innovation for iphone depends solely on the creativity at Apple. And while that is nothing to sneeze at, if some really left-field neato must-have innovative feature occurs, I think it's going to be found on Android first.
PCs have been doing this for decades without having the OS fragmentation problems. Why ? Because Microsoft allows OEMs to customise the experience while still allowing them the ability to upgrade the core OS.