minSdk,targetSDK,已弃用 - Android

Posted

技术标签:

【中文标题】minSdk,targetSDK,已弃用 - Android【英文标题】:minSdk, targetSDK, Deprecated - Android 【发布时间】:2014-01-23 20:37:37 【问题描述】:

如果我的目标 API 是 19,而我的最低要求是 8,那么在声明它们是在 API 11 中引入并强制我在方法上方添加此类属性的函数中:@TargetApi(Build.VERSION_CODES.GINGERBREAD)

此方法不适用于 API 8 手机吗?

但是,如果该方法表示已弃用,它是否适用于所有手机?因此,如果我在 API 11 中已弃用和引入之间进行选择,我真的应该选择已弃用吗?但是,如果我愿意做更多的工作,我可以检查手机 API 并运行适合该手机的方法吗?是这样,还是将我的最低 API 从 8 更改为 11?要查看我的 minSDK 应该是什么,我是否应该在目标 API 设置为低的情况下测试我的代码,如果它导致错误,请将我的 minSdk 设置为高于该值(或解决错误..或者/或)?

android 手机用户可以更新他们的 API 级别吗?我没有安卓,快速的谷歌也没有透露这一点。

“从 Android 3.2(API 级别 13)开始,不推荐使用上述尺寸组,您应该改用 swdp 配置限定符来定义布局资源所需的最小可用宽度。” - 这是否意味着您应该使用 swdp 如果您要么先检查他们的手机是否高于 API12,要么将 minSDK 设置为 13?

谢谢。

【问题讨论】:

【参考方案1】:

此方法不适用于 API 8 手机吗?

如果“此方法”是指“您调用的方法,该方法已添加到 API 级别 11,触发了对@TargetApi 的需求”,那么,是的,该方法不适用于 API 级别 8、9 , 或 10。它是在 API 级别 11 中添加的,在此之前不存在。

但是,如果该方法显示已弃用,它是否适用于所有手机?

一般来说,是的。大多数不推荐使用的方法都被标记为不推荐使用,因为有更好的解决方案。出于安全原因或因为它们不再支持它们,某些方法已被弃用并且也被更改为什么都不做。这些通常在 JavaDocs 中如此标注。

如果我在 API 11 中已弃用和引入之间进行选择,我真的应该选择已弃用吗?

理想情况下,您选择同时使用两者,使用Build.VERSION.SDK_INT 来确定您正在运行的 API 级别。 API 级别 11+ 的方法通常比已弃用的方法更丰富,更符合用户期望。因此,请尽可能使用较新的 API,并在必要时优雅地降级为较旧的 API(无论是否已弃用)。

但如果我愿意做更多的工作,我可以检查手机 API 并运行适合该手机的方法吗?

是的,通过Build.VERSION.SDK_INT。见http://developer.android.com/guide/practices/compatibility.html#Versions。

要么这样,要么将我的最低 API 从 8 更改为 11?

那将是另一种可能性。

要查看我的 minSDK 应该是什么,我是否应该在目标 API 设置为低的情况下测试我的代码,如果它导致错误,请将我的 minSdk 设置为高于该值(或解决错误..或者/或)?

通常,您会根据市场选择最低 SDK 级别。现在,very few devices run API Level 8 or 9, and not that many run API Level 10。您可能会认为测试旧设备可能不值得。

Android 手机用户可以更新他们的 API 级别吗?

设备制造商有时会发布更新,一些用户可能会求助于 ROM 模组,例如 Cyangenmod,以进行超出制造商所做的升级。

我没有安卓

如果不购买设备,我不会在 Android 开发方面走得太远。模拟器虽然不错,但只是模拟器。

【讨论】:

【参考方案2】:

@TargetAPI 注释只是隐藏了在 API 级别较低的设备上使用需要高于 X 的 API 的方法时遇到的错误:

表示无论项目目标是什么,Lint 都应将此类型视为针对给定 API 级别。

不推荐使用的方法通常已经过时,因为它们是新 API 级别中更好的解决方案。这些新方法在旧级别中尚不存在,因此您必须为这些设备使用已弃用的方法。使用简单的 if 语句来检查用户正在使用的 API 级别,您可以选择适当的方法。

最后,有些设备太旧,无法再获得更新。因此,它们的 API 级别不会改变。

【讨论】:

以上是关于minSdk,targetSDK,已弃用 - Android的主要内容,如果未能解决你的问题,请参考以下文章

xml 属性 singleLine 在 Android 中是不是已弃用?

PHP 已弃用:each() 函数已弃用 [重复]

已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用

Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?

UIAlertView 已弃用:首先在 iOS 9.0 中弃用 - UIAlertView 已弃用。将 UIAlertController 与首选样式一起使用

DTD 是不是已弃用?