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

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

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

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

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

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

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

Как разработчику приложений вам не нужно беспокоиться о том, совместимо ли устройство с Android, поскольку только устройства, совместимые с Android, включают Google Play Store. Таким образом, если пользователь устанавливает ваше приложение из 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 Store сравнивает функции, необходимые вашему приложению, с функциями, доступными на устройстве каждого пользователя, чтобы определить, совместимо ли ваше приложение с каждым устройством. Если на устройстве отсутствуют все функции, необходимые вашему приложению, пользователь не сможет установить ваше приложение.

Однако если основная функциональность вашего приложения не требует функции устройства, установите для 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 Store, см. в документации «Фильтры в 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 , с константой кодового имени в 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.