Android开发指南-框架主题-清单文件

清单文件The AndroidManifest.xml Fileandroid

每一个应用程序都有一个AndroidManifest.xml文件(必定是这个名字)在它的根目录里。这个清单文件给Android系统提供了关于这个应用程序的基本信息,系统在能运行任何程序代码以前必须知道这些信息。AndroidManifest.xml主要包含如下功能:app

命名应用程序的Java包,这个包名用来惟一标识应用程序;
描述应用程序的组件-活动,服务,广播接收者,以及组成应用程序的内容提供器;对实现每一个组件和公布其能力(好比,能处理哪些意图消息)的类进行命名。这些声明使得Android系统了解这些组件以及在什么条件下能够被启动;
决定应用程序组件运行在哪一个进程里面;
声明应用程序所必须具有的权限,用以访问受保护的部分API,以及和其它应用程序交互;
声明应用程序其余的必备权限,用以组件之间的交互;
列举测试设备Instrumentation类,用来提供应用程序运行时所需的环境配置及其余信息,这些声明只在程序开发和测试阶段存在,发布前将被删除;
声明应用程序所要求的Android API的最低版本级别;
列举application所须要连接的库;
 ide

清单文件结构Structure of the Manifest File函数

下面的图表显示了清单文件的基本结构以及它能包含的全部元素。每一个元素,和它全部的属性,在一个单独的文件中完整描述。要查看任何元素的细节信息,可在图表下方的以字符序排列的元素列表中点击其元素名称。测试

 

 

   

   

   

   

 

   

 

   

 

   

 

       

           

               

               

               

           

           

       

 

       

            . . . .net

           

       

 

       

            . . . code

           

       

 

       

            . . . xml

           

       

 

       

           

           

       

 

       

         

 

   

 

全部清单文件中可能出现的元素按字符序排列以下。只有这些元素是合法的,你不能添加本身的元素或属性:对象





















文件约定File Conventionsblog

下面是一些清单文件中适用于全部元素和属性的约定和规则:

元素Elements:

在全部的元素中只有 是必需的,且只能出现一次。不少其余元素能够出现屡次甚或一次都没有-尽管若是清单文件想要完成一些有意义的工做,必须设置至少其中的一些。若是一个元素包含点什么,那就是包含其余元素。全部的值必须经过属性来设置,而不是元素中的字符数据。同一级别的元素通常是没有顺序的。好比, , , 和 元素能够以任意顺序混合使用。( 元素是个例外:它必须跟在该别名所指的 后面。)

属性Attributes:

正规意义上,全部的属性都是可选的,但实际上有些属性是必须为一个元素指定来完成其目标。把这篇文档看成一个指南。对于那些真正可选的属性,即便不存在一个规格,也会有默认的数值或状态。

除了根元素 的一些属性,全部其余元素属性的名字都是以android:做为前缀的-好比, android:alwaysRetainTaskState。由于这个前缀是通用的,这篇文档说起属性名称时通常会忽略它。

声明类名Declaring class names:

不少对应于Java对象的元素,包括应用程序本身( 元素)以及它的基础组件-活动( ),服务( ),广播接收器( ),以及内容提供器( )。

若是你定义一个子类,就像你将常常为组件类(Activity, Service, BroadcastReceiver, 和ContentProvider)所作的那样,这个子类经过一个名字属性来声明。这个名字必须包含完整的包名称。好比,一个服务Service子类可能会声明以下:

   

       

            . . .

       

        . . .

   

不过,做为类名的简写,若是这个字符串的第一个字符是一个点号“.”,那么这个字符串将被扩展到应用程序包名的后面(正如 元素的package属性所指明的那样)。下面这个赋值和上面效果同样:

   

       

            . . .

       

        . . .

   

当启动一个组件时,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 许可并不是仅仅在 元素中声明,它一样声明在 元素里。为了应用程序的其余组件能够启动这个受保护的活动,必须请求它的使用(use),即便这个保护是应用程序本身引入的。

若是,就在这个例子里,这个permission 属性被设置为在其余地方声明的权限许可(例如android.permission.CALL_EMERGENCY_NUMBERS,它将不须要再次声明它,可是,它仍然须要经过 来请求它的使用。

这个 元素为一组想在代码中定义的权限许可声明了一个命名空间。而 元素为一系列许可定义了一个标签(用 元素定义在manifest中的以及其余地方声明的)。它仅仅影响这些权限许可在显示给用户时如何分组。 元素并不指明哪一个权限属于这个分组;它只是给这个组命名。一个权限许可经过给 元素的permissionGroup属性赋予这个组名来放置到这个权限组中。

库Libraries

每一个应用程序都连接到缺省的Android库,这个库包含了基础应用程序开发包(实现了基础类如活动,服务,意图,视图,按钮,应用程序,内容提供器,等等)

然而,一些包处于它们本身的库中。若是你的应用程序使用了其余开发包中的代码,它必须显式的请求连接到它们。这个manifest必须包含一个单独的 元素来命名每个库。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/iefreer/archive/2009/09/10/4540172.aspx

相关文章
相关标签/搜索