In google play you can upload multiple apk's, so that you can have different versions to target different platforms (perhaps you have a version with newer sdk features, but you keep another version built for older phones w/ different features)... you could have two, with the same code: one that targets below up to 3.x, and the other that targets above... you'll then have to maintain two apk's with the same code, of course. Also I don't think it prevents them from side-loading, it just filters it out of their results on the play store app.
Suppose you want to block only 3.1, and you support from 1.5+ up to 4.1
For one apk, you'll have:
<uses-sdk android:minSdkVersion="3"
android:targetSdkVersion="16"
android:maxSdkVersion="10" />
And for the other:
<uses-sdk android:minSdkVersion="12"
android:targetSdkVersion="16"
android:maxSdkVersion="16" />
Of course, adjust the targets and bounds as they make sense. It might be grumpy if max < target, I'm not sure. And keep in mind target sdk compatibilities..
AS a follow up, here's some insight from the documentation on multiple apk's:
API level
This is based on your manifest file's element. You can use both the android:minSdkVersion and android:maxSdkVersion attributes to specify support for different API levels.
For example, you can publish your application with one APK that supports API levels 4 - 7 (Android 1.6 - 2.1)—using only APIs available since API level 4 or lower—and another APK that supports API levels 8 and above (Android 2.2+)—using APIs available since API level 8 or lower.
Note:
If you use this characteristic as the factor to distinguish multiple APKs, then the APK with a higher android:minSdkVersion value must have a higher android:versionCode value. This is also true if two APKs overlap their device support based on a different supported filter. This ensures that when a device receives a system update, Google Play can offer the user an update for your application (because updates are based on an increase in the app version code). This requirement is described further in the section below about Rules for multiple APKs.
You should avoid using android:maxSdkVersion in general, because as long as you've properly developed your application with public APIs, it is always compatible with future versions of Android. If you want to publish a different APK for higher API levels, you still do not need to specify the maximum version, because if the android:minSdkVersion is "4" in one APK and "8" in another, devices that support API level 8 or higher will always receive the second APK (because it's version code is higher, as per the previous note).
http://developer.android.com/guide/google/play/publishing/multiple-apks.html