<использует-функцию>

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> является информирование любого внешнего объекта о наборе аппаратных и программных функций, от которых зависит ваше приложение. Элемент предлагает 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> вашего приложения в рамках обработки вашего приложения или взаимодействия с ним. По этой причине очень важно объявить все функции, которые использует ваше приложение.

Для некоторых функций может существовать специальный атрибут, позволяющий определить версию функции, например используемую версию Open GL (объявленную с помощью 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 во время выполнения, см. в руководстве OpenGL ES API .

представлено в:
API уровня 4
см. также:

Google Play и фильтрация по функциям

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

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

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

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

Когда пользователь запускает Google Play, приложение запрашивает у менеджера пакетов список функций, доступных на устройстве, вызывая getSystemAvailableFeatures() . Затем приложение Store передает список функций в Google Play при установлении сеанса для пользователя.

Каждый раз, когда вы загружаете приложение в консоль Google Play, 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

Google Play применяет немного другие правила, чем описанные в предыдущем примере, при определении фильтрации для Bluetooth.

Если приложение объявляет разрешение 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, но не объявляет функцию Bluetooth в элементе <uses-feature> .

Если minSdkVersion ... и targetSdkVersion Результат
<=4 или <uses-sdk> не объявлен <= 4 Google Play не фильтрует приложение ни на каких устройствах на основании заявленной поддержки функции android.hardware.bluetooth .
<= 4 >=5 Google Play фильтрует приложение со всех устройств, которые не поддерживают функцию android.hardware.bluetooth (включая более старые версии).
>=5 >=5

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

В первом примере приложение, предназначенное для работы на более старых уровнях API, объявляет разрешение Bluetooth, но не объявляет функцию Bluetooth в элементе <uses-feature> .
Результат: Google Play не фильтрует приложение ни с одного устройства.
<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>
Наконец, в следующем случае то же приложение добавляет атрибут android:required="false" .
Результат: Google Play отключает фильтрацию на основе поддержки функций Bluetooth для всех устройств.
<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, для определения функций, которые требуются вашему приложению.

Чтобы использовать инструмент, выполните следующие действия:

  1. Создайте и экспортируйте свое приложение в виде неподписанного APK. Если вы разрабатываете в Android Studio, создайте свое приложение с помощью Gradle следующим образом:
    1. Откройте проект и выберите «Выполнить» > «Редактировать конфигурации» .
    2. Щелкните знак плюса в верхнем левом углу окна «Конфигурации запуска/отладки» .
    3. Выберите Градл.
    4. Введите «Неподписанный APK» в поле «Имя» .
    5. Выберите свой модуль в разделе проекта Gradle .
    6. Введите «собрать» в разделе «Задачи ».
    7. Выберите ОК , чтобы завершить новую настройку.
    8. Убедитесь, что на панели инструментов выбрана конфигурация запуска неподписанного APK , а затем выберите «Выполнить» > «Выполнить «Неподписанный APK» .
    Неподписанный APK-файл можно найти в каталоге < ProjectName >/app/build/outputs/apk/ .
  2. Найдите инструмент aapt2 , если его еще нет в вашем PATH. Если вы используете SDK Tools версии 8 или выше, вы можете найти aapt2 в каталоге < SDK >/build-tools/< tools version number > .

    Примечание. Необходимо использовать версию aapt2 , предоставленную для последнего доступного компонента Build-Tools. Если у вас нет последней версии компонента Build-Tools, загрузите ее с помощью Android SDK Manager .

  3. Запустите 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. Играть. Если ваше приложение поддерживает устройства только с фронтальными камерами, объявите 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
Приложение использует радиофункции устройства Near-Field Communication (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

Приложение использует радиосистему телефонной связи Глобальной системы мобильной связи (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

Приложение отслеживает пять или более отдельных «пальцев» на фальшивом сенсорном интерфейсе. Это расширенная версия функции android.hardware.faketouch . При объявлении по мере необходимости эта функция указывает на то, что приложение совместимо с устройством, только если это устройство имитирует отдельное отслеживание пяти или более пальцев или имеет фактический сенсорный экран.

В отличие от различного MultItouch, определенного android.hardware.touchscreen.multitouch.jazzhand , входные устройства, которые поддерживают Jazzhand MultyTouch с фальшивым сенсорным интерфейсом, не поддерживают все жесты из пяти пальцев, потому что вход преобразуется в движение курсора на экране. То есть жесты с одним пальцем на таком устройстве перемещают курсор, жесты с несколькими пальцами вызывают события сенсорных пальцев, а другие жесты с несколькими пальцами запускают соответствующие многократные события.

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

android.hardware.touchscreen

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

По умолчанию все приложения требуют этой функции и, следовательно, недоступны для устройств, которые предоставляют только эмулированный интерфейс «Fake Touch». Вы можете сделать свое приложение доступным на устройствах, которые предоставляют фальшивый сенсорный интерфейс, или даже на устройствах, которые предоставляют только контроллер D-PAD, явно заявляя, что сенсорный экран не требуется с использованием android.hardware.touchscreen с android:required="false" . Добавьте это объявление, если ваше приложение использует, но не требует реального интерфейса сенсорного экрана. Все приложения, которые явно не требуют android.hardware.touchscreen , также работают на устройствах с android.hardware.faketouch .

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

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

android.hardware.touchscreen.multitouch

В приложении используются основные двухточечные возможности для двухточечных многоточечных, например, для жестов, но приложению не нужно отслеживать штрихи независимо. Это суперсет функции android.hardware.touchscreen .

Используя эту функцию, приложение подразумевает, что оно также использует функцию android.hardware.touchscreen , если только эта родительская функция не объявлена ​​с помощью android:required="false" .

android.hardware.touchscreen.multitouch.distinct

Приложение использует расширенные возможности MultiTouch для устройства для отслеживания двух или более баллов независимо. Эта функция является суперсетом функции android.hardware.touchscreen.multitouch .

Используя эту функцию, приложение подразумевает, что оно также использует функцию android.hardware.touchscreen.multitouch , если только эта родительская функция не объявлена ​​с помощью android:required="false" .

android.hardware.touchscreen.multitouch.jazzhand

Приложение использует расширенные возможности MultItouch для устройства для отслеживания пять или более очков. Эта функция является суперсетом функции android.hardware.touchscreen.multitouch .

Используя эту функцию, приложение подразумевает, что оно также использует функцию android.hardware.touchscreen.multitouch , если только эта родительская функция не объявлена ​​с помощью android:required="false" .

USB -аппаратные функции

android.hardware.usb.accessory
Приложение ведет себя как USB -устройство и подключается к USB -хостам.
android.hardware.usb.host
Приложение использует USB -аксессуары, которые подключены к устройству. Устройство служит USB -хостом.

Вулканские аппаратные функции

android.hardware.vulkan.compute
Приложение использует функции вычислений Vulkan. Эта функция указывает на то, что приложение требует аппаратного ускоренного вулканского реализации. Версия функции показывает, какой уровень дополнительных вычислительных функций, которые приложение требует за пределами требований Vulkan 1.0. Например, если ваше приложение требует поддержки Vulkan Compute 0, объявите следующую функцию:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
Для получения более подробной информации о версии функции см. FEATURE_VULKAN_HARDWARE_COMPUTE .
android.hardware.vulkan.level
Приложение использует функции уровня Vulkan. Эта функция указывает на то, что приложение требует аппаратного ускоренного вулканского реализации. Версия функции показывает, какой уровень необязательных аппаратных функций требует приложения. Например, если ваше приложение требует поддержки аппаратного обеспечения Vulkan, объявить следующую функцию:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
Для получения дополнительной информации о версии функции см. FEATURE_VULKAN_HARDWARE_LEVEL .
android.hardware.vulkan.version
Приложение использует Vulkan. Эта функция указывает на то, что приложение требует аппаратного ускоренного вулканского реализации. Версия функции указывает на минимальную версию поддержки API Vulkan, требуемой приложением. Например, если ваше приложение требует поддержки Vulkan 1.0, объявите следующую функцию:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
Более подробную информацию о версии функции, см. FEATURE_VULKAN_HARDWARE_VERSION .

Функции оборудования Wi-Fi

android.hardware.wifi
Приложение использует 802.11 сетевые функции (Wi-Fi) на устройстве.
android.hardware.wifi.direct
Приложение использует функции Wi-Fi Direct Networking на устройстве.

Программные функции

В этом разделе представлены функции программного обеспечения, поддерживаемые самым текущим выпуском платформы. Чтобы указать, что ваше приложение использует или требует программной функции, объявьте соответствующее значение, начиная с "android.software" , в атрибуте android:name . Каждый раз, когда вы объявляете функцию программного обеспечения, используйте отдельный элемент <uses-feature> .

Функции программного обеспечения для коммуникации

android.software.sip
Приложение использует службы протокола инициации сеанса (SIP). Используя SIP, приложение может поддерживать операции интернет -телефонии, такие как видеоконференции и мгновенные сообщения.
android.software.sip.voip

Приложение использует сервисы голоса на основе SIP через интернет-протокол (VOIP). Используя VoIP, приложение может поддерживать интернет-операции в реальном времени, такие как двусторонние видеоконференции.

Используя эту функцию, приложение подразумевает, что оно также использует функцию android.software.sip , если только эта родительская функция не объявлена ​​с помощью android:required="false" .

android.software.webview
Приложение отображает контент из Интернета.

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

android.software.input_methods
В приложении используется новый метод ввода, который разработчик определяет в InputMethodService .

Функции программного обеспечения для управления устройствами

android.software.backup
Приложение включает в себя логику для обработки резервного копирования и восстановления.
android.software.device_admin
Приложение использует администраторы устройств для обеспечения политики устройства.
android.software.managed_users
Приложение поддерживает вторичных пользователей и управляемых профилей.
android.software.securely_removes_users
Приложение может навсегда удалить пользователей и связанные с ними данные.
android.software.verified_boot
Приложение включает в себя логику для обработки результатов проверенной функции загрузки устройства, которая обнаруживает, изменяется ли конфигурация устройства во время операции перезапуска.

Функции программного обеспечения для медиа

android.software.midi
Приложение подключается к музыкальным инструментам или звучанию выходов, используя протокол музыкального инструмента цифрового интерфейса (MIDI).
android.software.print
Приложение включает в себя команды для печати документов, отображаемых на устройстве.
android.software.leanback
Приложение предназначено для работы на Android TV -устройствах.
android.software.live_tv
Приложение транслирует живые телевизионные программы.

Функции программного обеспечения для интерфейса экрана

android.software.app_widgets
Приложение использует или предоставляет виджеты приложений и предназначено только для устройств, которые включают домашний экран или аналогичное место, где пользователи могут встраивать виджеты приложений.
android.software.home_screen
Приложение ведет себя как замена на главном экране устройства.
android.software.live_wallpaper
Приложение использует или предоставляет обои, которые включают анимацию.

Разрешения, которые подразумевают требования к функциям

Некоторые аппаратные и программные константы предоставляются приложениям после соответствующего API. Из-за этого некоторые приложения могут использовать API до того, как они смогут заявить, что им требуется API с использованием системы <uses-feature> .

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

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

<uses-feature> объявления, в том числе любой объявленный android:required атрибут, всегда получают приоритет над функциями, подразумеваемыми разрешениями в таблице 2. Для любого из этих разрешений вы можете отключить фильтрацию на основе подразумеваемой функции, явно объявив эту функцию в <uses-feature> Элемент с required атрибутом, установленным в false .

Например, чтобы отключить фильтрацию на основе разрешения CAMERA , добавьте следующие объявления <uses-feature> в файле манифеста:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

ВНИМАНИЕ: Если ваше приложение предназначено для Android 5.0 (API уровня 21) или выше, и использует разрешение на ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION для получения обновлений местоположения из сети или GPS, соответственно, вы также должны явно заявить, что ваше приложение использует android.hardware.location.network или android.hardware.location.gps аппаратные функции.

Таблица 2. Разрешения устройства, которые подразумевают использование аппаратного обеспечения устройства.

Категория Разрешение Подразумеваемое требование к функции
Bluetooth BLUETOOTH android.hardware.bluetooth

Смотрите специальную обработку для функции Bluetooth для деталей.

BLUETOOTH_ADMIN android.hardware.bluetooth
Камера CAMERA android.hardware.camera
android.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

android.hardware.location

android.hardware.location.network (только тогда, когда уровень API -целевого API составляет 20 или ниже.)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (только тогда, когда уровень API -целевого API составляет 20 или ниже.)

Микрофон 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