The current distribution of Android versions across devices is found in:
http://developer.android.com/about/dashboards/index.html
I’m about to create an app (which isn’t a game) and I’m wondering whether I should create three different versions of it: one for ICS and higher, one for Froyo, Gingerbread and Honeycomb, and one for Eclair and Donut. I feel that this is a very bad idea but I want to make the most out of the newer OSes without having to sacrifice compatibility with the lower Android versions, for which there is perhaps a simpler approach, say, for the UI.
Any thoughts? How would seasoned Android developers approach this?
You can use the support library, which allows you to use ICS features like fragments on earlier Android platforms.
You should consider which platforms are worth supporting. For instance, current data suggests that Donut represents about 0.5% of the current market.
If you’re going to make the app available through Google Play, it supports multiple .apk files for a single app, targeting different api levels. This does create a bit of a maintenance headache for you, though, and I would recommend against it. Also, other markets (like Amazon’s Appstore) don’t support multiple .apk files per application; you’d have to publish as two separate applications.
You should also read the docs on supporting different platform versions. It provides guidance on this topic.