If you had a chance to go through the Google Android documentation you will have noticed a very interesting thing: a lot of the most interesting APIs are optional.
Having a look at this page will show you the following list of optional APIs:
- Location-Based services
- Media APIs
- 3D Graphics with OpenGL
- Low-Level Hardware Access
If you have worked on some projects involving JavaME you will immediately understand where is the problem: fragmentation.
These are really the most interesting APIs for creaeting compelling applications. If you leave the choice to hardware manufacturer to implement or not an APIs chanches are that they will not implement it. This is fact that I verified on my own in the last years.
If Google wants to win against advanced Operating Systems like Symbian or against JavaME they had to make some of these APIs mandatory. I think that Media APIs, 3D Graphics with OpenGL and Low-Level hardware access are absolutely needed for each of these devices.
We need to remember that this OS s targeted to run on high level hardware with all the capability to support these APIs. There is actually no need to leave space to hardware manfacturer for not doing this, at least at this point in time.
According to my opinion Google had to offer one single platform with no optional stuff. I think that was the right way to approach the problem in order to be successful.
Why do I blog this? Fragmentation is an headache for every single mobile application developer and it seems that the very same story is going to be told on Android.
I think that you have struck at the Achilles heel of Android. Developers will only have access to these optional APIs if they certify their apps with the carriers. In other words, the apps must be approved and signed by the carrier. This is not so very different than the current Java ME situation.
Without the optional APIs, Android is only marginally better than a CDC/Foundation Profile enabled device. And marginal is not good enough when Android has no market share and no device.