我已经看了用Gradle构建的文档,但我仍然不确定compileSdkVersion和targetSdkVersion之间的区别是什么。

它只是说:

The `compileSdkVersion` property specifies the compilation target.

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

我认为有两种可能的解释:

compileSdkVersion是构建应用程序时使用的编译器版本,而targetSdkVersion是“应用程序目标的API级别”。(如果是这种情况,我假设compileSdkVersion必须大于或等于targetSdkVersion? 它们是同一个意思。"编译目标" == "应用程序目标的API级别" 别的吗?

我知道这个问题以前被问过,但唯一的答案只是引用了文档,这对我来说是不清楚的。


当前回答

compileSdkVersion应该是最新的稳定版本。 targetSdkVersion应该经过充分测试,小于或等于compileSdkVersion。

其他回答

compileSdkVersion

compileSdkVersion是应用程序编译时使用的API版本。这意味着你可以使用该版本的API中包含的Android API特性(当然也包括之前的所有版本)。如果您尝试使用API 16特性,但将compileSdkVersion设置为15,则会得到编译错误。如果你将compileSdkVersion设置为16,你仍然可以在API 15设备上运行应用程序,只要你的应用程序的执行路径不试图调用任何特定于API 16的API。

targetSdkVersion

targetSdkVersion与你的应用程序如何编译或你可以利用什么api无关。targetSdkVersion应该表明你已经在你指定的版本上测试了你的应用程序。这更像是你给Android操作系统的一个认证或签名,提示它应该如何根据操作系统的功能来处理你的应用。

例如,如文档所述:

例如,将这个值设置为“11”或更高,允许系统在Android 3.0或更高版本上运行时应用一个新的默认主题(Holo)…

Android操作系统,在运行时,可能会改变你的应用程序的风格化方式,或者在操作系统的上下文中基于这个值执行。还有一些其他已知的例子受到这个值的影响,而且这个列表可能只会随着时间的推移而增加。

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

compileSdkVersion应该是最新的稳定版本。 targetSdkVersion应该经过充分测试,小于或等于compileSdkVersion。

姗姗来迟。上面有几个很好的答案——基本上,compileSdkVersion是应用程序编译API的版本,而targetSdkVersion表示应用程序测试的版本。

我想补充以下几点:

targetSdkVersion影响权限请求的方式:

如果设备运行Android 6.0 (API级别23)或更高,并且应用程序的targetSdkVersion是23或更高,应用程序在运行时向用户请求权限。 如果设备运行的是Android 5.1 (API级别22)或更低,或者应用程序的targetSdkVersion是22或更低,系统会在用户安装应用程序时要求用户授予权限。

如果compileSdkVersion高于你的应用程序的targetSdkVersion声明的版本,系统可能启用兼容性行为,以确保你的应用程序继续以你期望的方式工作。(ref) 随着每一个新的Android版本……

targetSdkVersion应该增加以匹配最新的API级别,然后在相应的平台版本上彻底测试应用程序 另一方面,compileSdkVersion不需要更改,除非您要添加新平台版本特有的特性 因此,虽然targetSdkVersion通常(最初)小于compileSdkVersion,但使用targetSdkVersion > compileSdkVersion来维护/建立良好的应用程序并不罕见

CompileSdkVersion是你的应用程序在开发过程中用于编译等的SDK平台的版本(你应该总是使用最新的)。这是与你正在使用的API版本一起提供的

您将在构建中看到这一点。gradle文件:

targetSdkVersion:包含应用程序在开发过程到应用商店后附带的信息,允许它瞄准Android平台的指定版本。根据应用程序的功能,它可以针对低于当前的API版本。例如,即使当前版本是23,您也可以以API 18为目标。

好好看看这个谷歌官方页面。

在Visual Studio 2017(15.8.5)中,Android项目属性的应用程序设置将它们组合在一起: