Can someone explain fragmentation?
From logical point of view if you create an app with SDK 1.5 it should run on devices with OS version 1.5 and higher. But reality is a bit different.

The same application that works on Samsung device with 1.5 may not work on HTC with the same os version and vice versa. Also there is no 100% guarantee that it will work on other devices with newer OS versions.

Why?

There is no strict standard on hardware/software implementation among all Android manufacturers. Every manufacturer makes his own device and makes his own version of Android OS for the device which complies to the relevant SDK version, but has some additions/differences.

And these differences lead to the fragmentation.