lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Фильтры в Google Play

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

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

Фильтрация в Google Play частично основывается на декларациях в манифесте и прочих аспектах платформы Android, но фактические функции фильтрации определяются именно самой платформой и не связаны с конкретными уровнями API-интерфейсов. В этом документе описываются действующие сейчас правила фильтрации в Google Play.

Как работают фильтры в Google Play

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

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

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

Можно использовать любые комбинации доступных фильтров для своих приложений. Например, можно установить для minSdkVersion требуемое значение "4" и задать smallScreens="false" в самом приложении, тогда при загрузке приложения в Google Play можно будет нацелить приложение только на определенные европейские страны (или операторов связи). Таким образом, фильтры Google Play делают приложение недоступным на любом устройстве, не соответствующем всем трем приведенным требованиям.

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

Фильтрация на веб-сайте Google Play

При просмотре веб-сайта Google Play пользователи могут увидеть все опубликованные приложения. На веб-сайте Google Play выполняется проверка на соответствие требованиям приложения для каждого из зарегистрированных устройств пользователя, разрешая установку приложения только на совместимое с ним устройство.

Фильтрация с учетом манифеста приложения

Большинство фильтров запускаются определенными элементами в файле манифеста приложения – AndroidManifest.xml (хотя не все содержимое файла манифеста может запускать фильтрацию). В таблице 1 перечислены элементы манифеста, которые использоваться для запуска фильтрации, а также объясняется как работает фильтрация по каждому из элементов.

Таблица 1. Элементы манифеста, которые запускают фильтрацию в Google Play.

Элемент манифеста Имя фильтра Как это работает
<supports-screens> Размер экрана

Поддерживаемые приложением размеры экрана определяются путем установки атрибутов для элемента <supports-screens>. При публикации приложения Google Play использует эти атрибуты для определения того, показывать или нет это приложение пользователям, учитывая размеры экранов их устройств.

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

Если для приложения не задекларированы атрибуты элемента <supports-screens>, Google Play использует стандартные значения для этих атрибутов, которые зависят от уровня API-интерфейса. С учетом следующих особенностей.

  • В приложениях, для которых в параметрах android: minSdkVersion или android: targetSdkVersion установлено значение 3 или ниже, сам элемент <supports-screens> не определен и какие-либо атрибуты для него отсутствуют. В этом случае в Google Play предполагается, что это приложение разработано для экранов нормального размера и его показывают для устройств с обычным и большим размером экранов.

  • Если для какого-либо из элементов android: minSdkVersion или android: targetSdkVersion установлено значение 4 или выше, по умолчанию для все атрибутов устанавливается "true". При этом подразумевается, что приложение поддерживает все размеры экранов по умолчанию.

Пример 1
В манифесте декларируется <uses-sdk android:minSdkVersion="3"> и не содержится элемент <supports-screens>. Результат: Google Play не показывает это приложение пользователю устройства с маленьким экраном, но приложение доступно пользователям устройств с нормальными и большими экранами, пока не будут применены другие фильтры.

Пример 2
В манифесте декларируется <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"> и не содержится элемент <supports-screens>. Результат: Google Play показывает это приложение пользователям всех устройств, пока не будут применены другие фильтры.

Пример 3
В манифесте декларируется <uses-sdk android:minSdkVersion="4"> и не содержится элемент <supports-screens>. Результат: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.

Дополнительную информацию о том, как декларировать поддержку размеров экранов в своем приложении см. в документах <supports-screens> и Поддержка нескольких экранов.

<uses-configuration> Конфигурация устройства:
клавиатура, средства навигации, сенсорный экран

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

Пример 1
В манифесте содержится декларация <uses-configuration android:reqFiveWayNav="true" />, а пользователь ищет приложения, в которых отсутствует 5-позиционный джойстик. Результат: Google Play не показывает это приложение пользователю.

Пример 2
В манифесте не содержится элемент <uses-configuration>. Результат: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.

Чтобы получить более подробную информацию, см. <uses-configuration>.

<uses-feature> Функции устройства
(name)

Приложением могут запрашиваться определенные аппаратные возможности, которые должны поддерживаться устройством. Эта функциональность появилась в Android 2.0 (уровень 5 API-интерфейса).

Пример 1
В манифесте содержится декларация <uses-feature android:name="android.hardware.sensor.light" />, а пользователь ищет приложения для устройства, в котором отсутствует датчик освещенности. Результат: Google Play не показывает это приложение пользователю.

Пример 2
В манифесте не содержится элемент <uses-feature> . Результат: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.

Чтобы получить более подробную информацию, см. <uses-feature> .

Фильтрация на основе подразумеваемых функций: В некоторых случаях Google Play интерпретирует права доступа, запрошенные с помощью элементов <uses-permission>, эквивалентно требованиям наличия возможностей, как если бы они декларировались элементами <uses-feature>. См. раздел <uses-permission>, приведенный ниже.

Версия OpenGL-ES
(openGlEsVersion)

Приложение может запросить, чтобы устройством поддерживалась определенная версия OpenGL-ES, используя атрибут <uses-feature android:openGlEsVersion="int">.

Пример 1
Приложение запрашивает несколько версий OpenGL-ES, указав атрибут openGlEsVersion несколько раз в манифесте. Результат: В этом случае Google Play предполагает, что приложению требуется самая последняя из указанных версий.

Пример 2
Приложение запрашивает OpenGL-ES версии 1.1, а пользователь ищет приложения для устройства, поддерживающего OpenGL-ES версии 2.0. Результат: Google Play показывает это приложение пользователю, пока не будут применены другие фильтры. Если устройство сообщает о поддержке OpenGL-ES версии X, Google Play предполагает, что устройством также поддерживаются все версии, предшествующие X.

Пример 3
Пользователь ищет приложения для устройства, которое не сообщает о поддержке OpenGL-ES (например, устройство с Android 1.5 или более ранними версиями). Результат: Google Play предполагает, что устройство поддерживает только OpenGL-ES 1.0. Google Play будет показывать пользователю приложения, для которых не указан атрибут openGlEsVersion, а также приложения, для которых указан OpenGL-ES версии 1.0.

Пример 4
В манифесте не указан атрибут openGlEsVersion. Результат: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.

Чтобы получить более подробную информацию, см. <uses-feature>.

<uses-library> Программные библиотеки

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

Пример 1
Приложение запрашивает библиотеку com.google.android.maps, а пользователь ищет приложения для устройства, на котором нет библиотеки com.google.android.maps. Результат: Google Play не показывает это приложение пользователю.

Пример 2
В манифесте не содержится элемент <uses-library>. Результат: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.

Чтобы получить более подробную информацию, см. <uses-library>.

<uses-permission>   Собственно, Google Play не выполняет фильтрацию по элементам <uses-permission>. Однако эти элементы считываются для определения того, есть ли у приложения какие-либо требования к аппаратным компонентам, которые, возможно, не были правильно задекларированы элементами <uses-feature>. Например, если приложение запрашивает доступ к компоненту CAMERA, но в его манифесте не задекларирован элемент <uses-feature> для android.hardware.camera, Google Play считает, что для приложения требуется камера и его не следует показывать пользователям, в чьих устройствах нет камеры.

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

Список возможных прав доступа, подразумевающих наличие определенных аппаратных компонентов, можно найти в документации для элемента <uses-feature>.

<uses-sdk> Минимальная версия платформы (minSdkVersion)

Для приложения может требоваться минимально необходимый уровень API-интерфейса.

Пример 1
Манифест содержит атрибут <uses-sdk android:minSdkVersion="3">, и приложение использует API-интерфейсы, которые появились для уровня 3 API-интерфейса. Пользователь ищет приложения для устройства, поддерживающего уровень 2 API-интерфейса. Результат: Google Play не показывает это приложение пользователю.

Пример 2
Манифест не содержит атрибут minSdkVersion, а приложение использует API-интерфейсы, которые появились для уровня 3 API-интерфейса. Пользователь ищет приложения для устройства, поддерживающего уровень 2 API-интерфейса. Результат: Google Play считает, что для атрибута minSdkVersion установлено значение "1", а значит приложение совместимо со всеми версиями Android. Google Play показывает это приложение пользователю и позволяет загрузить его. Запуск приложения завершается ошибкой.

Поскольку вы сами заинтересованы в том, чтобы избежать подобного сценария, рекомендуем всегда декларировать атрибут minSdkVersion. Чтобы получить более подробную информацию, см. android:minSdkVersion.

Максимальная версия платформы (maxSdkVersion)

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

Декларирование атрибута maxSdkVersion не рекомендуется. Чтобы получить более подробную информацию, см. android:maxSdkVersion.

Расширенные фильтры манифеста

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

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

Таблица 2. Расширенные элементы манифеста для фильтрации в Google Play.

Элемент манифестаСводная информация
<compatible-screens>

Google Play отфильтровывает приложение, если размер и разрешение экрана устройства не соответствуют какой-либо конфигурации экрана(декларируемые элементом <screen>) в элементе <compatible-screens>.

Внимание! В обычной практике вы не должны использовать этот элемент манифеста. Применение этого элемента существенно сокращает число потенциальных пользователей вашего приложения, исключая все комбинации размеров и разрешения экрана, которые не указаны в списке. Вместо этого используйте элемент манифеста <supports-screens> (описанный выше в таблице 1), чтобы определить режим совместимости для неучтенных альтернативными ресурсами конфигураций экранов.

<supports-gl-texture>

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

Другие фильтры

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

Таблица 3. Характеристики публикации и приложения, которые влияют на фильтрацию в Google Play.

Имя фильтра Как это работает
Статус публикации

Только опубликованные приложения будут отображаться при просмотре каталога и поиске в Google Play.

Даже если приложение не опубликовано, его можно установить, если пользователи видят его в своей области "Загрузки" среди своих купленных, загруженных или недавно удаленных приложений.

Если приложение было исключено из каталога, пользователи не смогут повторно установить или обновить его, даже если оно показано в их "Загрузках".

Ценовой статус

Не все пользователи могут видеть платные приложения. Для отображения платных приложений на устройстве должна быть SIM-карта, оно должно работать под управлением Android 1.1 или более поздней версии, а вы должны находиться в стране (определяемой оператором SIM-карты), где разрешена загрузка платных приложений.

Определение страны назначения

При выгрузке своего приложения в Google Play можно указать страны, в которых будет распространяться приложение, сделав это в разделеЦены и распространение. После этого приложение будет доступно только пользователям в выбранных странах.

Архитектура процессора (ABI)

Приложение, которое содержит специфичные библиотеки, предназначенные для какой-то определенной процессорной архитектуры (например, ARM EABI v7 или x86) видны только на устройствах, поддерживающих эту архитектуру. Чтобы получить дополнительную информацию об NDK и работе с такими библиотеками, см. Что такое Android NDK?

Защищенные от копирования приложения

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

Публикация нескольких пакетов APK с различными фильтрами

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

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

  • Форматы сжатия текстур OpenGL

    Используя элемент <supports-gl-texture>.

  • Размер экрана (а в некоторых случаях и разрешение)

    Используя элемент <supports-screens> или <compatible-screens>.

  • Уровень API-интерфейса

    Используя элемент <uses-sdk>.

  • Архитектура процессора (ABI)

    Включая специфичные библиотеки, созданные на основе Android NDK, которые предназначены для определенной процессорной архитектуры (например, ARM EABI v7 или x86).

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

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

Чтобы получить дополнительную информацию о том, как опубликовать несколько пакетов APK в Google Play, см. Поддержка нескольких пакетов APK.