【问题标题】:Do I have to write explicit code to ensure the backward compatibility?我是否必须编写显式代码以确保向后兼容性?
【发布时间】:2013-06-13 06:03:35
【问题描述】:

如果我指定最低 SDK 为 2.0,目标 SDK 为 4.1,我是否必须编写显式代码以确保向后兼容。就像我想使用 SDK 级别 7 中引入的手势检测功能,我将目标设置为 7,最小值设置为 3。我问我是否需要编写显式代码(不包括手势检测功能)以便它在小于 7 但大于 3 的目标中运行?

【问题讨论】:

    标签: android sdk


    【解决方案1】:

    是的,在旧版本的 Android 上运行时,您必须避免调用未来的 API。您可以组织代码以在运行时选择合适的代码路径,具体取决于您的操作系统版本。

    An example of how to preserve backwards-compatibility when using a new API.

    【讨论】:

      【解决方案2】:

      是的,您需要这样做,但我认为在 8 (2.2) 之前仍然支持任何 API 没有任何合乎逻辑的理由。

      它实际上是市场的 1.6%。不再值得维护和支持这样的早期版本。

      也就是说,如果你需要做特定于版本的代码,这是处理它的方法:

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
          //Use API 7+ code
      } else {
          //Use backwards compatible code
      }
      

      【讨论】:

      • 我提到的 sdk 版本只是虚拟值,我的意思是像 2.0 和 4.1 这样的版本,其中只是示例,仅此而已。无论如何感谢您的回答:)
      • 有什么方法可以让我在编码时自动知道哪些功能不在目标版本中?
      • 如果您使用过时的方法,lint 会发出同样的警告。
      • 但仅在 Eclipse 中。如果您使用 IntelliJ,则需要通过命令行运行 Lint 以检查 API 级别(至少在 Android Studio/IntelliJ 13 发布之前)。
      • @kcoppock 真是绝妙的洞察力
      【解决方案3】:

      您应该查看 Android official site,了解如何保证向后兼容性到最低级别 4(无论如何,在 api 级别 7 之前可以忽略不计。稍微重要的份额通常是 api 级别 8 以上),并始终使用最新support library

      当然有一些小的代码更改(例如getSupportFragmentManager() 替换getFragmentManager() 等)。可能发生的最糟糕的情况是NoSuchMethodException,因此您必须非常小心,不要调用在较低平台中不存在的 API。 sdk 应该非常清楚地建议它发生时。

      【讨论】:

        猜你喜欢
        • 2012-07-20
        • 1970-01-01
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多