With Google having recently shown off the first Android powered device, there has been much press attention over the open source operating system. Given the problems some iPhone developers are having in writing applications for the Apple device, brought about by a restrictive NDA which prohibits them discussing code and therefore collaboratively solving problems, is Androind going to be a more attractive system for app developers? And if it is, does that mean it’s going to be an iPhone-killer? In a word, no. Here’s why:
Android is already vey late, Google messed up by keeping developers hanging on. They went some way to trying to repair that, but a lot of damage was already done. The iPhone platform has been around for a year, and the official SDK for several months, giving it a head start.
But the real problem is going to be the handsets. Actually the whole thing is a problem. Android is open source, which means anyone can use it, and anyone (including handset manufacturers) can make their own changes.
So on the one hand you have the iPhone, running Mac OSX (well, iPhone OS which is essentially the same thing). Every copy of iPhone OS is more or less the same (at least if you consider version 2 to be iPhone OS and discount version 1 which is now running on only a minority of devices).
iPhone OS currently runs on only four hardware devices, iPhone 1st generation, iPhone 2n generation (3G), iPod Touch 1st generation, and iPod Touch 2nd generation. Between those, there are only four differences in available hardware: camera (not present in either iPod), GPS (not present in iPhone 1 or either iPod, although location aware services are still supported in both through either wifi interrogation, or cell tower triangulation), phone / cellular network access (iPhone only), and 3G data (only present in iPhone 3g). You could also argue a case for the vibrate function which is iPhone only, but this is such a phone-centric component it hardly warrants a mention.
So if you want to write an application for iPhone OS, it’s relatively easy because you know exactly what you’re dealing with. For example, if you need to access a picture, the OS does all the heavy lifting for you – it gives you an easy way to check if you have a camera available. If you have, it lets you access it in a standard way, if not you get access to the built in Photos app. Either way, you know you will get access to pictures in a standard way.
If you want location based services, well you get access on all the hardware. If you happen to find yourself running on an iPhone 3G, the operating system will provide GPS data so you’re location stuff will be more accurate, but it will still work on the other hardware.
Everything else is the same across all the devices – same screen size, resolution, languages, keyboards, accelerometers, audio capabilities, etc etc.
Compare that to an Android device. Just on the hardware side alone, you could be running on any one of potentially hundreds of difference devices. You don’t know what screen size you have – it could be large like the iPhone, could be tiny like a Nokia flip phone. So already, how do you even start to design a user interface when you don’t know how much space you have to do it in?
Then you don’t know how many colours you can support, or if the device has a keyboard or not. It might have a touchscreen, or it might not. It might have a joystick or d-pad, or it might not. So how do you let users interact with your application if you don’t know all of the above?
To continue…the device might be running in English, or French, or 100 different languages. You don’t know if there is a camera or not, and if there is, what kind of camera? What resolution? Does it do video? The same goes for GPS. And then what kind of sound capability is there? The list goes on.
So just in hardware there are thousands of potential combinations, and you’re never ever going to be able to test for all of them before you release your application, unless you buy every Android powered device ever to be released in the future.
But it gets worse, because remember the handset manufacturer can also change Andoid itself! So you might write code that uses some “standard” part of the operating system, and then Sony release a phone that doesn’t actually have that part, because they removed it, or replaced it with something they wrote themselves. So your application crashes.
Assuming you somehow manage to write an application that can adapt itself to every possible hardware configuration, and take into account the fact it’s running on an operating system that might be the same one you developed it for, or might not be, you then have to distribute it in the Google App store.
Unlike the iTunes App Store which vets all software before putting it on sale, ensuring a minimum level of quality, in the Google store, anything goes. Which means it will be swamped with useless apps (many of which won’t work for reasons previously discussed). Users will download one or two apps, see they don’t work, and give up. Chances are they’ll never discover your work of art among all the junk.
Apart from that, Android is a good idea. And the mobile market needs it, because Nokia bought Symbian and will likely kill it, and Windows Mobile is just horrible. So Android will stimulate some competition. And if Google see out their vision, it will end up running DVD players, washing machines, and who knows what else. So it’s a useful project.
But for writing apps and getting them distrubuted, iPhone OS is light years ahead. It’s also got Apple’s consumer marketing know-how behind it. Android is too techie, and will take much longer to catch on with the general public. After all, apart from iPhone users, who buys a phone based on which OS it runs?