我已经看了用Gradle构建的文档,但我仍然不确定compileSdkVersion和targetSdkVersion之间的区别是什么。
它只是说:
The `compileSdkVersion` property specifies the compilation target.
那么,什么是“编译目标”呢?
我认为有两种可能的解释:
compileSdkVersion是构建应用程序时使用的编译器版本,而targetSdkVersion是“应用程序目标的API级别”。(如果是这种情况,我假设compileSdkVersion必须大于或等于targetSdkVersion?
它们是同一个意思。"编译目标" == "应用程序目标的API级别"
别的吗?
我知道这个问题以前被问过,但唯一的答案只是引用了文档,这对我来说是不清楚的。
我在之前的回答中看到了很多关于compiledSdkVersion的差异,所以我将在这里尝试澄清一点,跟随android的网页。
A - Android说什么
根据https://developer.android.com/guide/topics/manifest/uses-sdk-element.html
开发时选择平台版本和API级别
您的应用程序,您将需要选择平台版本
您将编译应用程序。一般来说,您应该编译
您的应用程序针对平台的最低版本
您的应用程序可以支持的。
所以,根据Android,这是正确的顺序:
compiledSdkVersion = minSdkVersion <= targetSdkVersion
B -别人也这么说
有些人喜欢总是使用可用的最高编译skdversion。这是因为他们将依赖代码提示来检查他们是否使用了比minSdkVersion更新的API特性,因此要么更改代码以不使用它们,要么在运行时检查用户API版本,有条件地使用它们与旧API版本的回退。
代码中还会出现关于已弃用的用法的提示,让您知道在较新的API级别中某些东西已弃用,因此如果您愿意,可以做出相应的反应。
所以,根据其他人的说法,这是正确的顺序:
minSdkVersion <= targetSdkVersion <= compiledSdkVersion(最高可能)
怎么办呢?
这取决于你和你的应用程序。
如果您计划在运行时根据用户的API级别提供不同的API特性,请使用选项b。您将在编码时获得有关您使用的特性的提示。只要确保你没有在运行时检查用户API级别就不使用比minSdkVersion更新的API特性,否则你的应用程序会崩溃。这种方法还有一个好处,就是在编写代码的过程中学习新旧事物。
如果你已经知道什么是新的,什么是旧的,你正在开发一个一次性的应用程序,肯定永远不会更新,或者你确定你不会有条件地提供新的API功能,那么使用选项a。你不会被废弃的提示所困扰,你永远不能使用更新的API功能,即使你想这么做。
姗姗来迟。上面有几个很好的答案——基本上,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来维护/建立良好的应用程序并不罕见
快速总结:
对于minSDKversion,请参阅twitter handle中的最新条目:https://twitter.com/minSdkVersion
TargetSDKversion:参见twitter handle: https://twitter.com/targtSdkVersion中的最新条目
或者使用最新的API级别,详见devel https://developer.android.com/guide/topics/manifest/uses-sdk-element.html
编译的版本:
使它与TargetSDKversion相同
maxSdkVersion:
来自Android的建议是不要设置这个,因为你不想限制你的应用程序不能在未来的Android版本上运行