Android разработан для работы на многих различных устройствах, таких как телефоны, планшеты и телевизоры. Диапазон устройств обеспечивает огромную потенциальную аудиторию для вашего приложения. Чтобы ваше приложение было успешным на всех устройствах, оно должно допускать изменчивость функций и предоставлять гибкий пользовательский интерфейс, который адаптируется к различным конфигурациям экрана.
Чтобы помочь с совместимостью устройств, Android предоставляет динамическую структуру приложений, в которой вы можете предоставлять ресурсы приложения , специфичные для конфигурации, в статических файлах, таких как различные макеты XML для разных размеров экрана. Затем Android загружает соответствующие ресурсы на основе текущей конфигурации устройства. Продумав дизайн вашего приложения и дополнительные ресурсы приложения, вы можете опубликовать единый пакет приложения (APK), который оптимизирует пользовательский опыт на различных устройствах.
Однако при необходимости вы можете указать требования к функциям вашего приложения и контролировать, какие типы устройств могут устанавливать ваше приложение из Google Play Store. В этом документе объясняется, как вы можете контролировать, какие устройства имеют доступ к вашим приложениям, и как подготовить ваши приложения для охвата нужной аудитории.
Что означает «совместимость»?
Что касается разработки Android, существует два типа совместимости: совместимость устройств и совместимость приложений .
Поскольку Android — проект с открытым исходным кодом, любой производитель оборудования может создать устройство, работающее под управлением операционной системы Android. Но устройство «совместимо с Android» только в том случае, если оно может правильно запускать приложения, написанные для среды выполнения Android . Точные сведения о среде выполнения Android определяются программой совместимости Android . Каждое устройство должно пройти Compatibility Test Suite (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
.
При необходимости вы можете запретить пользователям устанавливать ваше приложение, если их устройства не поддерживают необходимую функцию, объявив эту функцию с помощью элемента
в файле манифеста вашего приложения.
Например, если ваше приложение не имеет смысла на устройстве, на котором отсутствует датчик компаса, вы можете объявить датчик компаса обязательным с помощью следующего тега манифеста:
... > android:name="android.hardware.sensor.compass" android:required="true" /> ...
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
, с константой 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 Console .
Дополнительные ресурсы:
- Обзор ресурсов приложения
- Информация о том, как структурированы приложения Android для разделения ресурсов приложения и кода приложения, включая то, как можно предоставить альтернативные ресурсы для определенных конфигураций устройства.
- Фильтры в Google Play
- Информация о различных способах, которыми Google Play Store может предотвратить установку вашего приложения на разных устройствах.
- Разрешения на Android
- Как Android ограничивает доступ приложений к определенным API с помощью системы разрешений, которая требует согласия пользователя на использование этих API вашим приложением.