2011-01-28 2 views
30

Итак, мы видели предварительный просмотр sdk и аккуратные новые вещи, такие как ActionBar и Fragments. Выполнение множества вызовов методов будет неизбежно, чтобы использовать их, поэтому какие стратегии существуют для поддержки 1 версии приложения, что позволит мне использовать все сногсшибательные новые вещи, а также работать с устройствами под управлением 2.3 или ниже? Мое приложение на данный момент составляет 1.5 - 2.3.Стратегии для сотовой и обратной совместимости

ответ

27

Эти же API-интерфейсы фрагментов теперь доступны как static library для использования со старыми версиями 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

+5

Также, если вам нужен только дополнительный API, это панель действий, чтобы посмотреть на библиотеку, которую я написал, которая является расширением библиотеки совместимости, которая добавляет именно это. Он предоставляет единый API для панели действий и позволяет использовать одну тему. Дополнительную информацию можно найти на сайте http://actionbarsherlock.com. –

2

Возможно, вы найдете Reto Meier's article on backwards-compatibility, в частности раздел «Работа с отсутствующими классами».

Я еще не посмотрел на Honeycomb SDK сам, но я, как и вы, надеюсь, что это будет довольно легко и без проблем использовать новые функции, не ставя под угрозу совместимость со старыми устройствами.

+1

Кроме того, проверить этот пост, который дает больше примеров работы с несколькими версиями платформы: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp

+0

Я читал они оба, но похоже, что Honeycomb будет более активным, особенно с такими вещами, как Fragments и ActionBar. Как вы думаете, использовать эти методы будет достаточно? –

3

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

1

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

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