您的问题的核心是:项目清单中声明的 targetSdkVersion 值与 Eclipse 中项目的 Project / Properties / Android 对话框中选择的 Project Build Target 之间的关系是什么,该项目选择 SDK 级别你的应用是哪个编译的?
minSdkVersion 值会分散您对问题的注意力;这必须小于或等于 targetSdkVersion,但它与项目构建目标不直接相关。 targetSdkVersion 和 Project Build Target 之间的关系。
经过仔细考虑(你必须自己判断我是否有这个权利),我得出的结论是 targetSdkVersion 和 Project Build Target 应该始终设置为相同的 API 级别。我的推理分为两部分。
** 首先,我认为项目构建目标不应低于 targetSdkVersion:
当您将 targetSdkVersion 设置为某个 API 级别时,通常这样做是为了使用在该级别首次可用的某些 API 功能。您可能决定支持回到更早的 minSdkVersion 版本,并检测那些早期版本中不可用的 targetSdkVersion 功能缺乏可用性,并编写支持这些早期版本的替代代码,但您的原因用于设置 targetSdkVersion 的 em> 将获得对在该 API 级别仅可用的功能的访问权限。
由于您显然希望访问最初在 targetSdkVersion API 级别引入的一些功能,因此您可以将项目构建目标设置为与 targetSdkVersion 中指定的相同 API 级别。否则,您正在编译的 API 将不包含导致您将 targetSdkVersion 设置为您选择的级别的 API 功能。
因此,很明显,您不希望将项目构建目标设置为低于您的 targetSdkVersion。但是你会想要将它设置为 更高 吗?这将我们带到了论点的第二部分:
** 其次,我认为项目构建目标不应高于 targetSdkVersion:
您不希望选择高于您的 targetSdkVersion 的项目构建目标,因为这意味着您可能会无意中使用构建目标的 SDK 提供的某些功能,这些功能在您声明的 targetSdkVersion 级别不可用,并且如果您确实使用了这些功能,那么如果您的应用在早于构建目标的 Android 版本中运行,它们将不可用,并且您的应用可能会因此崩溃。
现在,如果您的应用承诺检测这些缺失的功能本身并处理它们的缺失,那么这将证明将 targetSdkLevel 设置为项目构建目标的级别是合理的,因为这正是含义targetSdkLevel(您承诺检测和处理存在于您的 targetSdkLevel 但不存在于您的 minSdkLevel 的任何 API 功能),所以如果您这样做,那么没有理由不设置您的targetSdkLevel 到您以这种方式在代码中支持的最高级别(即,到项目构建目标的级别)。
[好的,我刚刚找到了一个“原因”,将 Project Build Level 设置为高于 targetSdkLevel。 API 级别 16 及更高级别的默认软键盘有问题(其退格键无法正常工作),因此我将 targetSdkLevel 降低到 15 以使该键盘消失。我也可以将我的项目构建目标更改为 15,但我没有这样做,因为我想要最新的代码,理论上更新的代码通常是“改进的”,因此“更好” 。”这或许是迷信。尽管有这个例外,但上述论点通常是有效的。]
在这方面,我会注意到官方文档声明:“当您开发应用程序时,您需要选择编译应用程序的平台版本。通常,您应该编译您的应用程序您的应用程序可以支持的平台的最低版本。”
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
这似乎表明您应该编译与等于 minSdkVersion 而不是 targetSdkVersion 的项目构建目标,这与我上面的观点相反。我已经列出了我偏爱 targetSdkVersion 而不是这个的原因。具体来说,如果您尝试使用 targetSdkVersion 而不是 minSdkVersion 中的功能,那么如果您正在编译与 minSdkVersion 相比,您将如何做到这一点?当然,您的应用将在 minSdkVersion 上运行,因为您将测试这些功能的可用性(例如,通过反射),但您将永远不会拥有那些不错的新 API 元素 ,即使您的应用在最新版本的 Android 上运行,如果您编译的 SDK 与 minSdkVersion 级别相比。
因此,Project Build Target 应该始终与 targetSdkVersion 相同;这是我的论点。我找不到任何材料可以清楚地阐明这种关系,所以以上是我推断的,没有任何权威来源的支持,实际上上述来自官方来源的引述似乎与我的立场相矛盾;因此,鼓励和期望 cmets。