当前位置: 首页 > 知识库问答 >
问题:

compileSdkVersion和TargetSDKVersion之间有什么区别?

翟宾实
2023-03-14

我已经查看了使用Gradle进行构建的文档,但我仍然不确定CompilesDKVersionTargetSDKVersion之间有什么区别。

上面写的只是:

compilesdkversion属性指定编译目标。

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

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

  1. compilesdkversion是构建应用程序时使用的编译器的版本,而targetsdkversion是“应用程序所针对的API级别”。(如果是这种情况,我假定compilesdkversion必须大于或等于targetsdkversion
  2. 他们的意思是一样的。“Compilation Target”==“应用程序所针对的API级别”
  3. 其他吗?

我看到这个问题以前有人问过,但一个答案只是引用了文件,这是我不清楚的地方。

共有3个答案

齐昊苍
2023-03-14

compilesdkversion应该是最新的稳定版本。targetsdkversion应经过充分测试,并且小于或等于compilesdkversion

程钧
2023-03-14

作为oneliner指南:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

理想情况下:

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

从伊恩·莱克的这篇伟大的文章中读到更多

耿招
2023-03-14

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

targetsdkversion与应用程序的编译方式或可以使用的API无关。targetsdkversion应该表明您已经在指定的版本上(可能达到并包括)测试了应用程序。这更像是你给Android操作系统的一个认证或签核,暗示它应该如何处理你的应用程序的操作系统功能

例如,如文档所述:

例如,将此值设置为“11”或更高,系统就可以在Android 3.0或更高版本上运行时将一个新的默认主题(Holo)应用到你的app上...

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

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

 类似资料:
  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • hiii 我是机器人开发中的新手。谁能告诉我什么是编译SdkVersion和buildTollsVersion在构建工具版本中定义。 这是正确的定义吗。。?如果不是,那会导致什么。。? 请帮忙谢谢

  • 问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中

  • 问题内容: 我刚开始使用Spring。我遇到了很多教程。我看到使用更多的例子比。我查看了Spring文档,但无法弄清楚使用其中一个的好处。有人可以提供一些解释吗? 问题答案: 是的便捷子类。 JavaDoc描述了一些添加的属性,这些属性在某些情况下可能有用: UrlBasedViewResolver的便利子类,它支持InternalResourceView(即Servlet和JSP)以及诸如Jst

  • 问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。

  • 问题内容: 以下哪个更好? 要么 我知道的唯一区别是,当“ a”为null时,第一个返回false,而第二个抛出异常。除此之外,它们是否总是给出相同的结果? 问题答案: 使用时,你需要B在编译时知道类。使用时可以是动态的,并且可以在运行时更改。