Поддержка разных версий платформ

Хотя в последних версиях Android часто предоставляются отличные API для вашего приложения, вы должны продолжать поддерживать более старые версии Android, пока не будет обновлено больше устройств. В этом уроке рассказывается, как использовать преимущества последних версий API, сохраняя при этом поддержку более старых версий.

Чтобы узнать, как распределены активные устройства по версиям Android, воспользуйтесь мастером Новый проект в Android Studio. Распределение основано на количестве устройств, с которых пользователи заходят в Google Play. Как правило, мы рекомендуем поддерживать около 90% активных устройств и оптимизировать приложение для последней версии Android.

Совет. Чтобы обеспечить оптимальную работу приложения в разных версиях Android, используйте библиотеку поддержки Android. Она позволяет применять некоторые современные API платформы в более ранних версиях.

Укажите минимальный и целевой уровни API

Файл AndroidManifest.xml содержит сведения о вашем приложении и указывает, какие версии Android оно поддерживает. В частности, атрибуты minSdkVersion и targetSdkVersion элемента <uses-sdk> определяют минимальный уровень API, с которым совместимо ваше приложение, и максимальный уровень API, для которого оно разработано и на котором протестировано.

Пример:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

С выходом новых версий Android некоторые стили и поведение могут измениться. Чтобы ваше приложение поддерживало эти изменения и соответствовало стилю устройства каждого пользователя, задайте для атрибута targetSdkVersion значение, соответствующее последней доступной версии Android.

Поскольку промежуточные версии SDK не связаны с изменениями в поведении, задать значение targetSdkVersion, соответствующее промежуточной версии SDK, невозможно. Если вы хотите вызвать API в промежуточной версии SDK, которая новее, чем minSdkVersion, проверьте версию системы во время выполнения.

Проверка версии системы во время выполнения

Android предоставляет уникальный код для каждой версии платформы в классе констант Build. Используйте эти коды в своем приложении, чтобы создать условия, обеспечивающие выполнение кода, зависящего от более высоких уровней API, только тогда, когда эти API доступны в системе.

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Чтобы проверить наличие основной или дополнительной версии SDK, используйте Build.VERSION.SDK_INT_FULL.

Kotlin

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Java

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Примечание. При синтаксическом анализе XML-ресурсов Android игнорирует XML-атрибуты, которые не поддерживаются текущим устройством. Поэтому вы можете безопасно использовать атрибуты XML, которые поддерживаются только в новых версиях, не беспокоясь о том, что старые версии будут работать некорректно, когда столкнутся с этим кодом. Например, если вы зададите targetSdkVersion="11", то в ваше приложение будет по умолчанию включена ActionBar для Android 3.0 и более поздних версий. Чтобы добавить пункты меню на панель действий, необходимо задать атрибут android:showAsAction="ifRoom" в XML-файле ресурса меню. Это можно сделать в XML-файле, который используется в разных версиях, поскольку более ранние версии Android просто игнорируют атрибут showAsAction (то есть вам не нужна отдельная версия в res/menu-v11/).

Используйте стили и темы платформы

Android предоставляет темы, которые позволяют приложениям выглядеть как часть операционной системы. Эти темы можно применить к приложению в файле манифеста. Используя эти встроенные стили и темы, ваше приложение будет естественным образом следовать последнему внешнему виду Android с каждым новым выпуском.

Чтобы действие выглядело как диалоговое окно, выполните следующие действия:

<activity android:theme="@android:style/Theme.Dialog">

Чтобы сделать фон действия прозрачным:

<activity android:theme="@android:style/Theme.Translucent">

Чтобы применить собственную тему, заданную в /res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

Чтобы применить тему ко всему приложению (всем объектам activity), добавьте атрибут android:theme в элемент <application>:

<application android:theme="@style/CustomTheme">

Подробнее о создании и использовании тем читайте в руководстве Стили и темы.