Android官方文档—APP清单(uses-feature)

语法:



    

包含于:

说明:

声明应用程序使用的单个硬件或软件功能。

声明的目的是通知任何外部实体您的应用程序所依赖的硬件和软件功能集。该元素提供了一个必需属性,允许您指定应用程序是否需要,并且在没有声明的功能的情况下无法运行,或者它是否更喜欢具有该功能但可以在没有它的情况下运行。由于功能支持可能因Android设备而异,因此元素在让应用程序描述其使用的设备变量功能方面发挥着重要作用。

应用程序声明的可用功能集对应于Android PackageManager提供的功能常量集,这些功能常量列在本文档底部的“功能参考”部分中。

您必须在单独的元素中指定每个要素,因此,如果您的应用程序需要多个要素,则会声明多个元素。例如,需要设备中的蓝牙和相机功能的应用程序将声明这两个元素:


Google Play过滤

Google Play使用应用清单中声明的​​元素,从不符合其硬件和软件功能要求的设备中过滤您的应用。

通过指定应用程序所需的功能,您可以启用Google Play,仅将应用程序呈现给设备符合应用程序功能要求的用户,而不是将其呈现给所有用户。

有关Google Play如何使用功能作为过滤基础的重要信息,请参阅下面的Google Play和基于功能的过滤。

通常,您应始终确保为应用程序所需的所有功能声明元素。

声明的元素仅供参考,这意味着Android系统本身在安装应用程序之前不会检查设备上的匹配功能支持。但是,其他服务(例如Google Play)或应用程序可能会检查您的应用程序的声明,作为处理或与您的应用程序交互的一部分。因此,声明应用程序使用的所有功能(从下面的列表中)非常重要。

对于某些功能,可能存在一个特定属性,允许您定义功能的版本,例如使用的Open GL版本(使用glEsVersion声明)。使用name属性声明设备(例如摄像机)存在或不存在的其他功能。

虽然元素仅对运行API级别4或更高级别的设备激活,但建议将所有应用程序包含这些元素,即使minSdkVersion为“3”或更低。运行旧版本平台的设备将忽略该元素。

注意:声明功能时,请记住您还必须根据需要请求权限。例如,在应用程序可以访问摄像头API之前,您仍必须请求CAMERA权限。请求权限授予您的应用程序访问相应硬件和软件的权限,同时声明应用程序使用的功能可确保正确的设备兼容性。

属性:

android:name

指定应用程序使用的单个硬件或软件功能,作为描述符字符串。 “硬件功能和软件功能”部分中列出了有效的属性值。这些属性值区分大小写。

android:required

布尔值,指示应用程序是否需要android:name中指定的功能。

  • 当您为某个功能声明android:required =“true”时,您指定当设备上没有指定的功能时,该应用程序无法运行或无法运行。
  • 当您为某个功能声明android:required =“false”时,表示该应用程序更喜欢使用该功能(如果存在于设备上),但如果需要,它可以在没有指定功能的情况下运行。

android:默认值如果未声明则为“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 Level 4

参阅:

  • PackageManager
  • FeatureInfo
  • ConfigurationInfo
  • Filters on Google Play

Google Play和基于功能的过滤


Google Play会过滤用户可见的应用程序,以便用户只能查看和下载与其设备兼容的应用程序。过滤应用程序的方法之一是功能兼容性。

要确定应用程序与给定用户设备的功能兼容性,Google Play会比较:

  • 应用程序所需的功能 - 应用程序在其清单中的元素中声明功能与...
  • 设备上可用的功能,硬件或软件 - 设备将其支持的功能报告为只读系统属性。

为确保准确比较功能,Android Package Manager提供了一组共享的功能常量,应用程序和设备都使用这些功能常量来声明功能要求和支持。可用的功能常量列在本文档底部的“功能参考”部分以及PackageManager的类文档中。

当用户启动Google Play时,应用程序会通过调用getSystemAvailableFeatures()向程序包管理器查询设备上可用功能的列表。然后,Store应用程序在为用户建立会话时将功能列表传递到Google Play。

每次将应用程序上传到Google Play开发者控制台时,Google Play都会扫描应用程序的清单文件。它查找元素并在某些情况下与其他元素一起评估它们,例如元素。在建立应用程序的所需功能集之后,它将该列表内部存储为与应用程序.apk和应用程序版本关联的元数据。

当用户使用Google Play应用程序搜索或浏览应用程序时,该服务会将每个应用程序所需的功能与用户设备上可用的功能进行比较。如果设备上存在所有应用程序所需的功能,Google Play允许用户查看该应用程序并可能下载该应用程序。如果设备不支持任何所需功能,Google Play会过滤应用程序,以使用户看不到该应用程序且无法下载。

由于您在元素中声明的功能直接影响Google Play过滤应用的方式,因此了解Google Play如何评估应用的清单并建立所需功能集非常重要。以下部分提供了更多信息。

基于显式声明的功能进行过滤

显式声明的功能是应用程序在元素中声明的功能。功能声明可以包含android:required = [“true”| “false”]属性(如果您正在针对API级别5或更高级别进行编译),它允许您指定应用程序是否绝对需要该功能,并且在没有它的情况下无法正常运行(“true”),或者应用程序是否更喜欢使用该功能如果可用,但设计为在没有它的情况下运行(“假”)。

Google Play以这种方式处理显式声明的功能:

  • 如果明确声明某项功能是必需的,Google Play会将该功能添加到该应用程序所需功能列表中。然后,它会在不提供该功能的设备上过滤用户的应用程序。例如:
  • 如果明确声明某项功能不是必需的,则Google Play不会将该功能添加到所需功能列表中。因此,在过滤应用程序时,从不考虑明确声明的非必需功能。即使设备未提供声明的功能,Google Play仍会认为该应用程序与该设备兼容,并会将其显示给用户,除非适用其他过滤规则。例如:

如果明确声明了某个功能,但没有安装了android:required属性,则Google Play会假定该功能是必需的,并对其进行过滤。

通常,如果您的应用程序设计为在Android 1.6及更早版本上运行,则API中不提供android:required属性,Google Play假定需要任何和所有声明。

注意:通过明确声明功能并包含android:required =“false”属性,您可以有效禁用Google Play上针对指定功能的所有过滤。

基于隐式功能进行过滤

隐式功能是应用程序为了正常运行而需要的功能,但未在清单文件的元素中声明。严格地说,每个应用程序应该始终声明它使用或要求的所有功能,因此应用程序使用的功能的声明的缺失应被视为错误。但是,作为用户和开发人员的安全措施,Google Play会在每个应用程序中查找隐式功能,并为这些功能设置过滤器,就像对显式声明的功能所做的那样。

应用程序可能需要一个功能但不能声明它,因为:

  • 该应用程序是针对较旧版本的Android库(Android 1.5或更早版本)编译的,并且元素不可用。
  • 开发人员错误地认为该功能将出现在所有设备上,并且声明是不必要的。
  • 开发人员意外省略了功能声明。
  • 开发人员明确声明了该功能,但声明无效。例如,元素名称中的拼写错误或android:name属性的无法识别的字符串值将使特征声明无效。

考虑到上述情况,Google Play会尝试通过检查清单文件中声明的其他元素(特别是元素)来发现应用程序的隐含功能要求。

如果应用程序请求与硬件相关的权限,则Google Play会假定应用程序使用基础硬件功能,因此需要这些功能,即使可能没有与声明相对应的功能。对于此类权限,Google Play会将基础硬件功能添加到为应用程序存储的元数据中,并为其设置过滤器。

例如,如果某个应用程序请求CAMERA权限但未为android.hardware.camera声明元素,则Google Play会认为该应用程序需要相机,并且不应向其设备未提供相机的用户显示相机。

如果您不希望Google Play根据特定的隐含功能进行过滤,则可以禁用该行为。为此,请在元素中显式声明该功能,并包含android:required =“false”属性。例如,要禁用从CAMERA权限派生的过滤,您将声明该功能,如下所示。

重要的是要了解您在元素中请求的权限可以直接影响Google Play过滤您的应用程序的方式。参考部分权限暗示要素要求列出了暗示要素要求并因此触发过滤的完整权限集。

蓝牙功能的特殊处理

在确定蓝牙过滤时,Google Play应用的规则与上述规则略有不同。

如果应用程序在元素中声明了蓝牙权限,但未在元素中明确声明蓝牙功能,则Google Play会检查应用程序所在的Android平台的版本。旨在运行,如元素中指定的那样。

如下表所示,仅当应用程序将其最低或目标平台声明为Android 2.0(API级别5)或更高版本时,Google Play才会启用对蓝牙功能的过滤。但请注意,当应用程序在元素中明确声明蓝牙功能时,Google Play会应用常规规则进行过滤。

表1. Google Play如何确定请求蓝牙权限但未在元素中声明蓝牙功能的应用程序的蓝牙功能要求。

如果minSdkVersion是... 或者targetSdkVersion是 Result
<= 4(或未使用-sdk) <=4 Google Play不会根据他们报告的对android.hardware.bluetooth功能的支持从任何设备中过滤应用程序。
<=4 >=5 Google Play会从任何不支持android.hardware.bluetooth功能的设备(包括旧版本)中过滤应用程序。
>=5 >=5

以下示例根据Google Play处理蓝牙功能的方式说明了不同的过滤效果。

在第一个示例中,设计为在较旧的API级别上运行的应用程序声明了蓝牙权限,但未在元素中声明蓝牙功能。
    结果:Google Play不会从任何设备过滤应用程序。


    
    
    ...

在下面的第二个示例中,相同的应用程序还声明目标API级别为“5”。
    结果:Google Play现在假定该功能是必需的,并将从所有未报告蓝牙支持的设备(包括运行旧版平台的设备)中过滤应用程序。


    
    
    ...

现在,相同的应用程序专门声明了蓝牙功能。

    结果:与前一个示例相同(应用过滤)。


    
    
    
    ...

最后,在下面的例子中,同一个应用程序添加了一个android:required =“false”属性。
    结果:Google Play会针对所有设备禁用基于蓝牙功能支持的过滤功能。


    
    
    
    ...

测试应用程序所需的功能

您可以使用Android SDK中包含的aapt工具来确定Google Play如何根据其声明的功能和权限过滤您的应用。为此,请使用dump badging命令运行aapt。这会导致aapt解析您的应用程序的清单,并应用与Google Play使用的相同规则来确定您的应用程序所需的功能。

要使用该工具,请按照下列步骤操作:

1.首先,将您的应用程序构建并导出为未签名的.apk。如果您在Android Studio中进行开发,请使用Gradle构建应用程序:

a.打开项目,然后选择“运行”>“编辑配置”。

b.选择“运行/调试配置”窗口左上角附近的加号。

c.选择Gradle。

d.在名称中输入未签名的APK。

e.从Gradle项目部分选择您的模块。

f.在任务中输入汇编。

g.选择“确定”以完成新配置。

h.确保在工具栏中选择了未签名的APK运行配置,然后选择运行>运行'未签名的APK'。

2.接下来,找到aapt工具(如果它尚未在您的PATH中)。如果您使用的是SDK Tools r8或更高版本,则可以在 / platform-tools /目录中找到aapt。

注意:您必须使用为最新的Platform-Tools组件提供的aapt版本。如果您没有最新的Platform-Tools组件,请使用Android SDK Manager下载它。

3.使用以下语法运行aapt:

$ aapt dump badging 

以下是第二个蓝牙示例的命令输出示例,如上所示:

$ ./aapt 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:name属性中声明相应的值(以“android.hardware”开头)。每次声明硬件功能时,请使用单独的元素。

音频硬件功能

android.hardware.audio.low_latency

该应用程序使用该设备的低延迟音频管道,可减少处理声音输入或输出时的延迟和延迟。

android.hardware.audio.output

该应用程序使用设备的扬声器,音频插孔,蓝牙流功能或类似机制传输声音。

android.hardware.audio.pro

该应用程序使用该设备的高端音频功能和性能。

android.hardware.microphone

该应用程序使用设备的麦克风录制音频。

蓝牙硬件功能

android.hardware.bluetooth

该应用程序使用设备的蓝牙功能,通常用于与其他蓝牙设备通信。

android.hardware.bluetooth_le

该应用程序使用该设备的蓝牙低功耗无线电功能。

相机硬件功能

android.hardware.camera

该应用程序使用该设备的后置摄像头。只有前置摄像头的设备不会列出此功能,因此如果您的应用可以与任何摄像头通信,请使用android.hardware.camera.any功能,无论摄像头朝哪个方向。

android.hardware.camera.any

该应用程序使用设备的一个摄像头,或用户连接到设备的外部摄像头。如果您的应用不需要相机作为背面相机,请使用此值而不是android.hardware.camera。

android.hardware.camera.autofocus

该应用程序使用设备相机支持的自动对焦功能。

通过使用此功能,应用程序暗示它还使用android.hardware.camera功能,除非使用android:required =“false”声明此父功能。

android.hardware.camera.capability.manual_post_processing

该应用程序使用设备相机支持的MANUAL_POST_PROCESSING功能。

此功能允许您的应用覆盖相机的自动白平衡功能。使用android.colorCorrection.transform,android.colorCorrection.gains和TRANSFORM_MATRIX的android.colorCorrection.mode。

android.hardware.camera.capability.manual_sensor

该应用程序使用设备相机支持的MANUAL_SENSOR功能。

此功能意味着支持自动曝光锁定(android.control.aeLock),它允许相机的曝光时间和灵敏度保持固定在特定值

android.hardware.camera.capability.raw

该应用程序使用设备相机支持的RAW功能。

此功能意味着设备可以保存DNG(原始)文件,并且设备的摄像头提供应用程序直接处理这些原始图像所需的DNG相关元数据。

android.hardware.camera.external

该应用程序与用户连接到设备的外部摄像头通信。但是,此功能不保证外部相机可供您的应用使用。

android.hardware.camera.flash

该应用程序使用设备相机支持的闪光灯功能。

通过使用此功能,应用程序暗示它还使用android.hardware.camera功能,除非使用android:required =“false”声明此父功能。

android.hardware.camera.front

该应用程序使用该设备的前置摄像头。

通过使用此功能,应用程序暗示它还使用android.hardware.camera功能,除非使用android:required =“false”声明此父功能。

android.hardware.camera.level.full

该应用程序使用至少一个设备的摄像头提供的全级图像捕获支持。具有全面支持的摄像机提供突发捕获功能,每帧控制和手动后处理控制。

设备UI硬件功能

android.hardware.type.automotive

该应用程序旨在在车辆内的一组屏幕上显示其UI。用户使用硬按钮,触摸,旋转控制器和类似鼠标的界面与应用程序交互。车辆的屏幕通常出现在车辆的中控台或仪表组中。这些屏幕通常具有有限的尺寸和分辨率。

注意:请务必记住,由于用户在使用此类应用UI时正在驾驶,因此应用必须最大限度地减少驾驶员分心。

android.hardware.type.television

(已弃用;请改用android.software.leanback。)

该应用程序旨在在电视上显示其UI。此功能将“电视”定义为典型的客厅电视体验:显示在大屏幕上,用户坐在远处,主要输入形式类似于d-pad,通常不使用鼠标,指针或触摸设备。

android.hardware.type.watch

该应用程序旨在在手表上显示其UI。手表佩戴在手指上,例如手腕上。用户在与设备交互时非常靠近设备。

指纹硬件功能

android.hardware.fingerprint

该应用程序使用设备的生物识别硬件读取指纹。

游戏手柄硬件功能

android.hardware.gamepad

该应用程序从设备本身或从连接的游戏手柄捕获游戏控制器输入。

红外线硬件功能

android.hardware.consumerir

该应用程序使用设备的红外(IR)功能,通常与其他消费者IR设备通信。

位置硬件功能

android.hardware.location

该应用程序使用设备上的一个或多个功能来确定位置,例如GPS位置,网络位置或小区位置。

android.hardware.location.gps

该应用程序使用从设备上的全球定位系统(GPS)接收器获得的精确位置坐标。

通过使用此功能,应用程序暗示它还使用android.hardware.location功能,除非使用属性android:required =“false”声明此父功能。

android.hardware.location.network

该应用程序使用从设备支持的基于网络的地理定位系统获得的粗略位置坐标。

通过使用此功能,应用程序暗示它还使用android.hardware.location功能,除非使用属性android:required =“false”声明此父功能。

NFC硬件功能

android.hardware.nfc

该应用程序使用该设备的近场通信(NFC)无线电功能。

android.hardware.nfc.hce

(不推荐使用。)

该应用程序使用设备上托管的NFC卡模拟。

OpenGL ES硬件功能

android.hardware.opengles.aep

该应用程序使用设备上安装的OpenGL ES Android扩展包。

传感器硬件功能

android.hardware.sensor.accelerometer

该应用程序使用设备加速度计的运动读数来检测设备的当前方向。例如,应用程序可以使用加速度计读数来确定何时在纵向和横向方向之间切换。

android.hardware.sensor.ambient_temperature

该应用程序使用该设备的环境(环境)温度传感器。例如,天气应用程序可以报告室内或室外温度。

android.hardware.sensor.barometer

该应用程序使用该设备的晴雨表。例如,天气应用程序可以报告气压。

android.hardware.sensor.compass

该应用程序使用该设备的磁力计(指南针)。例如,导航应用可以显示用户面向的当前方向。

android.hardware.sensor.gyroscope

该应用程序使用设备的陀螺仪检测旋转和扭曲,创建一个六轴定位系统。通过使用此传感器,应用程序可以更平稳地检测是否需要在纵向和横向之间切换。

android.hardware.sensor.hifi_sensors

该应用程序使用该设备的高保真(Hi-Fi)传感器。例如,游戏应用程序可以检测用户的高精度移动。

android.hardware.sensor.heartrate

该应用程序使用该设备的心率监测器。例如,健身应用可以报告用户心率随时间的变化趋势。

android.hardware.sensor.heartrate.ecg

该应用程序使用该设备的心电图(ECG)心率传感器。例如,健身应用程序可以报告有关用户心率的更详细信息。

android.hardware.sensor.light

该应用程序使用该设备的光传感器。例如,app可以基于环境照明条件显示两种不同颜色方案中的一种。

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

该应用要求设备使用纵向或横向。如果您的应用支持两种方向,则无需声明任何一项功能。

例如,如果您的应用需要纵向,则应声明以下功能,以便只有支持纵向(始终或由用户选择)的设备才能运行您的应用:

默认情况下,假设两个方向都不是必需的,因此您的应用程序可能安装在支持一个或两个方向的设备上。但是,如果您的任何活动要求它们以特定方向运行,请使用android:screenOrientation属性,则此声明暗示您的应用需要该方向。例如,如果您使用“landscape”,“reverseLandscape”或“sensorLandscape”声明android:screenOrientation,那么您的应用程序将仅在支持横向的设备上可用。

作为最佳实践,您仍应使用元素声明对此方向的要求。如果使用android:screenOrientation声明活动的方向,但实际上并不需要它,则可以通过使用元素声明方向并包含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.touchscreen功能。如果您希望应用程序可用于提供虚假触摸界面的设备,则还必须明确声明不需要触摸屏,如下所示:

android.hardware.faketouch.multitouch.distinct

该应用程序在假触摸界面上跟踪两个或多个不同的“手指”。这是android.hardware.faketouch功能的超集。当根据需要声明时,此功能表示仅当该设备模拟两个或更多手指的不同跟踪或具有实际触摸屏时,该应用才与设备兼容。

与android.hardware.touchscreen.multitouch.distinct定义的独特多点触控不同,支持具有假触摸界面的独特多点触控的输入设备不支持所有双指手势,因为输入转换为屏幕上的光标移动。也就是说,在这样的设备上的单指手势移动光标,双指滑动导致单指触摸事件发生,并且其他双指手势触发相应的双指触摸事件。

为光标移动提供双指触摸触控板的设备可以支持此功能。

android.hardware.faketouch.multitouch.jazzhand

该应用程序在假触摸界面上跟踪五个或更多不同的“手指”。这是android.hardware.faketouch功能的超集。根据需要声明时,此功能表示仅当该设备模拟五个或更多手指的不同跟踪或具有实际触摸屏时,该应用才与设备兼容。

与android.hardware.touchscreen.multitouch.jazzhand定义的独特多点触控不同,支持带有假触摸界面的爵士手多点触控的输入设备不支持所有五指手势,因为输入转换为屏幕上的光标移动。也就是说,这种设备上的单指手势移动光标,多指手势导致单指触摸事件发生,并且其他多指手势触发相应的多指触摸事件。

为光标移动提供五指触摸触控板的设备可以支持此功能。

android.hardware.touchscreen

该应用程序使用设备的触摸屏功能进行比基本触摸事件更具交互性的手势,例如投掷。这是android.hardware.faketouch功能的超集。

默认情况下,您的应用需要此功能。因此,默认情况下,仅提供模拟触摸界面(“假触摸”)的设备无法使用您的应用。如果您想在提供虚假触摸界面的设备上(或者甚至在仅提供d-pad控制器的设备上)使您的应用程序可用,您必须通过声明android.hardware.touchscreen与android明确声明不需要触摸屏:需要= “假”。如果您的应用使用 - 但不需要 - 真正的触摸屏界面,您应该添加此声明。

如果您的应用程序实际上需要触摸界面(以执行更高级的触摸手势,例如fling),那么您不需要声明任何触摸界面功能,因为默认情况下它们是必需的。但是,如果您明确声明应用使用的所有功能,则最好。

如果您需要更复杂的触摸交互,例如多指手势,则应声明您的应用使用高级触摸屏功能。

android.hardware.touchscreen.multitouch

该应用程序使用设备的基本两点多点触控功能,例如捏合手势,但应用程序不需要独立跟踪触摸。这是android.hardware.touchscreen功能的超集。

通过使用此功能,应用程序暗示它还使用android.hardware.touchscreen功能,除非使用android:required =“false”声明此父功能。

android.hardware.touchscreen.multitouch.distinct

该应用程序使用该设备的高级多点触控功能,可以独立跟踪两个或多个点。此功能是android.hardware.touchscreen.multitouch功能的超集。

通过使用此功能,应用程序暗示它还使用android.hardware.touchscreen.multitouch功能,除非使用android:required =“false”声明此父功能。

android.hardware.touchscreen.multitouch.jazzhand

该应用程序使用该设备的高级多点触控功能独立跟踪五个或更多点。此功能是android.hardware.touchscreen.multitouch功能的超集。

通过使用此功能,应用程序暗示它还使用android.hardware.touchscreen.multitouch功能,除非使用android:required =“false”声明此父功能。

USB硬件功能

android.hardware.usb.accessory

该应用程序充当USB设备并连接到USB主机。

android.hardware.usb.host

该应用程序使用连接到设备的USB配件。该设备用作USB主机。

Wi-Fi硬件功能

android.hardware.wifi

该应用程序使用设备上的802.11网络(Wi-Fi)功能。

android.hardware.wifi.direct

该应用程序使用设备上的Wi-Fi Direct网络功能。

软件功能

本节介绍最新平台版本支持的软件功能。要指示您的应用程序使用或需要软件功能,请在android:name属性中声明相应的值(以“android.software”开头)。每次声明软件功能时,请使用单独的元素。

通讯软件功能

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

该应用程序提供了一个用于在大屏幕(如电视)上观看的UI。

android.software.live_tv

该应用程序流式传输电视节目。

屏幕界面软件功能

android.software.app_widgets

该应用程序使用或提供App Widgets,并且只应安装在包含主屏幕或用户可以嵌入App Widgets的类似位置的设备上。

android.software.home_screen

该应用程序可以替代设备的主屏幕。

android.software.live_wallpaper

该应用程序使用或提供包含动画的壁纸。

隐含功能要求的权限

在相应的API之后,一些硬件和软件特征常量可供应用程序使用;例如,android.hardware.bluetooth功能是在Android 2.2(API级别8)中添加的,但它引用的蓝牙API是在Android 2.0(API级别5)中添加的。因此,一些应用程序能够使用API​​,然后才能使用系统声明它们需要API。

为防止这些应用无意中提供,Google Play会假定某些与硬件相关的权限表明默认情况下需要基础硬件功能。例如,使用蓝牙的应用程序必须在元素中请求BLUETOOTH权限 - 对于旧版应用程序,Google Play假定权限声明表示应用程序需要基础android.hardware.bluetooth功能并设置基于该功能进行过滤。表2列出了暗示与元素中声明的功能要求等效的功能要求的权限。

请注意,声明(包括任何声明的android:required属性)始终优先于表2中权限所隐含的功能。对于任何这些权限,您可以通过明确声明隐含功能来禁用基于隐含功能的过滤在元素中显式地​​使用android:required =“false”属性。例如,要禁用基于CAMERA权限的任何过滤,您可以将此声明添加到清单文件中:

表2.暗示设备硬件使用的设备权限。

Android官方文档—APP清单(uses-feature)_第1张图片

 

你可能感兴趣的:(Android官方文档)