Android has been picking up quite a bit of steam lately as the next biggest threat to the iPhone. There is no doubt that there are some great Android phones out there and many more on the way. However, as a major platform for developers I see a bumpy roads ahead and here are my personal thoughts.
Because the Android OS is open source any handset manufacture can take it and do what ever they want to it. In fact they almost have to in order to complete with the other manufactures to make their phone stand out from the rest. They will completely change the way the UI works, they will add additional features that are not available in the base Android OS, they will add different calendaring, contacts, email, different screen resolutions, etc. and here is where things go very bad.
Once Google releases an update to Android it does not mean that every phone running Android can immediately download the latest and greatest update. Some phones may be able too but many won't and I predict it will only get worse. EnterpriseMobileToday is just one place where you can read about these delays:
www.enterprisemobiletoday.com/news/article.php/3873376.
What happens if the Android phone you love was not a big seller for the carrier? My guess is that you won't be seeing many Android updates for it so you will be forced to buy a new phone and when you do let's hope all of your Android application will run on the new model.
With the iPhone when an update is available it is available for every iPhone at the same time - yes their servers may be overwhelmed but it is available.
As a developer it is quickly going to be difficult to keep up with all the different Android variants. For example, what happens when a manufacture modifies Android to provide a totally new swipe gesture interface? I can write my application to use their custom APIs but then my application will only run on that one Android model. I could disable the features by checking the model at runtime but that would mean I would have to code in a default gesture interface as well. Then how do I deal with all of the custom APIs from all of the different handsets? I will soon be writing more code to deal with the different models at runtime than the actual application code itself.
Yes, Apple has the same problems as they move from one iPhone OS version to the next (OpenGL ES being one of them). The difference is that it is an evolution step from one manufacture rather than a shotgun effect coming from many handsets manufactures at once each trying to out do each other.
Just look at the problems with Linux as a desktop replacement - there are just too many distributions for any one to make a serious run against Microsoft or even Mac OS. Then think about all of the Android Linux handsets that are going to be coming out each month. With each model being based off a different fork of the Android source code. There will soon be enough forks to feed all of the homeless and unfortunately this is not a good thing.
Android, will most likely win in total number of units sold over the iPhone or even Windows 7 phones but let's compare Apples to Apples (i know) and compare a specific Android Handset model against the iPhone and see what the numbers really come out to be.
With that said, I am a fan of both Android and Java. I like the open source concept. I think there are going to be some amazing Android phones, but there are going to be some real challenges ahead to make it become a leading developer platform at the level of iPhone and the soon to be released Windows 7 platform.
I could be totally wrong on this and that would be ok but only time will tell.
Good luck Android!
P.S. I don't plan on moving off of my iPhone 3GS any time soon (except for maybe the next iPhone)