【问题标题】:Android and Eclipse: minSdk and compileWithAndroid 和 Eclipse:minSdk 和 compileWith
【发布时间】:2013-10-31 21:00:03
【问题描述】:

嗯,我认为这没有得到很好的解释,现在我有点困惑。来自this链接:

Compile With 是您要编译的平台版本 你的应用程序。默认情况下,设置为最新版本的 Android 在您的 SDK 中可用。 (它应该是 Android 4.1 或更高版本;如果您 没有这样的版本可用,您必须使用 SDK 管理器)。 您仍然可以构建您的应用以支持旧版本, 但是将构建目标设置为最新版本允许您 启用新功能并优化您的应用以获得出色的用户体验 在最新的设备上。

来自this 一个代替:

在开发应用程序时,您需要选择 您将根据其编译应用程序的平台版本。在 一般来说,您应该根据最低要求编译您的应用程序 您的应用程序可以支持的平台版本

现在,由于他们自相矛盾,在这里我将解释我的理解:假设我们使用 api 5 编译。这意味着如果我从 1 运行到 5,我的应用程序可以工作,但它没有对于 > 5 的版本。所以:

  1. 如果 compileWith 设置为 5,为什么我需要设置 minSdkVersion?
  2. 什么是 targetSdkVersion?

重点是:如果 compileWith 设置为最新版本,是否可以使用最新的 API 并且仍然具有向后兼容性?我确定我错了,我错过了一些东西。谢谢。

编辑 1

现在我明白了,但无论如何我都遗漏了一些东西:假设 minSdk 是 9,target 是 18(我当前的 sdk)。这意味着我不能使用任何特定于 api 18 的东西,除非有一些旧版本的支持包,对吧?我的想法不同:我会使用尽可能低的版本进行编译以获得前向兼容性。我的意思是,如果您在 Win2000 上编译 Windows 应用程序,它将运行到 Windows 8,但我仅限于 Win2000 api。如果我使用 Windows 8 编译,则应在运行时检查向后兼容性,并且我只能在 Win2000 上使用“支持包”(显然这是一个示例)上的 Windows 8 api。对吧?

编辑 2

This 是我要问的关于 Android(而不是 JVM)的问题。 Android 正在向前和向后混合,我使用 Windows 示例进行了更多混合。 FIY,Windows 似乎是向后兼容的,如示例here 中所述。那么,安卓呢?似乎 minSdk 版本应该由开发人员测试,我的意思是:我应该用最新版本编译并测试我的应用程序行为,直到不会改变它的最低 api 级别。因此,我似乎需要通过在每个低于已编译 wich 的 api 级别上进行测试来测试向后兼容性,并确保向前兼容性。对吧?

我认为我混合了向前和向后兼容性定义。每次我读它们时,它们似乎都不一样。

【问题讨论】:

  • 我的新更新是否回答了您的问题?如果是,请将其标记为正确,以便其他有相同问题的人可以清楚地看到。谢谢。
  • 清楚,但还不够,请阅读我的更新!
  • 我希望你现在拥有你想要的东西。
  • 我的解决方案解决了您的困惑吗?

标签: android


【解决方案1】:

您可以从Documentation 阅读以下内容:

android:minSdkVersion

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

android:targetSdkVersion

一个整数,指定应用程序所针对的 API 级别。如果未设置,则默认值等于提供给 minSdkVersion 的值。 此属性通知系统您已针对目标版本进行了测试,并且系统不应启用任何兼容性行为以保持您的应用与目标版本的前向兼容性。该应用仍然能够在旧版本上运行版本(低至 minSdkVersion)。

为了回答您的最后一个问题,针对最新的 API 将不允许您在旧手机上执行任何较新的方法或使用任何较新的类,因为您需要使用支持包,这样您就可以获得与您可以在较新的 API 中执行的操作相近的结果。

希望这能让您更清楚地了解为什么会有这两个值以及它们之间的区别。

更新:

关于为 windows 2000 构建并在 windows 8 上运行的示例,并不保证它会运行,这就是为什么在 windows 上你有“兼容运行”模式,然后你根据什么操作选择你想运行它的系统。

这是因为可能两个操作系统(或本例中的 API)具有相同的方法或选项,它们以不同的方式执行或需要其他权限。此处也是如此,因此目标 SDK 将是针对您测试的参考框架,因此如果您在比 taget SDK 更新的设备上运行它,它将使用该行为。

对于 min 和 target 之间的 API,它们将像往常一样运行,因此您总是会遇到奇怪的行为,并且可能需要进行一些修补,通常在 2.x 到 3.x 上最为明显跳跃。

更新 2:

好吧,让我试着用不同的方式来解释它。

minSDK 将确定您可以在整个应用程序中使用哪些方法和选项,这意味着如果某个方法仅在该 API 之后可用,您将无法使用它,而是会收到错误消息。

targetSDK 代表您测试的 API 的最新版本,因此,如果手机具有比您指定的 API 更新的 API,它将尝试按照您指定的 API 版本运行,例如 @ 987654322@,在重要的行为变化部分:

这种不精确的批处理行为仅适用于更新后的应用。如果您将 targetSdkVersion 设置为“18”或更低,则在 Android 4.4 上运行时,您的警报将继续像以前版本一样运行。

因此,如您所见,如果您将 targetSDK 设置为以前的 API(19 之前),它将像以前一样运行,但如果您针对最新的 API(此时 API 19),那么它会有不同的表现。

希望我已经足够清楚了,如果没有,请不要犹豫,问。

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 2011-03-13
    • 2013-08-11
    • 2015-11-01
    • 2017-01-19
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多