Android 解释targetSdkLevel以及如何确定其正确值

Android 解释targetSdkLevel以及如何确定其正确值,android,sdk,android-manifest,Android,Sdk,Android Manifest,你能解释一下我应该如何确定targetSdkLevel的正确值吗 比方说,我想构建一个可以在android 2.3.7到4.0.3的所有版本上运行的应用程序,我应该如何设置minSdkLevel和targetSdkLevel 前者应该匹配android 2.3.7的API级别,后者应该匹配4.0.3的API级别 那么,当我开发我的应用程序时,我应该只使用最早支持的sdk级别中可用的方法/类吗 当我编译应用程序时,它是编译为2.3.7还是4.0.3 我无法理解targetSdkLevel的用途,因

你能解释一下我应该如何确定targetSdkLevel的正确值吗

比方说,我想构建一个可以在android 2.3.7到4.0.3的所有版本上运行的应用程序,我应该如何设置minSdkLevel和targetSdkLevel

前者应该匹配android 2.3.7的API级别,后者应该匹配4.0.3的API级别

那么,当我开发我的应用程序时,我应该只使用最早支持的sdk级别中可用的方法/类吗

当我编译应用程序时,它是编译为2.3.7还是4.0.3

我无法理解targetSdkLevel的用途,因为apk不能针对此标记中指定的较新版本进行编译,否则它无法在低至minSdkLevel指定的版本上工作。。。为什么不将targetSdkLevel设置为最新的可用级别

我也读过关于清单标签的官方信息,但我还是不明白。。你能帮我澄清一下这个话题吗


编辑:谢谢大家,请原谅重复的问题。我读过这篇文章,它真的帮助了我。大家的回答都很好。

这里有明确的解释:

一个整数,指定应用程序所需的最低API级别 要运行的应用程序。Android系统将阻止用户 如果系统的API级别低于 此属性中指定的值。你应该随时申报 属性

对于
targetSdkVersion

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

你不明白的是什么

这是您设置它的方式:

<uses-sdk android:minSdkVersion="10" 
          android:targetSdkVersion="15"/>

您可以在此处了解API级别14的更改:
对于API级别4,这里是:

您应该只使用minSdkLevel指定的SDK中可用的方法/类,或者通过适当检查运行时API版本来包装它们

您的应用程序将使用项目本身中指定的SDK进行编译,而不是由minSdkLevel或targetSdkLevel指定的SDK进行编译


您应该将targetSdkLevel设置为测试应用程序时使用的最高级别API。这是因为将基于此值启用/禁用应用程序的兼容性行为。

使用目标构建,然后可以检查用户是否低于目标并正常降级。例如,如果您正在创建位置感知应用程序,您可能希望使用从版本8开始提供的被动_提供程序。您可以将min版本设置为低于8,然后检查android版本。从那里,您可以根据版本决定使用或不使用被动_提供程序。

谷歌建议您始终使用最新版本的targetSdk,并提供lint工具来检查您的类和方法对于Minsdk版本来说是否太新。 如果出现警告,您需要考虑如何处理

请注意,正如人们在这里提到的,设置targetSdk也意味着它将改变应用程序的某些方面

一个方面是应用程序如何处理菜单按钮:如果您将targetSdk设置为11或更高,这意味着您不能假设有菜单按钮,因此您必须处理操作栏并以某种方式(或任何其他方式,取决于您的应用程序设计)将选项放在那里

如果将其设置为10或以下,android将在屏幕上为没有菜单按钮的设备(如或)添加此按钮(显示为3点)。请注意,对于某些设备,它看起来很难看(例如,htc one x需要整整一行)


因此,简言之,我建议将minSdk设置为您所能做到的最小值,以支持尽可能多的人,并将targetSdk设置为您所能做到的最大值,以享受它所能给您带来的所有好处。

duplicate@DhruvGairola很抱歉出现了重复。谢谢你提供的非常有用的链接,让我找到了这篇精彩的博文:我已经完全阅读了那一页,但我无法回答我的问题。。。如果我将targetSdkLevel设置为14,将minSdkLevel设置为4,那么使用的代码/方法/类是什么?API级别4中的那些?然后,我为第4版编译了一个apk,那么它如何成为目标并使用新功能,直到第14级?对不起,这让我有点困惑我把这里弄得一团糟。。阅读本文有助于澄清一些疑问:如何在运行时检查版本?是否有提供此信息的函数调用?否则,我可以在values文件夹的strings.xml文件中轻松添加值小于-10的字符串版本信息,然后在values-v10文件夹的strings.xml文件中添加值大于或等于-10的相同字符串,然后在运行时检索该字符串。。这是太愚蠢还是天生错误?我在这里找到了答案:如果我使用Eclipse开发应用程序,minSdkLevel为4,而targetSdkLevel为14,Eclipse是否将自己设置为使用级别4,即仅为该级别提供方法/自动完成?所以我不应该担心使用minSdkLevel中不支持的东西,对吗?我认为我在前面的评论中写的是错误的。。。我知道,我们可以将目标级别设置为引入了我们想要使用的功能的级别,例如,然后在运行时检查该功能是否可用,确保我们的应用程序也能在较旧的硬件上运行。。但是,生成的apk是否可能包含调用方法/使用类的代码(也适用于minLevelSdk)
<uses-sdk android:minSdkVersion="10" 
          android:targetSdkVersion="15"/>