Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of both target API and minSDK

Tags:

android

Can somebody explain to me the difference between the project target and the minimum SDK? I want my app to run on Donut devices, and the APK I built with a target of 7 worked just fine. When I set an explicit minimum SDK in the Android manifest of 4 (1.6) the compiler bitched at me that the target exceeded the minimum. I reset the target to 4 only to see what would happen, and now I've got compiler errors. An example is the START_NOT_STICKY constant in android.app.Service. It doesn't exist in API level 4, but does exist in API level 7. This is also the case with Service.onStartCommand(). In API level 7 you need to explicity override this method, whereas in API level 4 you don't.

So why does the app work in 1.6 despite all this? How could 1.6 know how to use SERVICE_NOT_STICKY when the associated API level doesn't know about it?

like image 240
Scott Ferguson Avatar asked Oct 15 '22 06:10

Scott Ferguson


1 Answers

If you want to use some new fancy feature, but also want to maintain backwards compatibility that's where the targetSdkVersion and minSdkVersion come into play.

To maintain backward compatibility you need to treat every new API from above the minSdkVersion with care. Ie double check that you have access to them by either utilizing reflection or using the Build.VERSION.SDK_INT. If you don't do that, your application will crash and burn because it can't find the API's you're trying to use.

You also want to read every line of documentation regarding changed APIs (ie the Service.onStartCommand(..)) so that you could handle every piece of data it gets correctly and in a backwards compatible way.

Regarding the constants, they are most likely compiled into your code as Strings/integers and when the older version gets an unknown it just ignores it. However that's a theory, so you ought to test it out before using it extensively.

Also, as far as I know the system doesn't check the minSdkVersion nor targetSdkVersion. Only the Android Market does that. So if you get a hold of some applications that aren't supposed to run on your device and you still try to use them, again crash and burn.

like image 66
Mart Roosmaa Avatar answered Nov 15 '22 08:11

Mart Roosmaa