清单文件The AndroidManifest.xml Fileandroid
每一个应用程序都有一个AndroidManifest.xml文件(必定是这个名字)在它的根目录里。这个清单文件给Android系统提供了关于这个应用程序的基本信息,系统在能运行任何程序代码以前必须知道这些信息。AndroidManifest.xml主要包含如下功能:app
命名应用程序的Java包,这个包名用来惟一标识应用程序;
描述应用程序的组件-活动,服务,广播接收者,以及组成应用程序的内容提供器;对实现每一个组件和公布其能力(好比,能处理哪些意图消息)的类进行命名。这些声明使得Android系统了解这些组件以及在什么条件下能够被启动;
决定应用程序组件运行在哪一个进程里面;
声明应用程序所必须具有的权限,用以访问受保护的部分API,以及和其它应用程序交互;
声明应用程序其余的必备权限,用以组件之间的交互;
列举测试设备Instrumentation类,用来提供应用程序运行时所需的环境配置及其余信息,这些声明只在程序开发和测试阶段存在,发布前将被删除;
声明应用程序所要求的Android API的最低版本级别;
列举application所须要连接的库;
ide
清单文件结构Structure of the Manifest File函数
下面的图表显示了清单文件的基本结构以及它能包含的全部元素。每一个元素,和它全部的属性,在一个单独的文件中完整描述。要查看任何元素的细节信息,可在图表下方的以字符序排列的元素列表中点击其元素名称。测试
全部清单文件中可能出现的元素按字符序排列以下。只有这些元素是合法的,你不能添加本身的元素或属性:对象
文件约定File Conventionsblog
下面是一些清单文件中适用于全部元素和属性的约定和规则:
元素Elements:
在全部的元素中只有
属性Attributes:
正规意义上,全部的属性都是可选的,但实际上有些属性是必须为一个元素指定来完成其目标。把这篇文档看成一个指南。对于那些真正可选的属性,即便不存在一个规格,也会有默认的数值或状态。
除了根元素
声明类名Declaring class names:
不少对应于Java对象的元素,包括应用程序本身(
若是你定义一个子类,就像你将常常为组件类(Activity, Service, BroadcastReceiver, 和ContentProvider)所作的那样,这个子类经过一个名字属性来声明。这个名字必须包含完整的包名称。好比,一个服务Service子类可能会声明以下:
. . .
. . .
不过,做为类名的简写,若是这个字符串的第一个字符是一个点号“.”,那么这个字符串将被扩展到应用程序包名的后面(正如
. . .
. . .
当启动一个组件时,Android建立了一个命名子类的实例。若是没有指定一个子类,它建立基类的一个实例。
多数值项Multiple values:
若是某个元素有超过一个数值,这个元素几乎老是须要被重复声明,而不能将多个数值项列举在一个属性中。好比,一个意图过滤器能够列举多个动做:
. . .
资源项Resource values:
一些属性有能显示给用户的数值-好比,活动(activity)的一个标签和图标。这些属性的值应该被本地化,从一个资源或主题中设置。当须要引用某个资源时,采用以下的表述格式:
@[package:]type:name
这里package名称能够被忽略,要是资源和应用程序在同一个包里的话;type是资源的类型-如"string"或"drawable"-并且name是用来标识特定资源的名字。例如
从主题获取的数据以相似的方式表述,不过以'?'而不是'@'开头。
?[package:]type:name
字符串值String values:
若是属性值是一个字符串,则必须使用双反斜杠('\\')来表示escape('\')字符;第一个反斜杠起转义字符的做用)。好比,'\ '表示换行或'\\uxxxx'表示一个Unicode字符。
文件特性File Features
下面的章节描述了一些Android特性如何被映射到清单(manifest)文件中。
意图过滤器Intent Filters
应用程序的核心组件(活动,服务和广播接收器)经过意图被激活。意图是描述指望动做的信息包(一个Intent 对象)-包括要操做的数据,执行该动做的组件类别,以及其余有关指令。Android寻找一个合适的组件来响应这个意图,若是须要会启动这个组件一个新的实例,并传递给这个意图对象。
组件经过意图过滤器(intent filters)通告它们所具有的能力-能响应的意图类型。因为Android系统在启动一个组件前必须知道该组件可以处理哪些意图,那么意图过滤器须要在manifest中以
一个显式命名目标组件的意图将会激活那个组件;过滤器不起做用。可是一个没有指定目标的意图只在它可以经过组件过滤器任一过滤器时才能激活该组件。
请查看关于意图和意图过滤器的文档以获取更多信息:Intents and Intent Filters.
图标和标签Icons and Labels
许多元素有图标(icon)和标签(label)属性。其中一些还有一个描述(description)属性,能够用更长的解释性文字呈现给用户。好比,
全部的状况中,设置在一个包含元素里的图标和标签会成为该容器全部子元素的缺省设置。这样,在
当呈现给用户的组件实现一个意图过滤器公告的函数时,为这个过滤器设置的图标和标签将被用来表明这个组件。好比,一个设置了"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"的过滤器公告了一个活动来初始化应用程序-也就是,会被显示在应用程序启动器中。所以设置在过滤器中的图标和标签也就是显示在启动器里的那些图标和标签。
许可Permissions
一个许可(permission)是代码对设备上数据的访问限制。这个限制被引入来保护可能会被误用而曲解或破坏用户体验的关键数据和代码。
每一个许可被一个惟一的标签所标识。这个标签经常指出了受限的动做。例如,下面是一些Android定义的许可:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一个功能(feature)最多只能被一个权限许可保护。
若是一个应用程序须要访问一个须要特定权限的功能,它必须在manifest文件中使用
应用程序还能够经过权限许可来保护它本身的组件(活动,服务,广播接收器,和内容提供器)。它能够利用Android已经定义(列在android.Manifest.permission里)或其余应用程序已声明的权限许可。或者定义本身的许可。一个新的许可经过
. . .
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
. . .
. . .
注意,在这个例子里,这个DEBIT_ACCT 许可并不是仅仅在
若是,就在这个例子里,这个permission 属性被设置为在其余地方声明的权限许可(例如android.permission.CALL_EMERGENCY_NUMBERS,它将不须要再次声明它,可是,它仍然须要经过
这个
库Libraries
每一个应用程序都连接到缺省的Android库,这个库包含了基础应用程序开发包(实现了基础类如活动,服务,意图,视图,按钮,应用程序,内容提供器,等等)
然而,一些包处于它们本身的库中。若是你的应用程序使用了其余开发包中的代码,它必须显式的请求连接到它们。这个manifest必须包含一个单独的
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/iefreer/archive/2009/09/10/4540172.aspx