compileSdkVersion和targetSdkVersion有什么区别?
我已经看过用Gradle编译的文档 ,但是我仍然不确定compileSdkVersion
和targetSdkVersion
之间有什么区别。
它所说的是:
compileSdkVersion
属性指定编译目标。
那么,“汇编目标”是什么?
我看到两种可能的解释方法:
-
compileSdkVersion
是构build应用程序时使用的编译器的版本,而targetSdkVersion
是“应用程序所针对的API级别” 。 (如果是这样的话,我会认为compileSdkVersion
必须大于或等于targetSdkVersion
? - 他们的意思是一样的。 “编译目标”==“应用程序所针对的API级别”
- 别的东西?
我看到这个问题之前已经被问过了,但是一个答案只是引用了文档,这是我不清楚的。
compileSdkVersion
compileSdkVersion
是应用程序编译的API版本。 这意味着您可以使用该版本的API中包含的Android APIfunction(以及所有以前的版本,显然)。 如果您尝试使用API 16function,但将compileSdkVersion
设置为15,则会出现编译错误。 如果将compileSdkVersion
设置为16,则只要应用程序的执行path不会尝试调用特定于API 16的任何API,仍然可以在API 15设备上运行该应用程序。
targetSdkVersion
targetSdkVersion
与您的应用程序如何编译或可以使用哪些API无关。 targetSdkVersion
应该表示您已经testing了您的应用程序(可能包括您所指定的版本)。 这更像是一个authentication或签署你给Android操作系统作为一个提示,它应该如何处理你的应用程序的操作系统function。
例如,正如文档所述:
例如,如果将此值设置为“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
应该被完全testing,并且小于或者等于compileSdkVersion
。
The CompileSdkVersion
是您的应用程序用于编译等的SDK平台的版本。在开发过程中(您应该始终使用最新版本)这是随您使用的API版本
你会在你的build.gradle
文件中看到这个:
targetSdkVersion:
包含您的应用程序在应用程序商店的开发过程之后发布的信息,该信息允许其TARGET the SPECIFIED version of the Android platform
。 根据您的应用程序的function,它可以定位低于当前版本的API版本。例如,即使当前版本是23,也可以定位API 18。
仔细看看这个官方的Google 页面 。
最后,有几个很好的答案 – 基本上, compiledVersion
是应用程序编译的API版本,而targetSdkVersion
表示应用程序testing的版本。
我想补充以下注意事项的答案:
-
targetSdkVersion
影响请求权限的方式 :- 如果设备运行的是Android 6.0(API级别23)或更高版本, 并且该应用的
targetSdkVersion
为23或更高,则该应用会在运行时向用户请求权限。 - 如果设备运行的是Android 5.1(API级别22) 或更低,或者应用程序的
targetSdkVersion
是22或更低,则系统要求用户在用户安装应用程序时授予权限。
- 如果设备运行的是Android 6.0(API级别23)或更高版本, 并且该应用的
-
如果
compiledVersion
高于您的应用程序的targetSdkVersion
声明的版本,系统可能会启用兼容性行为,以确保您的应用程序继续以您期望的方式工作。 ( ref ) -
随着每个新的Android版本…
-
targetSdkVersion
应该递增以匹配最新的API级别,然后在相应的平台版本上彻底testing您的应用程序 - 另一方面,
compiledVersion
不需要改变,除非你添加新的平台版本独有的function - 因此,尽pipe
targetSdkVersion
通常(最初)小于compiledVersion
,但通过targetSdkVersion > compiledVersion
可以看到一个维护良好的/已build立的应用程序并不罕见
-
在以前的答案中,我看到了许多关于compiledSdkVersion
的差异,所以我会在Android的网页上尝试澄清一下。
A – Android说的
根据https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :
select平台版本和API级别在开发应用程序时,您需要select要编译应用程序的平台版本。 通常,您应该针对应用程序可以支持的最低版本的平台编译应用程序。
所以,这将是根据Android的正确的顺序:
compiledSdkVersion = minSdkVersion <= targetSdkVersion
B – 别人也说什么
有些人更喜欢总是使用可用的最高编译的SkdVersion。 这是因为他们将依靠代码提示来检查他们是否使用了比minSdkVersion更新的API特性,因此要么将代码更改为不使用它们,要么在运行时检查用户API版本,以有条件地使用旧版API的回退。
代码中还会显示有关不推荐使用的提示,让您知道在较新的API级别中已弃用某些内容,因此,如果您愿意,可以作出相应的反应。
所以,这将是正确的顺序:
minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)
该怎么办?
这取决于你和你的应用程序。
如果您计划在运行时根据用户的API级别提供不同的APIfunction,请使用选项B.您将获得有关在编码时使用的function的提示。 只要确保从不使用比minSdkVersion更新的APIfunction,而不必在运行时检查用户API级别,否则您的应用程序将崩溃。 这种方法也有利于学习什么是新的,什么是旧的,而编码。
如果您已经知道新旧版本,并且您正在开发一次性应用程序(肯定不会更新),或者您确定不会有条件地提供新的APIfunction,那么请使用选项A.您不会感到困扰不build议使用提示,即使您想要这样做,您也将永远无法使用更新的APIfunction。
- 有没有什么办法在Android获得设备的虚拟键盘的高度
- 如何在xCode 4中添加基本的SDK for 10.5
- 如何使用Windows SDK 7.1从命令行运行msbuild?
- DrEdit的Google Drive HTTP 403“访问未configuration”错误
- 错误:ConnectionResult {statusCode = INTERNAL_ERROR,resolution = null}
- “未安装以下SDK组件:sys-img-x86-addon-google_apis-google-22和addon-google_apis-google-22”
- 为什么我们需要添加<div id =“fb-root”> </ div>
- 如何将.plist文件添加到XCode中的所有目标?
- Android ADT错误,dx.jar没有从SDK文件夹中加载