A topic that often comes up when I am speaking to clients is Android fragmentation. The press seem to like dramatic articles such as "Android is a mess, say developers" without any sort of technical analysis of why it’s a mess. Also, it’s often perceived to be a mess because some developers and designers don’t know what they are doing.
Some nieve developers use the latest SDK to develop apps when they should be using the earliest SDK (usually Android 1.5 or 1.6) that supports the functionality they require. Only use the latest SDKs if you really need the functionality within them otherwise, yes, you will get problems with fragmentation.
Some nieve designers aren’t experienced at creating designs that are resolution independent and sensitive to changing orientation. Also, they often don’t realise the real cost and fragmentation complexities of highly graphically ’skinned’ apps as opposed to less involved UIs that tweak the default phone UI scheme and scale automatically.
However, one real fragmentation challenge I have come across with Android is supporting the hardware keys on different devices. End users expect to be able to intuitively use the keys they have available, whether a few keys on a keyboard-less device or some particular navigation keys on full hardware keyboard.