compileSdkVersion和targetSdkVersion有什么区别?
我查看了使用Gradle构建的文档,但是我仍然不确定compileSdkVersion
和targetSdkVersion
之间有什么区别。
它所说的是:
compileSdkVersion
属性指定编译目标。
那么,“编译目标”是什么?
我看到两种可能的解释方法:
compileSdkVersion
是构建应用程序时使用的编译器的版本,而targetSdkVersion
是“应用程序所针对的API级别”。 (如果是这种情况,我会假设compileSdkVersion
必须大于或等于targetSdkVersion
? 我看到这个问题之前已经被问过了,但是一个答案只是引用了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
。
上一篇: What is the difference between compileSdkVersion and targetSdkVersion?
下一篇: parent in android