您的位置:首页 > 移动开发 > Android开发

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

2016-06-30 09:51 489 查看

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

 

AndroidManifest.xml中的uses-feature

在android的manifest文件:

AndroidManifest.xml

中,有个:

uses-feature

这个xml节点。

用于指定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


麦克风:[code]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:qlEsVersion

是和OpenGL ES,比如:

OpenGL ES 1.0
OpenGL ES 2.0
OpenGL ES 3.0
之类的有关。

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

 

uses-feature写法举例

举例:

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

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

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

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

?
 

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

 

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

官网说了:

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

意味着:

如果像上面的,我写了:

?
(结果出错了:

[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.

所以去改为:

?
貌似才可以)

本意是:希望此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,测试了一把,结果如下:

?
如图:





 

注:

1.我这里是在cygwin下运行aapt的。

你可以在windows的cmd下,效果是一样的,只不过貌似中文会有乱码。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: