gpt4 book ai didi

Android 和 Eclipse : minSdk and compileWith

转载 作者:行者123 更新时间:2023-11-29 00:25:41 25 4
gpt4 key购买 nike

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

Compile With is the platform version against which you will compile your app. By default, this is set to the latest version of Android available in your SDK. (It should be Android 4.1 or greater; if you don't have such a version available, you must install one using the SDK Manager). You can still build your app to support older versions, but setting the build target to the latest version allows you to enable new features and optimize your app for a great user experience on the latest devices.

来自 this一个代替:

When you are developing your application, you will need to choose the platform version against which you will compile the application. In general, you should compile your application against the lowest possible version of the platform that your application can support.

现在,由于他们自相矛盾,在这里我将解释我所理解的:假设我们使用 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 示例更多地混合了它。仅供引用,Windows 似乎是向后兼容的,如示例中所述here .那么,安卓呢?开发人员似乎应该测试 minSdk 版本,我的意思是:我应该使用最新版本进行编译并测试我的应用程序行为,直到不改变它的最低 api 级别。因此,我似乎需要通过在低于已编译的 API 级别的每个 API 级别上进行测试来测试向后兼容性,它们确保了向前兼容性。对吧?

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

最佳答案

Documentation 你可以读到以下内容:

android:minSdkVersion

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

android:targetSdkVersion

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

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

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

更新:

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

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

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

更新 2:

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

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

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

This inexact batching behavior applies only to updated apps. If you've set the targetSdkVersion to "18" or lower, your alarms will continue behave as they have on previous versions when running on Android 4.4.

因此,正如您在那里看到的那样,如果您将 targetSDK 设置为以前的 API(19 之前),它将像以前一样运行,但如果您以最新的 API(此时 API 19)为目标,那么它会有不同的表现。

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

关于Android 和 Eclipse : minSdk and compileWith,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com