2

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

假设我想构建一个适用于从 android 2.3.7 到 4.0.3 的所有版本的应用程序,我应该如何设置minSdkLeveltargetSdkLevel

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

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

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

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

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

编辑:感谢你们所有人,请原谅我重复的问题。我已经阅读了这篇博客文章,它对我很有帮助。你们所有人的答案都很好。

4

4 回答 4

4

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

minSdkVersion:

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

而对于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

于 2012-06-01T20:25:13.343 回答
4

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

您的应用程序将使用项目本身中指定的 SDK 编译,而不是由minSdkLeveltargetSdkLevel指定的 SDK 。

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

于 2012-06-01T20:26:00.323 回答
1

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

于 2012-06-01T20:29:50.947 回答
1

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

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

一方面是app如何处理菜单按钮:如果你将targetSdk设置为11或以上,这意味着你不能假设有一个菜单按钮,所以你将不得不处理操作栏并放置选项以某种方式(或任何其他方式,取决于您的应用程序设计)。

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

所以,简而言之,我建议将 minSdk 设置为尽可能低,以便支持尽可能多的人,并将 targetSdk 设置为尽可能多,以便享受它可以提供的所有好处。你 。

于 2012-06-01T20:35:25.190 回答