compileSdkVersion和targetSdkVersion有什么区别?

我查看了使用Gradle构建的文档,但是我仍然不确定compileSdkVersiontargetSdkVersion之间有什么区别。

它所说的是:

compileSdkVersion属性指定编译目标。

那么,“编译目标”是什么?

我看到两种可能的解释方法:

  • compileSdkVersion是构建应用程序时使用的编译器的版本,而targetSdkVersion是“应用程序所针对的API级别”。 (如果是这种情况,我会假设compileSdkVersion必须大于或等于targetSdkVersion
  • 他们的意思是一样的。 “编译目标”==“应用程序所针对的API级别”
  • 还有别的吗?
  • 我看到这个问题之前已经被问过了,但是一个答案只是引用了doc,这是我不清楚的。


    compileSdkVersion

    compileSdkVersion是应用程序编译的API版本。 这意味着您可以使用该版本API中包含的Android API功能(以及所有以前的版本,显然)。 如果您尝试使用API​​ 16功能,但将compileSdkVersion设置为15,则会出现编译错误。 如果您将compileSdkVersion设置为16,只要应用程序的执行路径不会尝试调用特定于API 16的任何API,您仍然可以在API 15设备上运行该应用程序。

    targetSdkVersion

    targetSdkVersion与您的应用程序的编译方式或您可以使用的API无关。 targetSdkVersion应该表明您已经测试了您的应用程序(大概最多并且包括)您指定的版本。 这更像是一个认证或签名,您将Android操作系统作为提示,告诉您应该如何根据操作系统功能处理您的应用。

    例如,正如文档所述:

    例如,如果将此值设置为“11”或更高,则允许系统在Android 3.0或更高版本上运行时将新的默认主题(Holo)应用于您的应用程序...

    Android OS 在运行时可能会根据此值更改应用程序的风格化或以其他方式在OS上下文中执行的方式。 还有一些其他已知的例子会受到这个值的影响,而且这个列表可能只会随着时间的推移而增加。

    实际上,大多数应用程序都希望将targetSdkVersion设置为API的最新发布版本。 这将确保您的应用在最新的Android设备上看起来尽可能好。 如果您未指定targetSdkVersion ,则默认为minSdkVersion


    作为一个线上指南:

    minSdkVersion <= targetSdkVersion <= compileSdkVersion
    

    理想的情况是:

    minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
    

    从Ian Lake的这篇精彩文章中了解更多


    compileSdkVersion应该是最新的稳定版本。 targetSdkVersion应该完全测试,并且小于或等于compileSdkVersion

    链接地址: http://www.djcxy.com/p/85349.html

    上一篇: What is the difference between compileSdkVersion and targetSdkVersion?

    下一篇: parent in android