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 | Результат |
---|---|---|
<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 следующим образом:
- Откройте проект и выберите «Выполнить» > «Редактировать конфигурации» .
- Щелкните знак плюса в верхнем левом углу окна «Конфигурации запуска/отладки» .
- Выберите Градл.
- Введите «Неподписанный 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. Играть. Если ваше приложение поддерживает устройства только с фронтальными камерами, объявите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 | | |
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 |