android manifest简介

每个Android项目都包含一个Manifest文件(Android Manifest.xml),它存储在项目层次中的最顶层。Manifest可以定义应用程序及其组件和需求的结构和元数据。它包含了组成应用程序的每一个Activity,Service,Content Provider和Broadcast Receiver的节点,并使用Intent Filter和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。

Manifest文件还可以指定应用程序的元数据(如它的图标,版本号或者主题)以及额外的顶层节点,这些节点可用来指定必需的安全权限和单元测试,以及定义硬件,屏幕和平台支持要求。Manifest文件由一个根manifest标签构成,该标签带有一个被设为项目包的package属性。它通常包含一个xmlns:android属性来提供文件内使用的某些属性。使用versionCode属性可将当前的应用程序版本定义为一个整数,每次版本迭代时,这个数字都会增加。使用versionName可以定义一个显示给用户的公共版本号。通过使用installLocation属性,还可以指定是否允许(或者首选)将应用程序安装到外部存储器(通常是SD卡)而不是内部存储器上。为此,可以将其值指定为preferExternal或outo,使用前者时,只要有可能就会把应用程序安装到外部存储器上,后者则要求系统决定。如果不指定installLocation属性,应用程序将安装到内部存储器,而用户将无法把应用程序移动到外部存储器。内部存储器的容量一般是有限的,所以最好是只要有可能,就把应用程序安装到外部存储器。

应用程序Manifest文件详解

下面的XML代码段展示了一个典型的Manifest节点:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.paad.myapp"
            android:versionCode="1"
            android:versionName="0.9 Beta"
            android:installLocation="preferExternal">
            [... manifest nodes ... ]
</manifest>
manifest标签包含了一些节点(node),它们定义了组成应用程序的应用程序组件,安全设置,测试类和需求。下面列出了一些manifest子节点标签,并用一些XML代码段说明了它们是如何使用的。

uses-sdk:这个节点用于定义要想正确地运行应用程序,设备上必须具有的最低和最高SDK版本,以及为应用程序设计的目标SDK,这分别通过使用 minSDKVersion,maxSDKVersion和targetSDKVersion属性设置。最低SDK版本指定了包含应用程序中使用的API的最低SDK版本。如果没有指定最低SDK版本,其默认值为1,在这种情况下,如果应用程序试图调用不可用的API,那么就会失败。最高SDK版本用于定义想要支持的最高SDK版本。在Android Market上列出的对运行更高平台版本的设备可用的应用程序中,你的应用程序不会显示。最好不要设置最高SDK版本,除非你知道应用程序在更新的平台版本上肯定不能正确工作。目标SDK版本属性用于指定你在开发和测试应用程序时使用的平台。设置目标SDK版本会告诉系统不需要为支持该版本而进行任何前向和后向兼容性更改。为了利用最新的平台UI改进,当确认应用程序在最新的平台版本上的表现符合预期后,即使应用程序中没有使用任何新的API,也应该将其目标SDK设为最新的平台版本,这被认为是一种最佳实践。通常,没有必要指定最高SDK版本,也很少有人支持那么做。最高SDK版本用于定义想要支持的最高SDK版本。在运行更高平台版本的设备的Android Play Store上,你的应用程序不会显示。运行的平台版本高于Android 2.0.1(API level 6)的设备在安装时将忽略任何最高SDK值。

?
1
<uses-sdk android:minSdkVersion="6" android:targetSdkVersion"15"/>
注:支持的SDK版本不等同于平台版本,也不能从平台版本导出。例如,Android平台的版本4.0支持SDK版本14。要想找出与每个平台对应的SDK版本,可以使用这个表:http://developer.android.com/guide/appendix/api-levels.html。

uses-configuration:使用uses-configuration节点可以指定应用程序支持的每个输入机制的组合。一般不需要包含这个节点,不过对于需要特殊输入控制的游戏来说,它是很有用的,可以指定以下输入设备的任意组合 :

- reqFiveWayNav:如果要求输入设备能够向上,向下,向左和向右导航,并且能够单击当前的选项,那么需要将这个属性指定为true。这包括跟踪球和D-pad。

- reqHardKeyboard:如果应用程序需要硬件键盘,则将此属性指定为true。

- reqKeyboardType:用于将键盘类型指定为nokeys,qwerty,twelveley或undefined中的一种。

- reqNavigation:将属性值指定为nonav,dpad,trackball,wheel或undefined其中之一,作为必需的导航设备。

- reqTouchScreen:选择notouch,stylus,finger或undefined其中之一,以指定必需的触摸屏输入。

可以指定多个支持的配置,例如,指定设备具有触摸屏,跟踪球以及一个QUERTY或12键硬件键盘,如下所示:

?
1
2
3
4
5
6
7
8
<uses-configuration android:reqTouchScreen="finger"
                android:reqNavigation="trackball"
                android:reqHardKeyboard="true"
                android:reqKeyboardType="qwerty"/>
<uses-configuration android:reqTouchScreen="finger"
                android:reqNavigation="trackball"
                android:reqHardKeyboard="true"
                android:reqKeyboardType="twelvekey"/>
注意:在指定必需的配置时,如果设备不具有任意一种指定配置,则应用程序将不会安装在该设备上。

uses-feature:Android可以在各种各样的硬件平台上运行。可以使用多个uses-feature节点来指定应用程序需要的每个硬件功能。这可以避免将应用程序安装到不包含必要的硬件功能(例如NFC硬件)的设备上。如下所示:

?
1
<uses-feature android:name="android.hardware.nfc"/>
        可以要求支持兼容设备上可选的任意硬件。目前,可选的硬件功能包括:

        - 音频:用于要求低延迟音频管道的应用程序。

        - 蓝牙:用于需要蓝牙传输的应用程序。

        - 摄像头:用于要求有摄像头的应用程序。

        - 位置:用于需要基于位置的服务的应用程序,还可以显式指定要求网络或GPS支持。

        - 麦克风:用于需要音频输入的应用程序。

        - NFC:要求NFC(近场通信)支持。

        - 传感器:指定对任何潜在可用的硬件传感器的要求。

        - 电话服务:指定需要一般性的电话服务,或者特定的无线发送方式(GSM或CDMA)。

        - 触摸屏:指定应用程序需要的触摸屏类型。

        - USB:用于需要支持USB host或accessory模式的应用程序。

        - WI-FI:用于需要支持WIFI网络的应用程序。

    随着支持Android的平台种类不断增加,可选硬件的种类也将增加。以下网址给出了uses-feature硬件的完整列表:http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference。

为了确保兼容性,对权限的需求暗含着对相应功能的需求。具体来说,对蓝牙,摄像头,位置服务,音频录制和Wi-Fi要求  的访问权限以及与电话服务相关的权限都暗含着要有相应的硬件。通过添加一个required属性并把它设为false,可以覆盖这些暗含的需求。例如,一个备忘应用程序可以支持语音备忘:

?
1
2
<uses-feature android:name="android.hardware.microphone"
            android:required="false" />
摄像头硬件还代表着一种特殊的情况。当出于兼容性原因,要求有摄像头的使用权限时,或者添加了一个需要摄像头的使用权限的uses-feature节点时,暗含的要求就是摄像头要支持自动聚焦功能。在合适的地方可以把它指定为可选项:

?
1
2
3
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
也可以使用uses-feature节点指定应用程序所需的OppenGL的最低版本。只需要使用glEsVersion属性,将OpenGL ES版本指定为一个整数即可。高16位代表主版本号,低16位代表次版本号,所以版本1.1可以表示为:

?
1
<uses-ffeature android:glEsVersion="0x00010001" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值