Стратегии для сотовой и обратной совместимости - PullRequest
30 голосов
/ 28 января 2011

Итак, мы видели предварительный просмотр SDK и новые полезные вещи, такие как ActionBar и Fragments. Многочисленные вызовы методов будут неизбежны, чтобы использовать их, поэтому, какие существуют стратегии для поддержки 1 версии приложения, которая позволит мне использовать все интересные новинки, но также работать на устройствах с 2.3 или ниже? Мое приложение нацелено на 1,5 - 2,3 на данный момент.

Ответы [ 5 ]

27 голосов
/ 10 февраля 2011

Те же API фрагментов теперь доступны как статическая библиотека для использования с более старыми версиями Android; он совместим с версией Android 1.6.

Есть несколько хитростей, которые вы можете использовать, чтобы увидеть, доступны ли различные новые API для вашего приложения. Вообще говоря, вы, вероятно, захотите создать два альтернативных набора операций, один из которых использует новые модные API (ActionBar, Animators и т. Д.), А другой - нет.

В следующем коде показано, как можно использовать отражение и отлов исключений для определения доступности API-интерфейсов фрагментов, а также проверку версии для подтверждения доступности других API-интерфейсов Honeycomb.

  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();
  }

Вообще говоря, вы можете использовать те же определения макета. Там, где доступны фрагменты, вы будете раздувать каждый макет внутри отдельного фрагмента, а там, где их нет, вы, вероятно, захотите использовать теги <include>, чтобы встроить несколько из них в более сложный макет действия.

Более подробную информацию о том, как написать код для поддержки обратной совместимости на Honeycomb, можно найти здесь: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

3 голосов
/ 04 февраля 2011

Удобно, что Google Dianne Hackborne опубликовала запись в блоге , посвященную именно этой теме.Google говорит, что они будут предоставлять статические библиотеки, поэтому более старые версии Android также смогут использовать фрагменты.

2 голосов
/ 28 января 2011

Может оказаться полезной статья Рето Мейера о обратной совместимости , в частности, раздел, озаглавленный «Работа с отсутствующими классами».Я, как и вы, надеюсь, что использовать новые функции довольно просто и без проблем, не ставя под угрозу совместимость со старыми устройствами.

1 голос
/ 30 ноября 2011

Официальный пример Android, который поможет вам достичь ActionBar с 1,6 до 4. Х

1 голос
/ 04 февраля 2011

Хорошо, Google только что объявил, что соты будут только для планшетов: http://www.pcmag.com/article2/0,2817,2379271,00.asp

Так что, если ваше устройство предназначено только для мобильных устройств, это может даже не быть проблемой.

...