30

所以我们已经看到了预览版 sdk 和像 ActionBar 和 Fragments 这样的新东西。使用这些将不可避免地进行大量方法调用,那么有什么策略可以维护应用程序的 1 个版本,这将让我使用所有时髦的新东西,但也可以在运行 2.3 或更低版本的设备上工作?我的应用程序目前的目标是 1.5 - 2.3。

4

5 回答 5

27

相同的片段 API 现在可作为静态库用于旧版本的 Android;它与 Android 1.6 兼容。

您可以使用一些技巧来查看您的应用程序是否可以使用各种新 API。一般来说,您可能想要创建两组可选的活动,一组使用花哨的新 API(ActionBar、Animators 等)——另一组不使用。

以下代码展示了如何使用反射和异常捕获来确定 Fragment API 的可用性,以及如何使用版本检查来确认其他 Honeycomb API 是否可用。

  private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10;

  private static boolean fragmentsSupported = false;

  private static void checkFragmentsSupported() throws NoClassDefFoundError {
    fragmentsSupported = android.app.Fragment.class != null;
  }

  static {
    try {
      checkFragmentsSupported();
    } catch (NoClassDefFoundError e) {
      fragmentsSupported = false;
    }
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent startActivityIntent = null;
    if (!shinyNewAPIsSupported)
      startActivityIntent = new Intent(this, MainNonActionBarActivity.class);
    else
      startActivityIntent = new Intent(this, MainActionActivity.class);

    startActivity(startActivityIntent);
    finish();
  }

一般来说,您可以使用相同的布局定义。在 Fragment 可用的地方,您将在不同的 Fragment 中扩展每个布局,在不可用的地方,您可能希望使用<include>标签将其中的几个嵌入到更复杂的 Activity 布局中。

A more detailed work through of how to write the code to support backwards compatibility on Honeycomb can be found here: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

于 2011-02-10T10:01:49.633 回答
3

方便的是,Google 的 Dianne Hackborne 发布了一篇博客文章,涵盖了这个确切的主题。谷歌表示他们将提供静态库,因此旧版本的 Android 也将能够使用片段。

于 2011-02-03T22:21:17.867 回答
2

您可能会发现 Reto Meier关于向后兼容性的文章很有用,特别是标题为“处理缺失类”的部分。

我自己还没有看过 Honeycomb SDK,但我和你一样,希望在不损害与旧设备兼容性的情况下使用新功能非常容易且无忧。

于 2011-01-28T19:36:26.303 回答
1

那么谷歌刚刚宣布蜂窝将仅限平板电脑:http ://www.pcmag.com/article2/0,2817,2379271,00.asp

因此,如果您的设备仅适用于移动设备,这甚至可能不是问题。

于 2011-02-03T23:21:41.047 回答
1

Official Android sample that will help you achieve ActionBar from 1.6 to 4.x

于 2011-11-30T11:30:33.890 回答