Совместимость устройств

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

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

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

Что подразумевается под словом “Совместимость”?

Во время изучения системы Android, вы, вероятно, еще не раз столкнетесь со словом “Совместимость” в различных ситуациях. Есть два типа совместимости: совместимость устройств и совместимость приложений.

Поскольку Android это проект с открытым кодом, любые разработчики железа могут выпускать устройства под операционной системой Android. До сих пор фраза “устройство совместимо с Android” означало только то, что на нем могут корректно запускаться приложения, написанные для среды выполнения Android. Детально о среде выполнения Android написано на страничке Совместимость программ Android и каждое устройство должно пройти тест на совместимость CTS (Compatibility Test Suite), для того, чтобы считаться совместимым.

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

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

Управляем доступностью приложения для устройств

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

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

  • Возможности устройства
  • Версия платформы
  • Конфигурация экрана

Возможности устройства

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

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

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

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

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

Подробную информацию о фильтрах возможностей устройств, смотрите в разделе Фильтры Google Play.

Примечание: некоторые системные разрешения неявно требуют, чтобы устройство предоставляло функции. Например, если приложение запрашивает права доступа к Bluetooth, это неявно требует, чтобы bluetooth на устройстве присутствовал (идентификатор FEATURE_BLUETOOTH). Вы можете сделать приложение доступным для устройств без bluetooth, установив атрибут required в значение "false" в теге <uses-feature>. Подробности в разделе Разрешения, неявно требующие наличие функций.

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

На разных устройствах могут быть установлены различные версии Android, например 4.0 или 4.4. Каждая следующая версия часто добавляет новые возможности в API, недоступные в предыдущих версиях. Каждая платформа определяет уровень API. Например, Android 1.0 соответствует уровень API 1, а Android 4.4 – уровень API 19.

Уровни API позволяют указать минимальную версию, с которой приложение совместимо. Для этого служит атрибут minSdkVersion тега <uses-sdk>.

Например, поставщик содержимого Calendar был добавлен в Android 4.0 (уровень API 14). Если ваше приложение не может работать без данного API, нужно указать минимальную версию в манифесте:

Атрибут minSdkVersion описывает минимальную версию, необходимую для работы приложения. Другой атрибут, targetSdkVersion описывает самую большую версию, под которую оптимизировано приложение.

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

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

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

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

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

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

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

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

Не технические причины доступности приложения

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

Фильтры для технической совместимости всегда располагаются в APK файле. В то время, как фильтры для не технических причин, всегда создаются в панели разработчика Google Play.

Добавить комментарий