【问题标题】:SDK Version Specifications in EclipseEclipse 中的 SDK 版本规范
【发布时间】:2018-01-18 20:22:26
【问题描述】:

我是一位使用 Eclipse 的经验丰富的 Android 开发人员,但有一件事仍然让我感到困惑。即SDK版本规范。特别是,我发现有几个地方指定了 SDK 版本:

  1. 项目属性:Android:项目构建目标
  2. 清单:minSdkVersion
  3. 清单:targetSdkVersion
  4. 清单:maxSdkVersion

以下是我对用法的猜测(可能是错误的):

项目属性:项目构建类型
好的,看起来相当简单。我相信这指定了要使用的 API“库”。

清单:minSdkVersion
我的猜测是,这是检查所用方法的最低级别(如上所述)。好的,但似乎多余。如果我使用不受支持的方法,编译器不会对我咆哮吗?

清单:targetSdkVersion
想不通这个如果我只调用支持的方法,这个设置还有什么作用?

清单:maxSdkVersion
更神秘。为什么要限制最高版本?它们不是向后兼容吗?

官方文档对这些设置的功能相当稀疏。谁能给我一些见解?

【问题讨论】:

标签: android eclipse sdk manifest


【解决方案1】:

项目属性:项目构建类型 - 是的,这将获取 android.jar 以及构建工具版本。

Manifest: minSdkVersion - 这不仅用于编译目的,还被 google play 用于过滤应用程序。 其次,如果您有任何功能在某个版本以下不可用但您的应用程序需要。

Manifest: targetSdkVersion - 随着 Android 随着每个新版本的发展,某些行为甚至外观可能会发生变化。但是,如果平台的 API 级别高于您应用的 targetSdkVersion 声明的版本,系统可能会启用兼容性行为,以确保您的应用继续按照您期望的方式运行。您可以通过指定 targetSdkVersion 以匹配其运行平台的 API 级别来禁用此类兼容性行为。例如,将此值设置为“11”或更高允许系统在 Android 3.0 或更高版本上运行时将新的默认主题 (Holo) 应用到您的应用程序,并且还可以在大屏幕上运行时禁用屏幕兼容模式(因为支持 API 11 级隐式支持更大的屏幕)。

清单:maxSdkVersion - 不推荐。这会将您的应用限制为高于指定 maxSdkVersion 的任何版本。

在 Android 1.5、1.6、2.0 和 2.0.1 中,系统会在安装应用程序以及在系统更新后重新验证应用程序时检查此属性的值。 但是,Android 的未来版本(Android 2.0.1 之后)将不再在安装或重新验证期间检查或强制执行 maxSdkVersion 属性

无需将该属性设置为阻止将您的应用程序部署到新版本的 Android 平台上,因为它们已发布。根据设计,该平台的新版本完全向后兼容。您的应用程序应该在新版本上正常工作,前提是它只使用标准 API 并遵循开发最佳实践。其次,请注意,在某些情况下,声明该属性可能会导致您的应用程序在系统更新到更高的 API 级别后从用户设备中删除。大多数可能安装您的应用程序的设备都会通过无线方式定期接收系统更新,因此您应该在设置此属性之前考虑它们对您的应用程序的影响。

https://developer.android.com/guide/topics/manifest/uses-sdk-element.html 涵盖了所有内容

【讨论】:

    【解决方案2】:

    Android:项目构建目标

    当您选择项目构建目标版本时,这意味着您是 apk 或类将根据所选 SDK 进行编译。例如 - 如果您选择项目构建目标 16 并尝试使用注释 @JavaScriptInterface 它将找不到,因为该注释在该目标上方可用。

    清单:minSdkVersion

    如果您定义了最低 SDK 版本,则使用低于指定最低 SDK 版本的 Android 用户将无法使用您的应用。

    更多信息来自谷歌文档:

    一个整数,指定所需的最低 API 级别 要运行的应用程序。 Android系统会阻止用户 如果系统的 API 级别低于 此属性中指定的值。您应该始终声明这一点 属性。

    清单:targetSdkVersion

    targetSdkVersion 与您的应用程序的编译方式或您可以使用的 API 无关。 targetSdkVersion 应该表明你已经在你指定的版本上测试了你的应用程序(大概直到并包括)。这更像是您向 Android 操作系统提供的认证或签字,作为其应如何处理您的应用在操作系统功能方面的提示。

    例如,如文档所述:

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

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

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

    清单:maxSdkVersion

    如果您定义的maxSdkVersion 用户使用运行SDK 版本高于您在maxSdkVersion 中定义的Android 手机,则无法使用您的应用。

    更多信息来自谷歌文档:

    在其清单中声明 maxSdkVersion="5" 的应用程序是 在 Google Play 上发布。设备运行 Android 1.6 的用户 (API 级别 4)下载并安装应用程序。几周后, 用户接收到 Android 2.0(API 级别)的无线系统更新 5)。安装更新后,系统会检查应用程序的 maxSdkVersion 并成功重新验证它。应用程序 功能正常。然而,一段时间后,该设备收到 另一个系统更新,这次是 Android 2.0.1(API 级别 6)。后 更新后,系统无法再重新验证应用程序 因为系统自身的 API Level (6) 现在高于最大值 由应用程序支持 (5)。系统阻止应用程序 对用户不可见,实际上是将其从设备中删除。

    【讨论】:

    • 非常彻底的答案。其他答案也很好,但我只能接受一个。
    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2017-04-30
    • 2013-04-06
    相关资源
    最近更新 更多