It frustrates me when people keep repeating the bold part. That is completely untrue. You don't have to run into fragmentation. This is the basic architecture of android:
(source
http://developer.android.com/guide/basics/what-is-android.html)
Read
this. The kernel layer provides abstraction between the hardware and the rest of the software stack, in other words, applications SHOULD NOT need to know what type of RAM, flash, camera, cpu, etc they run on. All they should care about is if a certain service is available and act accordingly when it is not available.
Let's use windows as an example again. It's capable of running on various chipsets and use a variety of devices. How is that possible? The answer is simple, a hardware abstraction layer. MsPaint doesn't care what monitor, video card, etc is used to display to the screen.