I woke up this morning to an article in my twitter feed titled Fragmentation is a bad excuse. Here’s a follow up with my views on Android fragmentation as a developer who has put food on the table for over two years by doing nothing but Android development work.
Yes, Android is fragmented based on screen size, hardware specs and OS versions but it’s not a huge problem like a lot of people say it is. On the contrary it’s a feature of the platform. Probably the most important feature responsible for the success of Android.
Android was built from the ground up to be compatible with multiple screen sizes and hardware specs. Because of this we now have the luxury of being able to buy an Android device suited to our specific needs. It doesn’t matter if you prefer a large vs a small screen, a hardware keyboard vs software input, a 1Ghz+ quadcore vs a 600Mhz single core, a device from an A brand vs a Chinese copy or maybe you just want the best available phone for you specific budget. There will be a device available for your needs. This is only possible due to the so called “fragmentation”.
Version fragmentation
If I got a penny for every time someone says “but Android 4.0 only runs on 0.x percent of devices”, I would be rich by now. It’s true that manufacturers are quite slow in adopting new Android versions for new and existing devices. But as with hardware fragmentation, this is not a big deal. As of march 2012, 92% of devices are running Android 2.2 (Froyo) and higher. The Froyo feature set is a really good base line for most of the applications. I challenge you to find a new feature in higher versions that you really need to have in a general purpose app. (and is not already in the compatibility libraries)
Developer tools
Also for developers the situation isn’t that bad. If you have spent at least 5 minutes on the Android developer site you should have noticed that the SDK is full of tools to help apps deal with all these different configurations.
- Developers can provide different graphics for different screen sizes
- There is an emulator and UI builder that can emulate any Android version, screen resolution and pixel density combo
- RelativeLayout component to scale your layouts
- The ability to override layouts for specific configurations (for example to rearrange or remove buttons when screen space is limited)
- Compatibility libraries that bring important new features to older versions
- The ability to call new api methods while remaining compatible with older versions
- and more
Games
There is one area where fragmentation leads to some problems and that is game development. Due to different hardware specs in the CPU/GPU department developing games for Android can be challenging. For example some shaders are not supported by hardware type A, are not working at all on type B or have inconsistent behavior on type C and D. But this behavior is not new. Windows game developers have had these problems for over 10 years and managed to deal with it.
With all that said, if you’re not a game developer, fragmentation shouldn’t be an excuse for not writing Android apps.
If you’re a consumer, you should be glad that you have the ability to choose a device that tailors to your specific needs and aren’t forced onto one configuration that fits “most people”.
If you’re one of those people saying “Android sucks because it is fragmented” or “Android 4.0 runs on 0.x percent of devices” I congratulate you on reaching the end of this post and hope that you learned something today.
You should follow me on twitter here