Google Play использует элементы <uses-feature> , указанные в манифесте вашего приложения, для фильтрации вашего приложения на устройствах, которые не соответствуют его требованиям к аппаратным и программным функциям.
Указав необходимые для вашего приложения функции, вы позволяете Google Play показывать ваше приложение только пользователям, устройства которых соответствуют требованиям к функциям приложения, а не всем пользователям.
Важную информацию о том, как Google Play использует функции в качестве основы для фильтрации, см. в разделе «Google Play и фильтрация на основе функций» .
Для получения информации о добавлении функций в ваши приложения см. раздел «Повышение доступности приложения на разных типах устройств» .
- синтаксис:
<uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer" />
- содержится в:
-
<manifest> - описание:
Объявляет единственную аппаратную или программную функцию, используемую приложением.
Цель объявления `
<uses-feature>` — сообщить любому внешнему объекту о наборе аппаратных и программных функций, от которых зависит ваше приложение. Элемент `<uses-feature>` имеет атрибутrequired, который позволяет указать, требует ли ваше приложение заявленной функции и не может ли оно функционировать без неё, или же предпочитает иметь эту функцию, но может функционировать и без неё.Поскольку поддержка функций может различаться на разных устройствах Android, элемент
<uses-feature>играет важную роль, позволяя приложению описывать используемые им функции, зависящие от устройства.Набор доступных функций, объявленных вашим приложением, соответствует набору констант функций, предоставляемых Android
PackageManager. Константы функций перечислены в разделе « Справочник по функциям» этого документа.Каждую функцию необходимо указывать в отдельном элементе
<uses-feature>, поэтому, если вашему приложению требуется несколько функций, оно объявляет несколько элементов<uses-feature>. Например, приложение, которому требуются функции Bluetooth и камеры в устройстве, объявляет следующие два элемента:<uses-feature android:name="android.hardware.bluetooth" android:required="true" /> <uses-feature android:name="android.hardware.camera.any" android:required="true" />
В целом, для всех функций, необходимых вашему приложению, всегда следует объявлять элементы
<uses-feature>.Объявленные элементы
<uses-feature>носят исключительно информационный характер, то есть система Android сама не проверяет наличие соответствующей поддержки функций на устройстве перед установкой приложения.Однако другие сервисы, такие как Google Play, и приложения могут проверять объявления
<uses-feature>` вашего приложения в процессе обработки или взаимодействия с ним. Поэтому очень важно объявить все функции, которые использует ваше приложение.Для некоторых функций может существовать специальный атрибут, позволяющий определить версию функции, например, используемую версию OpenGL (объявляется с помощью
glEsVersion). Другие функции, которые либо существуют, либо отсутствуют для устройства, например, камера, объявляются с помощью атрибутаname.Хотя элемент
<uses-feature>активируется только для устройств, работающих под управлением API уровня 4 или выше, включите эти элементы для всех приложений, даже еслиminSdkVersionравен 3 или ниже. Устройства, работающие под управлением более старых версий платформы, игнорируют этот элемент.Примечание: При объявлении функции помните, что вы также должны запросить соответствующие разрешения. Например, вам необходимо запросить разрешение
CAMERA, прежде чем ваше приложение сможет получить доступ к API камеры. Запрос разрешения предоставляет вашему приложению доступ к соответствующему оборудованию и программному обеспечению. Объявление функций, используемых вашим приложением, помогает обеспечить надлежащую совместимость с устройствами.- атрибуты:
-
android:name - Указывает одну аппаратную или программную функцию, используемую приложением, в виде строки-дескриптора. Допустимые значения атрибутов перечислены в разделах «Аппаратные функции» и «Программные функции» . Значения атрибутов чувствительны к регистру.
-
android:required - Логическое значение, указывающее, требуется ли приложению функция, указанная в
android:name.- Объявление параметра
android:required="true"для функции указывает на то, что приложение не может функционировать или не предназначено для функционирования , если указанная функция отсутствует на устройстве. - Объявление параметра
android:required="false"для функции указывает на то, что приложение использует эту функцию, если она присутствует на устройстве, но при необходимости оно способно функционировать и без указанной функции .
Значение по умолчанию для
android:required—"true". - Объявление параметра
-
android:glEsVersion - Требуемая для приложения версия OpenGL ES. Старшие 16 бит представляют собой основной номер, а младшие 16 бит — дополнительный номер. Например, чтобы указать версию OpenGL ES 2.0, установите значение "0x00020000", а чтобы указать OpenGL ES 3.2, установите значение "0x00030002".
В манифесте приложения указывается не более одного атрибута
android:glEsVersion. Если указано более одного, используется атрибутandroid:glEsVersionс наибольшим числовым значением, а все остальные значения игнорируются.Если в описании приложения не указан атрибут
android:glEsVersion, предполагается, что приложению требуется только OpenGL ES 1.0, который поддерживается всеми устройствами на базе Android.Приложение может исходить из того, что если платформа поддерживает определенную версию OpenGL ES, то она также поддерживает все более ранние версии OpenGL ES. Поэтому для приложения, которому требуются как OpenGL ES 1.0, так и OpenGL ES 2.0, следует указать, что ему требуется OpenGL ES 2.0.
Для приложения, способного работать с несколькими версиями OpenGL ES, следует указывать только самую низкую по численному значению версию OpenGL ES, которая ему необходима. Проверка доступности более высокой версии OpenGL ES может быть выполнена во время выполнения.
Для получения дополнительной информации об использовании OpenGL ES, в том числе о том, как проверить поддерживаемую версию OpenGL ES во время выполнения, см. руководство по API OpenGL ES .
-
- введено в:
- Уровень API 4
- См. также:
Google Play и фильтрация на основе функций
Google Play фильтрует приложения, доступные пользователям, чтобы они могли видеть и загружать только те приложения, которые совместимы с их устройством. Один из способов фильтрации приложений — это функциональная совместимость.
Для определения совместимости функций приложения с устройством конкретного пользователя Google Play сравнивает следующие параметры:
- Функции, необходимые приложению, указаны в элементах
<uses-feature>в манифесте приложения. - Доступные на устройстве функции, как в аппаратном, так и в программном обеспечении, отображаются с помощью системных свойств, доступных только для чтения.
Для точного сравнения функций менеджер пакетов Android предоставляет общий набор констант функций, которые используются как приложениями, так и устройствами для объявления требований к функциям и их поддержки. Доступные константы функций перечислены в разделе « Справочник по функциям» в этом документе и в документации класса PackageManager .
Когда пользователь запускает Google Play, приложение запрашивает у менеджера пакетов список доступных на устройстве функций, вызывая метод getSystemAvailableFeatures() . Затем приложение из магазина передает этот список функций в Google Play при установлении сессии для пользователя.
Каждый раз, когда вы загружаете приложение в Google Play Console, Google Play сканирует файл манифеста приложения. Он ищет элементы <uses-feature> и оценивает их в сочетании с другими элементами, в некоторых случаях, такими как <uses-sdk> и <uses-permission> . После определения набора необходимых функций приложения, он сохраняет этот список внутри системы в виде метаданных, связанных с APK-файлом приложения и его версией.
Когда пользователь ищет или просматривает приложения в приложении Google Play, сервис сравнивает необходимые для каждого приложения функции с функциями, доступными на устройстве пользователя. Если все необходимые функции приложения присутствуют на устройстве, Google Play позволяет пользователю увидеть приложение и, возможно, загрузить его.
Если какая-либо необходимая функция не поддерживается устройством, Google Play фильтрует приложение, чтобы оно не было видно пользователю или не было доступно для загрузки.
Поскольку функции, которые вы объявляете в элементах <uses-feature> напрямую влияют на то, как Google Play фильтрует ваше приложение, важно понимать, как Google Play оценивает манифест приложения и устанавливает набор необходимых функций. В следующих разделах представлена более подробная информация.
Фильтрация на основе явно заявленных характеристик.
Явно объявленная функция — это функция, которую ваше приложение объявляет в элементе <uses-feature> . Объявление функции может включать атрибут android:required=["true" | "false"] , если вы компилируете приложение с уровнем API 5 или выше.
Это позволяет указать, требуется ли приложению данная функция, и не может ли оно корректно функционировать без неё ( "true" ), или же оно использует эту функцию, если она доступна, но предназначено для работы без неё ( "false" ).
Google Play обрабатывает явно заявленные функции следующим образом:
- Если какая-либо функция явно указана как обязательная, как показано в следующем примере, Google Play добавляет эту функцию в список обязательных функций для приложения. Затем он фильтрует приложение для пользователей, использующих устройства, которые не поддерживают эту функцию.
<uses-feature android:name="android.hardware.camera.any" android:required="true" />
- Если функция явно указана как необязательная , как показано в следующем примере, Google Play не добавляет эту функцию в список обязательных. По этой причине явно указанная необязательная функция никогда не учитывается при фильтрации приложения. Даже если устройство не предоставляет указанную функцию, Google Play все равно считает приложение совместимым с устройством и показывает его пользователю, если не применяются другие правила фильтрации.
<uses-feature android:name="android.hardware.camera" android:required="false" />
- Если функция явно указана, но без атрибута
android:required, Google Play предполагает, что эта функция является обязательной, и устанавливает фильтрацию по ней.
В целом, если ваше приложение предназначено для работы на Android 1.6 и ниже, атрибут android:required недоступен в API, и Google Play предполагает, что все объявления <uses-feature> являются обязательными.
Примечание: Явно указав функцию и добавив атрибут android:required="false" , вы можете фактически отключить всю фильтрацию в Google Play для указанной функции.
Фильтрация на основе неявных признаков
Неявная функция — это функция, необходимая приложению для корректной работы, но не объявленная в элементе <uses-feature> в файле манифеста. Строго говоря, лучше всего, чтобы каждое приложение всегда объявляло все функции, которые оно использует или требует, и отсутствие объявления для функции, используемой приложением, может считаться ошибкой.
Однако, в качестве меры предосторожности для пользователей и разработчиков, Google Play проверяет наличие неявных функций в каждом приложении и устанавливает фильтры для этих функций, как и для явно заявленных.
Приложению может потребоваться какая-либо функция, но оно может не заявлять о ней по следующим причинам:
- Приложение было скомпилировано с использованием более старой версии библиотеки Android (Android 1.5 или более ранней), для которой элемент
<uses-feature>недоступен. - Разработчик ошибочно предполагает, что эта функция присутствует на всех устройствах и поэтому её объявление не требуется.
- Разработчик по ошибке пропустил объявление о наличии этой функции.
- Разработчик явно объявляет о наличии функции, но это объявление недействительно. Например, орфографическая ошибка в имени элемента
<uses-feature>или нераспознанное строковое значение атрибутаandroid:nameделают объявление функции недействительным.
Чтобы учесть подобные случаи, Google Play пытается определить подразумеваемые функциональные требования приложения, анализируя другие элементы, указанные в файле манифеста, в частности, элементы <uses-permission> .
Если приложение запрашивает разрешения, связанные с оборудованием, Google Play предполагает, что приложение использует базовые аппаратные функции и, следовательно, требует их, даже если нет соответствующих объявлений <uses-feature> . Для таких разрешений Google Play добавляет базовые аппаратные функции в метаданные, которые он хранит для приложения, и устанавливает для них фильтры.
Например, если приложение запрашивает разрешение CAMERA , Google Play предполагает, что приложению требуется задняя (обращенная к окружающему миру) камера, даже если приложение не объявляет элемент <uses-feature> для android.hardware.camera . В результате Google Play фильтрует устройства, у которых нет задней камеры.
Если вы не хотите, чтобы Google Play выполнял фильтрацию на основе определенной подразумеваемой функции, явно объявите эту функцию в элементе <uses-feature> и добавьте атрибут android:required="false" . Например, чтобы отключить фильтрацию, подразумеваемую разрешением CAMERA , объявите следующие функции:
<uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
Внимание: запрашиваемые вами разрешения в элементах <uses-permission> могут напрямую влиять на то, как Google Play фильтрует ваше приложение. В разделе «Разрешения, подразумевающие функциональные требования» перечислен полный набор разрешений, которые подразумевают функциональные требования и, следовательно, запускают фильтрацию.
Специальная обработка функции Bluetooth.
При определении критериев фильтрации для Bluetooth в Google Play применяются несколько иные правила, чем описано в предыдущем примере.
Если приложение объявляет разрешение на использование Bluetooth в элементе <uses-permission> , но не объявляет явно эту функцию Bluetooth в элементе <uses-feature> , Google Play проверяет версию(и) платформы Android, на которой предназначено работать приложение, как указано в элементе <uses-sdk> .
Как показано в следующей таблице, Google Play включает фильтрацию по функции Bluetooth только в том случае, если приложение указывает свою самую низкую или целевую платформу как Android 2.0 (уровень API 5) или выше. Однако следует отметить, что Google Play применяет обычные правила фильтрации, когда приложение явно указывает функцию Bluetooth в элементе <uses-feature> .
Таблица 1. Как Google Play определяет требование к наличию функции Bluetooth для приложения, запрашивающего разрешение на использование Bluetooth, но не объявляющего о наличии этой функции в элементе <uses-feature> .
minSdkVersion равен ... | targetSdkVersion — | Результат |
|---|---|---|
<uses-sdk> не объявлен | <=4 | Google Play не фильтрует приложение на каких-либо устройствах на основе заявленной ими поддержки функции android.hardware.bluetooth . |
| <=4 | >=5 | Google Play фильтрует приложения на устройствах, не поддерживающих функцию android.hardware.bluetooth (включая более старые версии). |
| >=5 | >=5 |
Следующие примеры иллюстрируют различные эффекты фильтрации в зависимости от того, как Google Play обрабатывает функцию Bluetooth.
- В первом примере приложение, предназначенное для работы со старыми версиями API, объявляет разрешение на использование Bluetooth, но не объявляет саму функцию Bluetooth в элементе
- Результат: Google Play не блокирует это приложение ни на одном устройстве.
<uses-feature> .<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" /> ... </manifest>
- Во втором примере то же приложение также указывает целевой уровень API "5".
- Результат: Google Play теперь считает, что эта функция необходима, и фильтрует приложение на всех устройствах, которые не сообщают о поддержке Bluetooth, включая устройства, работающие под управлением более старых версий платформы.
<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
- Здесь же то же самое приложение теперь конкретно указывает на наличие функции Bluetooth.
- Результат: Идентичен предыдущему примеру: фильтрация применена.
<manifest ...> <uses-feature android:name="android.hardware.bluetooth" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
- Наконец, в следующем случае то же приложение добавляет атрибут
- Результат: Google Play отключает фильтрацию на основе поддержки функции Bluetooth для всех устройств.
android:required="false" .<manifest ...> <uses-feature android:name="android.hardware.bluetooth" android:required="false" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
Протестируйте функции, необходимые вашему приложению.
Вы можете использовать инструмент aapt2 , входящий в состав Android SDK, чтобы определить, как Google Play фильтрует ваше приложение на основе заявленных функций и разрешений. Для этого запустите aapt2 с командой dump badging . Это заставит aapt2 проанализировать манифест вашего приложения и применить те же правила, которые использует Google Play для определения функций, необходимых вашему приложению.
Для использования инструмента выполните следующие шаги:
- Соберите и экспортируйте ваше приложение в виде неподписанного APK-файла. Если вы разрабатываете в Android Studio, соберите приложение с помощью Gradle следующим образом:
- Откройте проект и выберите Run > Edit Configurations .
- Выберите знак плюса в верхнем левом углу окна «Настройки запуска/отладки» .
- Выберите Gradle.
- Введите "Неподписанный APK" в поле "Имя ".
- Выберите свой модуль в разделе проекта Gradle .
- В поле «Задачи » введите «собрать».
- Нажмите «ОК» , чтобы завершить настройку.
- Убедитесь, что в панели инструментов выбран параметр "Запуск неподписанного APK" , а затем выберите "Запуск" > "Запустить 'Неподписанный APK'" .
< ProjectName >/app/build/outputs/apk/. - Найдите инструмент
aapt2, если он еще не добавлен в переменную PATH. Если вы используете SDK Tools версии 8 или выше, вы можете найтиaapt2в каталоге< SDK >/build-tools/< tools version number >.Примечание: Необходимо использовать версию
aapt2, предоставленную для последней доступной версии компонента Build-Tools. Если у вас нет последней версии компонента Build-Tools, загрузите её с помощью Android SDK Manager . - Запустите
aapt2, используя следующий синтаксис:
$ aapt2 dump badging <path_to_exported_.apk>
Вот пример вывода команды для второго примера Bluetooth, показанного ранее:
$ ./aapt2 dump badging BTExample.apk package: name='com.example.android.btexample' versionCode='' versionName='' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-feature:'android.hardware.bluetooth' sdkVersion:'3' targetSdkVersion:'5' application: label='BT Example' icon='res/drawable/app_bt_ex.png' launchable activity name='com.example.android.btexample.MyActivity'label='' icon='' uses-feature:'android.hardware.touchscreen' main supports-screens: 'small' 'normal' 'large' locales: '--_--' densities: '160'
Справочник по функциям
В следующих разделах представлена справочная информация о характеристиках аппаратного и программного обеспечения, а также о наборах разрешений, подразумевающих конкретные требования к этим функциям.
Аппаратные характеристики
В этом разделе представлены аппаратные функции, поддерживаемые самой последней версией платформы. Чтобы указать, что ваше приложение использует или требует ту или иную аппаратную функцию, укажите соответствующее значение, начинающееся с "android.hardware" , в атрибуте android:name . Каждый раз, когда вы указываете аппаратную функцию, используйте отдельный элемент <uses-feature> .
Характеристики аудиооборудования
-
android.hardware.audio.low_latency - Приложение использует встроенный в устройство аудиопроцессор с низкой задержкой, что уменьшает задержки при обработке звукового ввода или вывода.
-
android.hardware.audio.output - Приложение передает звук, используя динамики устройства, аудиоразъем, возможности потоковой передачи по Bluetooth или аналогичный механизм.
-
android.hardware.audio.pro - Приложение использует высококачественные аудиофункции и возможности устройства.
-
android.hardware.microphone - Приложение записывает звук с помощью микрофона устройства.
Аппаратные характеристики Bluetooth
-
android.hardware.bluetooth - Приложение использует функции Bluetooth устройства, как правило, для связи с другими устройствами, поддерживающими Bluetooth.
-
android.hardware.bluetooth_le - Приложение использует радиофункции Bluetooth Low Energy устройства.
Характеристики аппаратного обеспечения камеры
Примечание: Чтобы предотвратить ненужную фильтрацию вашего приложения Google Play, добавьте android:required="false" ко всем функциям камеры, без которых ваше приложение может работать. В противном случае Google Play будет считать эту функцию обязательной и не позволит устройствам, не поддерживающим эту функцию, получить доступ к вашему приложению.
Поддержка больших экранов
Некоторые устройства с большими экранами не поддерживают все функции камеры. Chromebook обычно не имеют задних (направленных на окружающее пространство) камер, автофокуса или вспышки. Но у Chromebook есть фронтальные (направленные на пользователя) камеры, и их часто можно подключить к внешним камерам.
Чтобы обеспечить базовую поддержку камеры и сделать ваше приложение доступным для как можно большего количества устройств, добавьте следующие параметры функции камеры в манифест вашего приложения:
<uses-feature android:name="android.hardware.camera.any" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.camera.flash" android:required="false" />
Настройте параметры функций в соответствии с вариантами использования вашего приложения. Однако, чтобы сделать ваше приложение доступным для наибольшего числа устройств, всегда добавляйте атрибут required , чтобы явно указать, является ли функция обязательной.
Список функций
-
android.hardware.camera.any Приложение использует одну из камер устройства или внешнюю камеру, подключенную к устройству. Используйте эту функцию вместо
android.hardware.cameraилиandroid.hardware.camera.front, если вашему приложению не требуется , чтобы камера была направлена назад (в окружающий мир) или вперед (в сторону пользователя) соответственно.Разрешение
CAMERAподразумевает, что ваше приложение также используетandroid.hardware.camera. Задняя камера является обязательной функцией, если толькоandroid.hardware.cameraне объявлено сandroid:required="false".-
android.hardware.camera Приложение использует заднюю (обращенную к окружающему миру) камеру устройства.
Внимание: устройства, такие как Chromebook, имеющие только фронтальную (лицевую) камеру, не поддерживают эту функцию. Используйте
android.hardware.camera.any, если ваше приложение может использовать любую камеру, независимо от направления её съёмки.Примечание: Разрешение
CAMERAподразумевает, что задняя камера является обязательной функцией. Чтобы обеспечить корректную фильтрацию в Google Play, если в манифесте вашего приложения указано разрешениеCAMERA, явно укажите, что ваше приложение использует функциюcamera, и укажите, является ли она обязательной, например:
<uses-feature android:name="android.hardware.camera" android:required="false" />-
android.hardware.camera.front Приложение использует фронтальную (лицевую) камеру устройства.
Разрешение
CAMERAподразумевает, что ваше приложение также используетandroid.hardware.camera. Задняя камера является обязательной функцией, если толькоandroid.hardware.cameraне объявлено сandroid:required="false".Внимание: если ваше приложение использует
android.hardware.camera.front, но явно не объявляетandroid.hardware.cameraс параметромandroid.required="false", устройства без задней камеры (например, Chromebook) будут отфильтрованы Google Play. Если ваше приложение поддерживает устройства только с фронтальной камерой, объявитеandroid.hardware.cameraсandroid.required="false", чтобы предотвратить ненужную фильтрацию.-
android.hardware.camera.external Приложение взаимодействует с внешней камерой, которую пользователь подключает к устройству. Эта функция не гарантирует наличие внешней камеры, которую может использовать ваше приложение.
Разрешение
CAMERAподразумевает, что ваше приложение также используетandroid.hardware.camera. Задняя камера является обязательной функцией, если толькоandroid.hardware.cameraне объявлено сandroid:required="false".-
android.hardware.camera.autofocus Приложение использует функцию автофокусировки, поддерживаемую камерой устройства.
Примечание: Разрешение
CAMERAподразумевает, что автофокус является обязательной функцией. Чтобы обеспечить корректную фильтрацию в Google Play, если в манифесте вашего приложения указано разрешениеCAMERA, явно укажите, что ваше приложение использует функцию автофокуса, и укажите, является ли она обязательной или нет, например:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />.-
android.hardware.camera.flash Приложение использует функцию вспышки, поддерживаемую камерой устройства.
-
android.hardware.camera.capability.manual_post_processing Приложение использует функцию
MANUAL_POST_PROCESSINGподдерживаемую камерой устройства.Эта функция позволяет вашему приложению переопределять функцию автоматической настройки баланса белого камеры. Используйте
android.colorCorrection.transform,android.colorCorrection.gainsиandroid.colorCorrection.modeсо значениемTRANSFORM_MATRIX.-
android.hardware.camera.capability.manual_sensor Приложение использует функцию
MANUAL_SENSOR, поддерживаемую камерой устройства.Эта функция подразумевает поддержку автоматической блокировки экспозиции (
android.control.aeLock), которая позволяет зафиксировать время экспозиции и чувствительность камеры на заданных значениях.-
android.hardware.camera.capability.raw Приложение использует функцию
RAWподдерживаемую камерой устройства.Эта функция подразумевает, что устройство может сохранять файлы DNG (raw). Камера устройства предоставляет метаданные, связанные с DNG, необходимые вашему приложению для непосредственной обработки необработанных изображений.
-
android.hardware.camera.level.full - Приложение использует
FULLуровень поддержки захвата изображений, предоставляемый как минимум одной из камер устройства.FULLподдержка включает в себя возможности серийной съемки, покадровое управление и ручное управление постобработкой. См.INFO_SUPPORTED_HARDWARE_LEVEL_FULL.
Аппаратные характеристики пользовательского интерфейса устройства
-
android.hardware.type.automotive Приложение предназначено для отображения пользовательского интерфейса на наборе экранов внутри автомобиля. Пользователь взаимодействует с приложением с помощью кнопок, сенсорного управления, поворотных контроллеров и интерфейсов, похожих на мышь. Экраны автомобиля обычно располагаются на центральной консоли или приборной панели.
Примечание: Дополнительную информацию об использовании этой функции и рекомендации по созданию приложений для автомобилей см. в разделе «Распространение в автомобили» .
-
android.hardware.type.television (Устарело; используйте
android.software.leanbackвместо него.)Приложение разработано для отображения пользовательского интерфейса на телевизоре. Эта функция определяет «телевизор» как типичный опыт просмотра телевизора в гостиной: приложение отображается на большом экране, пользователь сидит далеко, а основным способом ввода является что-то вроде D-pad, а не мышь, указатель или сенсорное устройство.
-
android.hardware.type.watch - Приложение разработано для отображения пользовательского интерфейса на часах. Часы носятся на теле, например, на запястье. Пользователь находится очень близко к устройству во время взаимодействия с ним.
-
android.hardware.type.pc Приложение предназначено для отображения пользовательского интерфейса на Chromebook. Эта функция отключает эмуляцию ввода для мыши и тачпада, поскольку Chromebook используют аппаратное обеспечение мыши и тачпада. См. раздел «Ввод с помощью мыши» .
Примечание: Установите для этого элемента
required="false"; в противном случае Google Play Store сделает ваше приложение недоступным для устройств, отличных от Chromebook.
Аппаратные функции сканера отпечатков пальцев
-
android.hardware.fingerprint - Приложение считывает отпечатки пальцев с помощью биометрического оборудования устройства.
Аппаратные характеристики геймпада
-
android.hardware.gamepad - Приложение перехватывает ввод с игрового контроллера, либо с самого устройства, либо с подключенного геймпада.
Характеристики инфракрасного оборудования
-
android.hardware.consumerir - Приложение использует инфракрасные (ИК) возможности устройства, как правило, для связи с другими бытовыми ИК-устройствами.
Характеристики аппаратного обеспечения определения местоположения
-
android.hardware.location - Приложение использует одну или несколько функций устройства для определения местоположения, таких как GPS-координаты, местоположение в сети или местоположение по сотовой связи.
-
android.hardware.location.gps Приложение использует точные координаты местоположения, полученные от GPS-приемника, установленного на устройстве.
Использование этой функции подразумевает, что приложение также использует функцию
android.hardware.location, если только эта родительская функция не объявлена с атрибутомandroid:required="false".-
android.hardware.location.network Приложение использует приблизительные координаты местоположения, полученные от сетевой системы геолокации, поддерживаемой устройством.
Использование этой функции подразумевает, что приложение также использует функцию
android.hardware.location, если только эта родительская функция не объявлена с атрибутомandroid:required="false".
Аппаратные функции NFC
-
android.hardware.nfc - Приложение использует функцию радиосвязи ближнего поля (NFC) устройства.
-
android.hardware.nfc.hce Приложение использует эмуляцию NFC-карт, которая размещается на самом устройстве.
Аппаратные характеристики OpenGL ES
-
android.hardware.opengles.aep - Приложение использует пакет расширений OpenGL ES для Android , установленный на устройстве.
Характеристики аппаратного обеспечения датчика
-
android.hardware.sensor.accelerometer - Приложение использует показания акселерометра устройства для определения его текущей ориентации. Например, приложение может использовать показания акселерометра, чтобы определить, когда следует переключаться между портретной и альбомной ориентацией.
-
android.hardware.sensor.ambient_temperature - Приложение использует датчик температуры окружающей среды устройства. Например, приложение погоды может сообщать температуру в помещении или на улице.
-
android.hardware.sensor.barometer - Приложение использует барометр устройства. Например, приложение погоды может сообщать о давлении воздуха.
-
android.hardware.sensor.compass - Приложение использует магнитометр (компас) устройства. Например, навигационное приложение может показывать текущее направление, в котором смотрит пользователь.
-
android.hardware.sensor.gyroscope - Приложение использует гироскоп устройства для определения вращения и поворота, создавая шестиосевую систему ориентации. Благодаря этому датчику приложение может более плавно определять, когда необходимо переключаться между портретной и альбомной ориентацией.
-
android.hardware.sensor.hifi_sensors - Приложение использует высокоточные (Hi-Fi) датчики устройства. Например, игровое приложение может распознавать высокоточные движения пользователя.
-
android.hardware.sensor.heartrate - Приложение использует встроенный в устройство пульсометр. Например, фитнес-приложение может отслеживать динамику частоты сердечных сокращений пользователя с течением времени.
-
android.hardware.sensor.heartrate.ecg - Приложение использует датчик электрокардиограммы (ЭКГ) устройства. Например, фитнес-приложение может предоставлять более подробную информацию о частоте сердечных сокращений пользователя.
-
android.hardware.sensor.light - Приложение использует датчик освещенности устройства. Например, приложение может отображать одну из двух цветовых схем в зависимости от условий окружающего освещения.
-
android.hardware.sensor.proximity - Приложение использует датчик приближения устройства. Например, телефонное приложение может выключать экран устройства, когда обнаруживает, что пользователь держит устройство близко к телу.
-
android.hardware.sensor.relative_humidity - Приложение использует датчик относительной влажности устройства. Например, приложение погоды может использовать данные о влажности для расчета и отображения текущей точки росы.
-
android.hardware.sensor.stepcounter - Приложение использует счетчик шагов устройства. Например, фитнес-приложение может сообщать количество шагов, которые пользователю необходимо сделать, чтобы достичь своей ежедневной цели по количеству шагов.
-
android.hardware.sensor.stepdetector - Приложение использует датчик шагов устройства. Например, фитнес-приложение может использовать временной интервал между шагами, чтобы определить тип выполняемых пользователем упражнений.
Аппаратные характеристики экрана
-
android.hardware.screen.landscape -
android.hardware.screen.portrait Для работы приложения требуется, чтобы устройство использовало портретную или альбомную ориентацию. Если ваше приложение поддерживает обе ориентации, то вам не нужно указывать ни одну из этих функций.
Например, если вашему приложению требуется портретная ориентация, укажите следующую функцию, чтобы ваше приложение могло запускаться только на устройствах, поддерживающих портретную ориентацию (по умолчанию или по выбору пользователя):
<uses-feature android:name="android.hardware.screen.portrait" />
По умолчанию предполагается, что обе ориентации экрана не требуются, поэтому ваше приложение может быть установлено на устройствах, поддерживающих одну или обе ориентации. Однако, если какое-либо из ваших действий запрашивает запуск в определенной ориентации с помощью атрибута
android:screenOrientation, то это объявление подразумевает, что вашему приложению требуется именно эта ориентация.Например, если вы укажете в атрибуте
android:screenOrientationзначение"landscape","reverseLandscape"или"sensorLandscape", то ваше приложение будет доступно только на устройствах, поддерживающих альбомную ориентацию экрана.В качестве лучшей практики, укажите требование к ориентации экрана с помощью элемента `
<uses-feature>`. Если вы задаете ориентацию для своей активности с помощьюandroid:screenOrientationно она вам фактически не нужна, вы можете отключить это требование, указав ориентацию с помощью элемента<uses-feature>` и добавивandroid:required="false".Для обеспечения обратной совместимости любое устройство под управлением Android 3.1 (уровень API 12) или ниже поддерживает как альбомную, так и портретную ориентацию экрана.
Характеристики телефонного оборудования
-
android.hardware.telephony - Приложение использует телефонные функции устройства, такие как радиосвязь с услугами передачи данных.
-
android.hardware.telephony.cdma Приложение использует систему радиосвязи с кодовым разделением каналов (CDMA).
Использование этой функции подразумевает, что приложение также использует функцию
android.hardware.telephony, если только эта родительская функция не объявлена сandroid:required="false".-
android.hardware.telephony.gsm Приложение использует радиотелефонную систему Global System for Mobile Communications (GSM).
Использование этой функции подразумевает, что приложение также использует функцию
android.hardware.telephony, если только эта родительская функция не объявлена сandroid:required="false".
Аппаратные характеристики сенсорного экрана
-
android.hardware.faketouch Приложение использует базовые события сенсорного взаимодействия, такие как касание и перетаскивание.
Если эта функция указана как обязательная, она означает, что приложение совместимо с устройством только в том случае, если это устройство имеет эмулированный сенсорный экран типа «поддельное касание» или имеет настоящий сенсорный экран.
Устройство, предлагающее имитирующий сенсорный интерфейс, предоставляет систему ввода данных, которая эмулирует часть возможностей сенсорного экрана. Например, мышь или пульт дистанционного управления могут управлять экранным курсором.
Если ваше приложение требует базового взаимодействия с помощью мыши и не работает только с D-pad контроллером, укажите эту функцию. Поскольку это минимальный уровень сенсорного взаимодействия, вы также можете использовать приложение, которое указывает эту функцию на устройствах с более сложным сенсорным интерфейсом.
Приложениям по умолчанию требуется функция
android.hardware.faketouch. Если вы хотите, чтобы ваше приложение работало только на устройствах с сенсорным экраном, необходимо явно указать, что требуется сенсорный экран, следующим образом:<uses-feature android:name="android.hardware.touchscreen" android:required="true" />
Все приложения, которые явно не требуют наличия
android.hardware.touchscreen, как показано в следующем примере, также работают на устройствах сandroid.hardware.faketouch.<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
-
android.hardware.faketouch.multitouch.distinct Приложение отслеживает два или более различных «пальца» на интерфейсе, имитирующем сенсорное управление. Это расширенная версия функции
android.hardware.faketouch. Если эта функция указана как обязательная, она означает, что приложение совместимо с устройством только в том случае, если это устройство эмулирует отслеживание двух или более отдельных пальцев или имеет настоящий сенсорный экран.В отличие от уникального мультитач, определенного в
android.hardware.touchscreen.multitouch.distinct, устройства ввода, поддерживающие уникальный мультитач с интерфейсом имитации касания, не поддерживают все жесты двумя пальцами, поскольку ввод преобразуется в перемещение курсора по экрану. То есть, жесты одним пальцем на таком устройстве перемещают курсор, свайпы двумя пальцами вызывают события касания одним пальцем, а другие жесты двумя пальцами запускают соответствующие события касания двумя пальцами.Устройство, оснащенное сенсорной панелью для двух пальцев для перемещения курсора, может поддерживать эту функцию.
-
android.hardware.faketouch.multitouch.jazzhand The app tracks five or more distinct "fingers" on a fake touch interface. This is a superset of the
android.hardware.faketouchfeature. When declared as required, this feature indicates that the app is compatible with a device only if that device emulates distinct tracking of five or more fingers or has an actual touchscreen.Unlike the distinct multitouch defined by
android.hardware.touchscreen.multitouch.jazzhand, input devices that support jazzhand multitouch with a fake touch interface don't support all five-finger gestures, because the input is transformed to cursor movement on the screen. That is, single-finger gestures on such a device move a cursor, multi-finger gestures cause single-finger touch events to occur, and other multi-finger gestures trigger the corresponding multi-finger touch events.A device that provides a five-finger touch trackpad for cursor movement can support this feature.
-
android.hardware.touchscreen The app uses the device's touchscreen capabilities for gestures that are more interactive than basic touch events, such as a fling. This is a superset of the
android.hardware.faketouchfeature.By default, all apps require this feature and therefore aren't available to devices that provide only an emulated "fake touch" interface. You can make your app available on devices that provide a fake touch interface, or even on devices that provide only a D-pad controller, by explicitly declaring that a touchscreen is not required using
android.hardware.touchscreenwithandroid:required="false". Add this declaration if your app uses, but doesn't require, a real touchscreen interface. All apps that don't explicitly requireandroid.hardware.touchscreenalso work on devices withandroid.hardware.faketouch.If your app in fact requires a touch interface, such as to perform more advanced touch gestures like flings, then you don't need to declare any touch interface features, because they're required by default. However, it's best if you explicitly declare all features that your app uses.
If you require more complex touch interaction, such as multi-finger gestures, declare that your app uses advanced touchscreen features.
-
android.hardware.touchscreen.multitouch The app uses the device's basic two-point multitouch capabilities, such as for pinch gestures, but the app doesn't need to track touches independently. This is a superset of the
android.hardware.touchscreenfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreenfeature, unless this parent feature is declared withandroid:required="false".-
android.hardware.touchscreen.multitouch.distinct The app uses the device's advanced multitouch capabilities for tracking two or more points independently. This feature is a superset of the
android.hardware.touchscreen.multitouchfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreen.multitouchfeature, unless this parent feature is declared withandroid:required="false".-
android.hardware.touchscreen.multitouch.jazzhand The app uses the device's advanced multitouch capabilities for tracking five or more points independently. This feature is a superset of the
android.hardware.touchscreen.multitouchfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreen.multitouchfeature, unless this parent feature is declared withandroid:required="false".
USB hardware features
-
android.hardware.usb.accessory - The app behaves as a USB device and connects to USB hosts.
-
android.hardware.usb.host - The app uses the USB accessories that are connected to the device. The device serves as the USB host.
Vulkan hardware features
-
android.hardware.vulkan.compute - The app uses Vulkan compute features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional compute features the app requires beyond the Vulkan 1.0 requirements. For example, if your app requires Vulkan compute level 0 support, declare the following feature:
For more details about the feature version, see<uses-feature android:name="android.hardware.vulkan.compute" android:version="0" android:required="true" />
FEATURE_VULKAN_HARDWARE_COMPUTE. -
android.hardware.vulkan.level - The app uses Vulkan level features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional hardware features the app requires. For example, if your app requires Vulkan hardware level 0 support, declare the following feature:
For more information about the feature version, see<uses-feature android:name="android.hardware.vulkan.level" android:version="0" android:required="true" />
FEATURE_VULKAN_HARDWARE_LEVEL. -
android.hardware.vulkan.version - The app uses Vulkan. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates the minimum version of Vulkan API support the app requires. For example, if your app requires Vulkan 1.0 support, declare the following feature:
For more details about the feature version, see<uses-feature android:name="android.hardware.vulkan.version" android:version="0x400003" android:required="true" />
FEATURE_VULKAN_HARDWARE_VERSION.
Wi-Fi hardware features
-
android.hardware.wifi - The app uses 802.11 networking (Wi-Fi) features on the device.
-
android.hardware.wifi.direct - The app uses the Wi-Fi Direct networking features on the device.
Функции программного обеспечения
This section presents the software features supported by the most current platform release. To indicate that your app uses or requires a software feature, declare the corresponding value, beginning with "android.software" , in an android:name attribute. Each time you declare a software feature, use a separate <uses-feature> element.
Communication software features
-
android.software.sip - The app uses Session Initiation Protocol (SIP) services. By using SIP, the app can support internet telephony operations, such as video conferencing and instant messaging.
-
android.software.sip.voip The app uses SIP-based Voice Over Internet Protocol (VoIP) services. By using VoIP, the app can support real-time internet telephony operations, such as two-way video conferencing.
By using this feature, an app implies that it also uses the
android.software.sipfeature, unless this parent feature is declared withandroid:required="false".-
android.software.webview - The app displays content from the internet.
Custom input software features
-
android.software.input_methods - The app uses a new input method, which the developer defines in an
InputMethodService.
Device management software features
-
android.software.backup - The app includes logic to handle a backup and restore operation.
-
android.software.device_admin - The app uses device administrators to enforce a device policy.
-
android.software.managed_users - The app supports secondary users and managed profiles.
-
android.software.securely_removes_users - The app can permanently remove users and their associated data.
-
android.software.verified_boot - The app includes logic to handle results from the device's verified boot feature, which detects whether the device's configuration changes during a restart operation.
Media software features
-
android.software.midi - The app connects to musical instruments or outputs sound using the Musical Instrument Digital Interface (MIDI) protocol.
-
android.software.print - The app includes commands for printing documents displayed on the device.
-
android.software.leanback - The app is designed to run on Android TV devices.
-
android.software.live_tv - The app streams live television programs.
Screen interface software features
-
android.software.app_widgets - The app uses or provides App Widgets and is intended only for devices that include a Home screen or similar location where users can embed App Widgets.
-
android.software.home_screen - The app behaves as a replacement to the device's Home screen.
-
android.software.live_wallpaper - The app uses or provides wallpapers that include animation.
Permissions that imply feature requirements
Some hardware and software feature constants are made available to applications after the corresponding API. Because of this, some apps might use the API before they can declare that they require the API using the <uses-feature> system.
To prevent those apps from being made available unintentionally, Google Play assumes that certain hardware-related permissions indicate that the underlying hardware features are required by default. For instance, applications that use Bluetooth must request the BLUETOOTH permission in a <uses-permission> element.
For legacy apps, Google Play assumes that the permission declaration means that the underlying android.hardware.bluetooth feature is required by the application and sets up filtering based on that feature. Table 2 lists permissions that imply feature requirements equivalent to those declared in <uses-feature> elements.
<uses-feature> declarations, including any declared android:required attribute, always take precedence over features implied by the permissions in table 2. For any of these permissions, you can disable filtering based on the implied feature by explicitly declaring the feature in a <uses-feature> element with the required attribute set to false .
For example, to disable filtering based on the CAMERA permission, add the following <uses-feature> declarations to the manifest file:
<uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
Caution: If your app targets Android 5.0 (API level 21) or higher and uses the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to receive location updates from the network or a GPS, respectively, you must also explicitly declare that your app uses the android.hardware.location.network or android.hardware.location.gps hardware features.
Table 2. Device permissions that imply device hardware use.
| Категория | Разрешение | Implied feature requirement |
|---|---|---|
| Bluetooth | BLUETOOTH | android.hardware.bluetoothSee Special handling for Bluetooth feature for details. |
BLUETOOTH_ADMIN | android.hardware.bluetooth | |
| Камера | CAMERA | android.hardware.cameraandroid.hardware.camera.autofocus |
| Расположение | ACCESS_MOCK_LOCATION | android.hardware.location |
ACCESS_LOCATION_EXTRA_COMMANDS | android.hardware.location | |
INSTALL_LOCATION_PROVIDER | android.hardware.location | |
ACCESS_COARSE_LOCATION | | |
ACCESS_FINE_LOCATION | | |
| Микрофон | RECORD_AUDIO | android.hardware.microphone |
| Телефония | CALL_PHONE | android.hardware.telephony |
CALL_PRIVILEGED | android.hardware.telephony | |
MODIFY_PHONE_STATE | android.hardware.telephony | |
PROCESS_OUTGOING_CALLS | android.hardware.telephony | |
READ_SMS | android.hardware.telephony | |
RECEIVE_SMS | android.hardware.telephony | |
RECEIVE_MMS | android.hardware.telephony | |
RECEIVE_WAP_PUSH | android.hardware.telephony | |
SEND_SMS | android.hardware.telephony | |
WRITE_APN_SETTINGS | android.hardware.telephony | |
WRITE_SMS | android.hardware.telephony | |
| Wi-Fi | ACCESS_WIFI_STATE | android.hardware.wifi |
CHANGE_WIFI_STATE | android.hardware.wifi | |
CHANGE_WIFI_MULTICAST_STATE | android.hardware.wifi |