Android: write once, debug on every handset thats out there
Well, "write once, debug everywhere" was the dismissive slogan by Java haters to argue against the virtues of a VM approach. Over the years things have evolved and got probably better. I am not a big Java developer but I know my way around and that is enough for getting quickly demos cobbled together. Now with Android getting more and more adopted and figuratively into the pockets of a lot of users we are back with the mess that is constituted by the abstraction between the developer and the hardware.
Android has on most handsets a quite good Linux userland - you can't see it by you can "dlopen" it if you feel fancy. But its cluttered (between handsets) and I guess every handset developer does its own tweaking. One of my biggest headaches since Android 1.x is the camera capture. Numerous other developer are having the same problem, it seems Google knows about it and introduced kindly enough a "hidden" API. Great, well kind of. Beyond that, there are a few little nasty surprises which show the danger of abstracting away control over hardware. Look at the Camera.Parameters which can be used to set the preview resolution on most handsets to a more appropriate format. Some handsets just bail out on that, and they do so deep down on the JNI level, making the camera unresponsive (battery in-out-level). Consequently, you need to check on what handset you are doing what - well, I just want to set the resolution. In hindsight, yes, I like Android but I deeply feel the current APIs around the hardware are flawed to virtually be unusable. Dear Google, please don't let some incapable programmers guide your decisions on API design. We want power and flexibility and if that involves complexity, tough!
[Update] Well, additionally how about introducing a certification process for Android. Sorry, it sounds olden, tired, even backwards. But if I develop against a certain API level in Android I expect every darn single handset to do exactly the same.