解释targetSdkLevel以及我应该如何确定它的正确值

时间:2012-06-01 20:19:38

标签: 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 的目的,因为无法为此标记中指定的较新版本编译apk,否则无法对版本低于 minSdkLevel ...为什么我不能将 targetSdkLevel 设置为最新的可用级别?

我还阅读了有关uses-sdk Manifest标签的官方信息,但我仍然不明白..你能帮我澄清这个话题吗?

编辑:感谢大家,请原谅我的重复问题。我已经读过Blog post了,这对我很有帮助。你们所有人都给出了很好的答案。

4 个答案:

答案 0 :(得分:4)

这里解释清楚:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

minSdkVersion:
  

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

适用于targetSdkVersion

  

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

你在这里不明白的是什么?

您可以这样设置它:

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

您可以在此处阅读API级别14的更改:http://developer.android.com/sdk/api_diff/14/changes.html 这里是API级别4:http://developer.android.com/sdk/api_diff/4/changes.html

答案 1 :(得分:4)

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

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

您应该将 targetSdkLevel 设置为您测试过该应用程序的最高级API。这是因为将根据此值为您的应用程序启用/禁用兼容性行为。

答案 2 :(得分:1)

使用目标构建,然后如果用户低于目标,您可以检查并正常降级。例如,如果您要创建位置感知应用程序,则可能需要使用从版本8开始可用的PASSIVE_PROVIDER。您可以将最小版本设置为低于8并检查Android版本。从那里你可以决定使用或不使用基于版本的PASSIVE_PROVIDER。

答案 3 :(得分:1)

谷歌建议你总是使用最新版本的targetSdk,并且还提供lint工具来检查你的类和方法对于minSdkVersion来说是不是太新了。 如果出现警告,您需要考虑如何处理它。

请注意,正如人们在此提到的那样,设置targetSdk也意味着它会改变应用程序的某些方面。

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

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

所以,简而言之,我建议将minSdk设置为最小值,以便尽可能多地支持尽可能多的人,并将targetSdk设置为最大值,以便享受所有的好处它可以给你。