Обзор совместимости устройств

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

Для обеспечения совместимости с устройствами Android предоставляет динамическую платформу приложений, в которой можно предоставлять ресурсы приложения , зависящие от конфигурации, в статических файлах, например, различные XML-макеты для экранов разных размеров. Затем Android загружает соответствующие ресурсы в зависимости от текущей конфигурации устройства. Продумав дизайн приложения и дополнительные ресурсы, вы можете опубликовать единый пакет приложения (APK), оптимизирующий работу пользователя на различных устройствах.

Однако при необходимости вы можете указать требования к функциям своего приложения и контролировать, какие типы устройств смогут устанавливать его из Google Play. В этом документе объясняется, как контролировать, какие устройства будут иметь доступ к вашим приложениям, и как подготовить их к охвату нужной аудитории.

Что означает «совместимость»?

При разработке Android существует два типа совместимости: совместимость устройств и совместимость приложений .

Поскольку Android — проект с открытым исходным кодом, любой производитель оборудования может создать устройство под управлением операционной системы Android. Однако устройство считается «совместимым с Android» только в том случае, если оно может корректно запускать приложения, написанные для среды выполнения Android . Точные характеристики среды выполнения Android определяются программой совместимости Android . Чтобы считаться совместимым, каждое устройство должно пройти тест на совместимость (CTS).

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

Однако вам необходимо учесть совместимость вашего приложения с каждой потенциальной конфигурацией устройства. Поскольку Android работает на широком спектре устройств, некоторые функции доступны не на всех. Например, на некоторых устройствах может отсутствовать компас. Если для основных функций вашего приложения требуется компас, то ваше приложение совместимо только с устройствами, поддерживающими эту функцию.

Контролируйте доступность вашего приложения на устройствах

Android поддерживает множество функций, которые ваше приложение может использовать через API платформы. Некоторые функции основаны на аппаратном обеспечении, например, компас; другие — на программном, например, виджеты приложений; а некоторые зависят от версии платформы. Не каждое устройство поддерживает все функции, поэтому вам может потребоваться контролировать доступность вашего приложения на устройствах, исходя из требуемых функций.

Чтобы обеспечить максимальную пользовательскую базу вашего приложения, поддерживайте как можно больше конфигураций устройств с помощью одного APK или AAB-файла. В большинстве случаев это можно сделать, отключив дополнительные функции во время выполнения и предоставив ресурсам приложения альтернативные варианты для различных конфигураций, например, разные макеты для разных размеров экрана. При необходимости вы можете ограничить доступность своего приложения для определённых устройств через Google Play Store на основе следующих характеристик устройств:

Особенности устройства

Чтобы управлять доступностью приложения на основе функций устройства, Android определяет идентификаторы функций для любых аппаратных или программных функций, которые могут быть недоступны на некоторых устройствах. Например, идентификатор функции для датчика компаса — FEATURE_SENSOR_COMPASS , а идентификатор функции для виджетов приложения — FEATURE_APP_WIDGETS .

При необходимости вы можете запретить пользователям устанавливать ваше приложение, если их устройства не предоставляют необходимую функцию, объявив функцию с помощью элемента <uses-feature> в файле манифеста вашего приложения.

Например, если ваше приложение не имеет смысла на устройстве, на котором отсутствует датчик компаса, вы можете объявить датчик компаса как требование с помощью следующего тега манифеста:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Google Play сравнивает функции, необходимые вашему приложению, с функциями, доступными на устройствах каждого пользователя, чтобы определить, совместимо ли ваше приложение с каждым из них. Если на устройстве нет всех необходимых функций, пользователь не сможет установить ваше приложение.

Однако, если основная функциональность вашего приложения не требует функции устройства, установите для атрибута required значение "false" и проверяйте наличие функции устройства во время выполнения. Если функция приложения недоступна на текущем устройстве, корректно уменьшите доступность соответствующей функции. Например, вы можете проверить, доступна ли функция, вызвав hasSystemFeature() следующим образом:

Котлин

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Ява

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Информацию обо всех фильтрах, которые можно использовать для управления доступностью вашего приложения в магазине Google Play, см. в документации Фильтры в Google Play .

Версия платформы

Разные устройства могут работать под управлением разных версий платформы Android, например, Android 12 или Android 13. Каждая последующая версия платформы часто добавляет API, недоступные в предыдущей. Чтобы обозначить набор доступных API, каждая версия платформы указывает уровень API . Например, Android 12 имеет уровень API 31, а Android 13 — уровень API 33.

Вам необходимо указать значения minSdkVersion и targetSdkVersion в файле build.gradle :

Котлин

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Круто

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Дополнительную информацию о файле build.gradle читайте в разделе Настройка сборки .

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

Однако, если ваше приложение использует API, добавленные в более новой версии платформы, но не требует их для своей основной функциональности, проверяйте уровень API во время выполнения и корректно снижайте доступность соответствующих функций, если уровень API слишком низкий. В этом случае установите для minSdkVersion минимально возможное значение для основной функциональности вашего приложения, а затем сравните текущую версию системы, SDK_INT , с константой codename в Build.VERSION_CODES , соответствующей уровню API, который вы хотите проверить, как показано в следующем примере:

Котлин

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Ява

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

Конфигурация экрана

Android работает на устройствах разных размеров, таких как телефоны, планшеты и телевизоры. Для классификации устройств по типу экрана Android определяет две характеристики каждого устройства: размер экрана (физический размер экрана) и плотность пикселей (физическую плотность пикселей на экране, или DPI ). Для упрощения различных конфигураций Android объединяет эти варианты в группы, что упрощает их определение:

  • Четыре обобщенных размера: маленький, нормальный, большой и очень большой.
  • Несколько обобщенных плотностей: mdpi (средняя), hdpi (высокая), xhdpi (сверхвысокая), xxhdpi (сверхвысокая) и другие.

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

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

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

Контролируйте доступность своего приложения в бизнес-целях

Помимо ограничения доступности приложения на основе характеристик устройства, вам может потребоваться ограничить его доступность по коммерческим или юридическим причинам. Для таких случаев в Google Play Store предусмотрены фильтры в Play Console, которые позволяют контролировать доступность приложения по нетехническим причинам, таким как региональные настройки пользователя или оператор беспроводной связи.

Фильтрация по технической совместимости, например, по требуемым аппаратным компонентам, всегда основана на информации, содержащейся в вашем APK- или AAB-файле. Фильтрация по нетехническим причинам, например, по географическому региону, всегда выполняется в консоли Google Play .

Дополнительные ресурсы:

Обзор ресурсов приложения
Информация о том, как структурированы приложения Android для разделения ресурсов приложения и кода приложения, включая то, как можно предоставить альтернативные ресурсы для определенных конфигураций устройства.
Фильтры в Google Play
Информация о различных способах, которыми Google Play Store может предотвратить установку вашего приложения на разных устройствах.
Разрешения на Android
Как Android ограничивает доступ приложений к определенным API с помощью системы разрешений, которая требует согласия пользователя на использование этих API вашим приложением.