When J2ME appeared, we were all told that it would allow to create Java applications that would run on any capable phone.
Nice utopia, but anybody that has either worked developing or alongside J2ME developers knows that this is, apart from a funny joke, quite distant from reality.
J2ME, if anything, can be said to be "code one, port everywhere". With the epic mistake of Sun of letting manufacturers implement their own version of J2ME Virtual Machines, the mess that we have currently gives more headaches that solves problems, but still there are quite a lot of non-smartphones in the market so support and application development has to be still present.
False capabilities reporting, all kind of errors, problems and bugs on VM implementations lead to almost 100% of the cases leading to a pack of "builds" for specific devices (or if you're lucky, family of devices of a brand), each with different fixes and/or hacks to bypass the problems.
So, in conclusion we have a nice idea gone terribly wrong and causing a lot of development problems.
Leaving apart other major PDA types (iPhone, Windows Mobile and BlackBerry), Google probably said "Hey, we can do better! Let's include normal Java and provide better SDKs, more guidelines, an AppStore like Marketplace but free, and everything will go nice".
And yes, the idea is ok, in fact Google is pumping SDKs at quite a fast pace (although they are more related to special launchs like Google Maps Navigation/Motorola Droid or the Nexus One than to the size of changes and new features).
Android itself is more than decent. IMHO is after the iPhone the best smartphone choice, better than a Blackberry and way better than Windows Mobile (I've been a WM user since its 2000 PDAs), the market has a lot of apps...
But I see two major problems:
The first one, Google itself noticed it, and is one of the reasons why Nexus One exists: Pushing SDKs is nice, but if the OS version pushing depends on the Operator, your screwed. In Spain, my HTC Magic runs Android 1.6 because Vodafone rolled the update, but HTC Hero is stuck on 1.5 because Orange hasn't pushed 1.6 (says will push 2.0 but we'll see).
Nexus One will be able to have direct updates, so problem solved, but at the same time google is now a competitor of the manufacturers and operators. The same problem happens with any Windows Mobile device, you usually get stuck with the OS version it has forever. Apple did it correctly because they only build a single range of models, so they control their OS updates.
And the second problem, is the falacy of Java pure multi-platform, projected on Android.
At work, we have one specific device that does not render correctly all transparent pngs on WebKit. Why does it happen, if it's the same browser everywhere? Why some devices throw errors when others work perfectly with the same code? Why Google didn't thought about multiple resolutions at first, and then launched a device with a crappier, lower resolution than "the standard" after many apps are out?
Those two things, and some stupid limitations (the browser doesn't allows HTML file upload controls, but if you install Opera Mini under Android, it is able to use them...) are making me wonder if really Android is so platform independent, or if we're going the way of a "cooler an better" J2ME version 2.
If you have an Android phone with some apps installed, you will probably notice this in a subtle way: almost weekly updates on quite a lot of apps, with update logs like "added multiple resolutions support" and then "fixed a few bugs", "fixed a problem with xxxxx device", "updated for the nth time to support Android 2.1" (isn't it backwards compatible?)...
I wish I'm wrong...