android程序中的AndroidManifest.xml中的uses-feature详解

news/2024/11/28 21:52:52/

AndroidManifest.xml中的uses-feature

在android的manifest文件:

用于指定android程序,是否需要某种硬件或软件资源/功能。

uses-feature的语法

<uses-feature android:name="string"android:required=["true" | "false"]android:glEsVersion="integer" />

android:name

  • 摄像头: android.hardware.camera
  • 各种传感器:
    • 加速计 :android.hardware.sensor.accelerometer
    • 气压计 :android.hardware.sensor.barometer
    • 指南针 android.hardware.sensor.compass
    • 陀螺仪 android.hardware.sensor.gyroscope
    • 感光 android.hardware.sensor.light
    • 近距离感测 android.hardware.sensor.proximity
  • 麦克风: android.hardware.microphone
  • 定位: android.hardware.location
  • USB:
    • USB Host: android.hardware.usb.host
  • WIFI: android.hardware.wifi
  • 蓝牙: android.hardware.bluetooth
  • Bluetooth Low Energy: android.software.bluetooth_le
  • VOIP: android.software.sip.voip

http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference

android:required

  • android:required="true" :表示需要设备具有某个功能。
    • 如果设备没有该功能,则程序不工作,就是可以理解的
  • android:required="false" :表示希望设备,最好具有某个功能
    • 设备即使没有该功能,程序也应该可以正常工作
    • 为了程序工作的更好,最好具有该功能。

如果不指定,默认为true:

android:required="true":

android:qlEsVersion

  • OpenGL ES 1.0
  • OpenGL ES 2.0
  • OpenGL ES 3.0

我这里不涉及到,不去深究。

uses-feature写法举例

1.某程序需要蓝牙和摄像头,就可以这么写:

<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.camera" />

2.如果,某个设备,是类似于照相机之类的程序,那么没有摄像头,就没法正常工作,则可以加上required参数为true:

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

3.如果某个文件共享的软件,除了通过WIFI传输外,如果有蓝牙,那最好,也支持通过蓝牙传输,则可以加上required为false,希望最好有蓝牙:

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

4.比如,我的程序,是将android设备作为USB的Host,外接USB的设备的,所以要求必须有USB的host,所以可以写为:

<uses-feature android:required="true" android:name="android.hardware.usb.host" />

uses-feature的注意事项和其他说明

uses-feature,只是起到指示性的作用,不是强制的检测

uses-feature,只是起到指示性的作用,不是强制的检测

如果像上面的,我写了:

<uses-feature android:name="android.hardware.usb.host" android:required="true" />

[2013-11-05 10:15:37 - com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Parser exception for D:\DevRoot\xxxxxxxxxxxxxx\AndroidManifest.xml: Element type "uses-feature" must be followed by either attribute specifications, ">" or "/>". 

[2013-11-05 10:15:37 - yyyy] Error in an XML file: aborting build.

<uses-feature android:required="true" android:name="android.hardware.usb.host" />

本意是:希望此android设备必须有usb的host,否则没法工作。

即使没有usb的host,该app,也是可以在该android设备上面跑的

只不过不能正常工作罢了。

而作为Android系统,是不是强制去检测:

当此android设备,没有usb的host,就不让该app运行。

写android的app时最好还是加上合适的uses-feature的说明比较好

对于其他一些程序,比如Google Play

会根据你的程序中的uses-feature的声明,去过滤,分类android的app的。

另外,你的程序中,也最好,根据实际需要,去加上合适的uses-feature的说明,比较好。

方便用户和其他人明白,你的app对于资源的需求:

至少间接的相当于:给当前app,弄了个prerequisite前提条件了。

便于用户清楚需要哪些软硬件条件,才能运行你的当前的app。

可以用aapt去检测android的app(xxx.apk)中的uses-feature属性

Testing the features required by your application

adt-bundle-windows/sdk/platform-tools/aapt.exe

去拷贝了某个apk,测试了一把,结果如下:

CLi@PC-CLI-1 /cygdrive/d/DevRoot/android/adt-bundle-windows/sdk/platform-tools
$ ls
aapt.exe*  AdbWinApi.dll*     aidl.exe*  crifanLiTestAapt.apk*    crifanLiTestAapt_3.apk*  dx.bat*        lib/             NOTICE.txt*    source.properties*
adb.exe*   AdbWinUsbApi.dll*  api/       crifanLiTestAapt_2.apk*  dexdump.exe*             fastboot.exe*  llvm-rs-cc.exe*  renderscript/CLi@PC-CLI-1 /cygdrive/d/DevRoot/android/adt-bundle-windows/sdk/platform-tools
$ ./aapt dump badging crifanLiTestAapt_3.apk
package: name='com.mm.xxxxxxx' versionCode='1' versionName='1.0'
sdkVersion:'14'
targetSdkVersion:'17'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-feature:'android.hardware.usb.host'
application-label:'MobileHandHeld'
application-label-zh:'某android应用程序'
application-icon-160:'res/drawable-mdpi/yyyyyyyyyy.png'
application-icon-240:'res/drawable-hdpi/yyyyyyyyyy.png'
application-icon-320:'res/drawable-xhdpi/yyyyyyyyyy.png'
application-icon-480:'res/drawable-xxhdpi/yyyyyyyyyy.png'
application: label='MobileHandHeld' icon='res/drawable-mdpi/yyyyyyyyyy.png'
launchable-activity: name='com.mm.xxxxxxx.activities.DeviceListActivity'  label='MobileHandHeld' icon=''
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE'
uses-feature:'android.hardware.touchscreen'
uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional'
uses-feature:'android.hardware.screen.landscape'
uses-implied-feature:'android.hardware.screen.landscape','one or more activities have specified a landscape orientation'
main
other-activities
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--' 'zh'
densities: '160' '240' '320' '480'


AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之间的联系

概述:<uses-feature>用来声明应用中需要用的硬件和软件的功能。

硬件特性:表明您的应用需要用的硬件功能。

功能类型特征描述描述
音频android.hardware.audio.low_latency该应用程序使用低延迟的音频设备上的管道,声音输入或输出延迟或滞后敏感。
蓝牙android.hardware.bluetooth该应用程序使用蓝牙无线功能,在设备中。
相机android.hardware.camera该应用程序使用该设备的摄像头。如果设备支持多个摄像头,应用程序使用相机,面对从屏幕上移开。
 android.hardware.camera.autofocus子功能。该应用程序使用设备相机的自动对焦能力。
 android.hardware.camera.flash子功能。该应用程序使用设备相机的闪光灯。
 android.hardware.camera.front子功能。该应用程序使用设备上的前置摄像头。
 android.hardware.camera.any该应用程序使用至少一个摄像头朝向任何方向。使用当前在偏好android.hardware.camera的,如果不需要的背面朝相机。
位置android.hardware.location该应用程序使用设备上的一个或多个特征,确定位置,如GPS定位,网络位置或细胞的位置。
 android.hardware.location.network子功能。该应用程序使用从设备支持的基于网络的地理定位系统获得的粗略的位置坐标
 android.hardware.location.gps子功能。该应用程序使用设备上的全球定位系统接收器获得的精确位置坐标。
麦克风android.hardware.microphone该应用程序使用设备上的麦克风。
NFCandroid.hardware.nfc该应用程序使用近场通讯在设备的收音功能。
传感器android.hardware.sensor.accelerometer该应用程序使用的移动设备上的一个加速度计的运动读数。
 android.hardware.sensor.barometer该应用程序使用该设备的晴雨表。
 android.hardware.sensor.compass该应用程序使用设备上的磁力计(罗盘)方向读数。
 android.hardware.sensor.gyroscope该应用程序使用该设备的陀螺仪传感器。
 android.hardware.sensor.light该应用程序使用该设备的光传感器。
 android.hardware.sensor.proximity该应用程序使用该设备的接近传感器。
屏幕android.hardware.screen.landscape该应用程序需要横向。
 android.hardware.screen.portrait该应用程序需要纵向。
电话android.hardware.telephony该应用程序使用电话功能的移动设备,例如,电话与数据通信业务的无线电。
 android.hardware.telephony.cdma子功能。该应用程序使用CDMA电话收音机功能在设备上的。
 android.hardware.telephony.gsm子功能。应用程序在设备上采用了GSM电话收音机功能。
电视android.hardware.type.television应用程序是专为电视用户体验。
触摸屏android.hardware.faketouch该应用程序使用基本的的触摸互动活动,如“点击”,“点击”,并拖动。
 android.hardware.faketouch.multitouch.distinct不同的应用程序执行跟踪的两个或两个以上的“手指”上假的触摸界面。这是的faketouch功能的一个超集。
 android.hardware.faketouch.multitouch.jazzhand不同的应用程序执行的跟踪5个或以上的“手指”上假的触摸界面。这是的faketouch功能的一个超集。
 android.hardware.touchscreen该应用程序使用的触摸屏功能,比基本触摸事件,如一扔,更具互动性的手势。这是的基本faketouch功能的一个超集。
 android.hardware.touchscreen.multitouch应用程序使用在设备屏幕上的两个基本点的多点触控功能,如捏的手势,但,不需要独立跟踪触及。这是触摸屏功能的一个超集。
 android.hardware.touchscreen.multitouch.distinct子功能。在设备屏幕上的应用程序采用了先进的多点多点触控功能,如跟踪两个或两个以上的点完全独立。这是一个多点触控功能的超集。
 android.hardware.touchscreen.multitouch.jazzhand在设备屏幕上的应用程序采用了先进的多点多点触控功能,跟踪到五点完全独立。这是一个独特的多点触控功能的超集。
USBandroid.hardware.usb.host该应用程序使用USB主机模式功能(表现为主机和USB设备连接到)。
 android.hardware.usb.accessory该应用程序使用的USB附件功能(表现为USB设备连接到USB主机)。
无线上网android.hardware.wifi应用程序使用802.11网络(WIFI)功能的设备上的。
   

软件功能:表明您的应用程序使用或需要的软件功能。

特点属性值描述
应用程序!android.software.app_widgets该应用程序使用或提供应用小工具,仅应安装的设备上,包括一个主屏幕或类似的位置,用户可以应用小工具嵌入。
蓝牙低功耗android.software.bluetooth_le

该应用程序使用蓝牙低能量的API只能够与其他设备通过蓝牙低功耗通信设备,应安装。这也隐含声明的android.hardware.bluetooth功能。

主屏幕android.software.home_screen主屏幕更换应用程序的行为,应只安装在设备主屏幕上的应用程序支持第三方。
输入法android.software.input_methods该应用程序提供了一个自定义的输入法应该只能安装在设备支持第三方输入法。
动态壁纸android.software.live_wallpaper该应用程序使用或提供动态壁纸,应该只能安装在设备支持动态壁纸。
SIP / VOIPandroid.software.sip该应用程序使用SIP服务在设备上,只应安装上支持SIP的设备。
 android.software.sip.voip

子功能。该应用程序使用基于SIP的VoIP服务在设备上。

此子功能隐式声明android.software.sip的父特征,除非宣布与

android:required="false"
   

权限和功能之间的联系:

类别需要的权限要求的功能
蓝牙BLUETOOTHandroid.hardware.bluetooth

(见特殊处理的蓝牙功能的详细信息。)

 BLUETOOTH_ADMINandroid.hardware.bluetooth
相机CAMERAandroid.hardware.camera  
android.hardware.camera.autofocus
位置ACCESS_MOCK_LOCATIONandroid.hardware.location
 ACCESS_LOCATION_EXTRA_COMMANDSandroid.hardware.location
 INSTALL_LOCATION_PROVIDERandroid.hardware.location
 ACCESS_COARSE_LOCATIONandroid.hardware.location.network  
android.hardware.location
 ACCESS_FINE_LOCATIONandroid.hardware.location.gps  
android.hardware.location
麦克风RECORD_AUDIOandroid.hardware.microphone
电话CALL_PHONEandroid.hardware.telephony
 CALL_PRIVILEGEDandroid.hardware.telephony
 MODIFY_PHONE_STATEandroid.hardware.telephony
 PROCESS_OUTGOING_CALLSandroid.hardware.telephony
 READ_SMSandroid.hardware.telephony
 RECEIVE_SMSandroid.hardware.telephony
 RECEIVE_MMSandroid.hardware.telephony
 RECEIVE_WAP_PUSHandroid.hardware.telephony
 SEND_SMSandroid.hardware.telephony
 WRITE_APN_SETTINGSandroid.hardware.telephony
 WRITE_SMSandroid.hardware.telephony
无线上网ACCESS_WIFI_STATEandroid.hardware.wifi
 CHANGE_WIFI_STATEandroid.hardware.wifi
 CHANGE_WIFI_MULTICAST_STATEandroid.hardware.wifi


http://www.ppmy.cn/news/842299.html

相关文章

Linux的标志为什么是企鹅?

Linux的标志为什么是企鹅?在此之前我也不知道答案,也没有想着去寻找答案。 前两天偶然听同事提到是因为Linus小时候曾经被企鹅咬过,所以采用企鹅作为Linux的标志。 今天,我突然想起这个问题,决定上网搜索一下,以便了解事情的来龙去脉。 没想到在Google上一搜,却出现了很…

安卓开发电商mvp框架和流式布局,搜索框

在我看来mvp框架其实是mvc框架变种产品。讲原本的activity/fragment的层次划分成present层和view层。m还是原来的实体层用来组装数据,p层则用来隔离view层,被称为中介层,v层还是view层主要用来展示数据的层。如下图所示: 有了present层之后呢?view层就专心在activity/fra…

[02.02]主题之家精美主题每日更新【雪豹】

[02.02]主题之家精美主题每日更新【雪豹】 温馨提示: 1&#xff1a;此更新合集由雪豹整理&#xff0c;由于主题之家采用防盗链设计&#xff0c;直接点击会出现盗链接的提示&#xff0c;请下载时点击直接下载或用下载工具下载. 2&#xff1a;以下所有软件均来自网络&#xff0c;…

3D动作绑定_玩3D创作,怎能少得了它呢?

Blender 2.82是一款免费开源的3D创作软件。它支持整个3D管道建模&#xff0c;绑定&#xff0c;动画&#xff0c;模拟&#xff0c;渲染&#xff0c;合成和运动跟踪&#xff0c;甚至视频编辑和游戏创建。高级用户可以使用Blender的Python脚本来定制应用程序并编写专用工具。需要的…

3种团队分组适应项目_分组团队竞赛活动方案

为营造新年春节期间良好的经营氛围,形成规范有效的服务流程,促进员工快乐积极向上工作,铸造峡市娱乐行业名牌,经KTV 管理人员研究制定以下分组评比竞赛方案: 第一:分组办法。 1、KTV主管杨海军、华磊、冯磊、王海洋四人各带一组。 2、KTV部门员工自行选择带组主管,如出现…

Mac家谱制作软件MacFamilyTree 9好用吗?如何在MacFamilyTree 9中创建数据库的备份?

Mac家谱制作软件MacFamilyTree 9好用吗?MacFamilyTree 能够帮助你记录、储存、和显示您的家庭信息,打印家族树、列表、卡片、遗传图表,能够让你清晰的了解你的家族人员情况,是一款好用不容错过的Mac家谱应用软件!如何在MacFamilyTree 9中创建数据库的备份?欲知详细内容,…

北京,北京!用Python解析生活成本之高,讨生活之不易啊!

大家好&#xff0c;我是菜鸟哥&#xff01; 最近发现了一个神奇的网站&#xff0c;可以查询世界上绝大多数城市的生活成本情况&#xff0c;包括衣食住行等等各个方面&#xff0c;可以让我人在家中坐&#xff0c;便知天下各地人民的生活状况。害&#xff0c;真是咸吃萝卜淡操心呐…

MVVM模式删除新增修改DataGrid内容

MVVM&#xff08;Model-View-ViewModel&#xff09;模式是一种用于构建用户界面的软件设计模式&#xff0c;它能够有效地将数据、用户界面和业务逻辑分离。在MVVM模式中&#xff0c;View负责呈现用户界面&#xff0c;Model负责存储数据&#xff0c;而ViewModel则充当View和Mode…