AndroidManifestxml文件详解要点.docx

上传人:b****8 文档编号:9904187 上传时间:2023-02-07 格式:DOCX 页数:20 大小:27.13KB
下载 相关 举报
AndroidManifestxml文件详解要点.docx_第1页
第1页 / 共20页
AndroidManifestxml文件详解要点.docx_第2页
第2页 / 共20页
AndroidManifestxml文件详解要点.docx_第3页
第3页 / 共20页
AndroidManifestxml文件详解要点.docx_第4页
第4页 / 共20页
AndroidManifestxml文件详解要点.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

AndroidManifestxml文件详解要点.docx

《AndroidManifestxml文件详解要点.docx》由会员分享,可在线阅读,更多相关《AndroidManifestxml文件详解要点.docx(20页珍藏版)》请在冰豆网上搜索。

AndroidManifestxml文件详解要点.docx

AndroidManifestxml文件详解要点

AndroidManifest.xml文件详解

每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml文件。

这个清单把应用程序的基本信息提交给Android系统,在应用程序的代码能够运行之前,这个信息系统必须建立。

以下是清单文件要做的一些事情:

1. 用Java包给应用程序命名。

这个包名是应用程序的唯一标识;

2. 描述应用程序的组件---组成应用程序的Activity、Service、BroadcastReceiver以及ContentProvider。

它要用每个组件的实现类来命名,并向外发布对应组件功能(例如,组件所能处理的Intent消息)。

这些声明会让Android系统了解应用程序中组件,以及这些组件被加载的条件。

3. 判断哪些进程是主应用程序组件。

4. 声明应用程序所必须的权限,以便能够访问被保护的API,以及能够跟其他应用程序进行交互。

5. 为了跟应用程序组件进行交互,还声明了其他要求有的权限。

6. 列出了能够提供应用程序运行时的分析和其他信息的Instrumentation类。

只有在开发和测试应用程序时才在清单文件中声明这些类,在应用程序被发布之前,要删除这些类。

7. 声明应用程序所要求的最小的AndroidAPI级别。

8. 列出应用程序必须链接的外部库。

Manifest文件的结构

下图中包含了清单文件的一般性结构,并且包含所有能包含的元素。

每个元素所带有的全部元素会在它们各自的文档中介绍。

xmlversion="1.0" encoding="utf-8"?

>

   

   

   

   

   

   

     

     

     

     

     

   

     

       

         

         

         

       

       

     

     

        ... 

       

     

     

        ... 

       

     

     

        ... 

       

     

     

       

       

     

     

   

以下按字母顺序列出了清单文件中的所有元素,这些元素时Android系统法定元素,不能添加自定义的元素或属性。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AndroidManifest.xml文件详解

(二)

文件约定

某些约定和规则普遍适用于清单中的所有元素和属性:

元素

只用元素时必须的,而且这两个元素在文件中只能出现一次。

其他元素则可以多次出现在清单中,或者根本就不出现---但是为了构建一个有意义的清单,必须要在清单中声明某些元素。

一个元素所包含的任何声明,包括它所包含的其他元素,所有的值都是通过属性来设置的,而不是用夹在开闭元素之间的字符数据。

相同级别的元素通常是没有顺序的。

例如,元素可以是任意顺序的。

元素是个例外,它必须放在它所代表的元素的后面。

属性

在正式的含义中,所有的属性都是可选的,但是,为了达成目的,必须要给元素指定一些属性。

对于真正的可选属性,会指定发生在特殊情况下的默认值或状态。

除了根元素的一些属性之外,其他所有属性的命名都带有android:

前缀---例如,android:

alwaysRetainTaskState。

因为这个前缀是通用的,所以本文档在提到属性名时,通常会忽略这个前缀。

声明类名称

许多元素都对应着Java对象,包括代表应用程序自己的元素,以及基本的组件---等。

如果要定义子类,那么这些子类几乎总是继承以下组件类:

Activity、Service、BroadcastReceiver、ContentProvider。

子类是通过name属性来声明的。

这个名称必须是完整Java包名。

例如,下例演示了Service子类的声明方法:

   

     

name="com.example.project.SecretService" ... >

      ...

     

    ...

   

但是,也可以使用简略的表达方式,用”.”符号做为name属性值的第一个字符。

在Android系统解析是会在”.”符号前追加包名(包名是在元素的package属性中声明的)。

下例的声明方法与上例的结果相同:

   

     

name=".SecretService" ... >

      ...

     

    ...

   

在启动组件时,Android会创建这个命名子类的一个实例对象。

如果没有指定子类,那么就会创建一个基类的实例对象。

多个值的设定

如果要给一个元素指定多个值,那么几乎总是重复使用这个元素,而不是在一个元素中列出多个值。

如:

   

name="android.intent.action.EDIT"/>

   

name="android.intent.action.INSERT"/>

   

name="android.intent.action.DELETE"/>

  ...

资源值的设定

有一些属性值是能够显示给用户的---例如,Activity的标题和图标。

这些属性值应该被本地化,并因此要设置在资源或主题中。

资源值是用下列格式来表示的:

@[package:

]type:

name

如果资源与应用在同一个包中,那么package的名称可以被忽略,type是资源的类型---如“string”或“drawable”,name是标识指定资源的名称。

例如:

icon="@drawable/smallPic" ... >

来自主题的值是用类似的方式来表示的,但是要以‘?

’开始,而不是‘@’:

?

[package:

]type:

name

String值的设定

当属性值是一个字符串是,‘\\’符号要用于字符转义---如‘\\n’表示在此处换行,‘\\uxxxx’表示‘xxxx’是Unicode字符。

AndroidManifest.xml文件详解(三)

文件功能

以下章节介绍清单文件是如何反映Android的某些功能的。

Intent过滤器

应用程序的核心组件(Activity、Service、BroadcastReceiver)都是通过Intent对象来激活的。

Intent对象绑定了所期望的操作的信息说明---包括要操作的数据、执行操作的组件类别、以及其他相关的指令。

Android会定位一个合适的组件来响应Intent对象的请求,如果需要它启动这个组件的一个新的实例,并且把Intent对象传递给这个实例。

组件通过Intent过滤器来公布它们所具有的能力---组件所能响应的Intent对象的类型。

因此Android系统在启动组件之前,必须了解组件能够处理那些Intent对象,Intent过滤器要在清单文件的元素中指定。

明确命名目标组件的Intent对象,会激活那个组件,过滤器并不扮演一个角色,但是如果没有指定目标组件名称的Intent对象要想激活一个组件,那么它必须能够通过这个组件的一个过滤器来传递。

图标和标题

许多元素有icon和label属性,这两个属性能够声明显示给用户的小图标和文本标签。

还有一些属性有description属性,这个属性值用于在屏幕上显示一些比较长的解释性的文本。

例如元素就有这三个属性,这样在用户询问是否授予应用程序所请求权限时,就可以用一个icon代表权限、label代表权限名称、description来详细说明权限的内容,并把这些信息展示给用户。

在任何情况下,在容器型元素中设置的icon和label都会成为它所包含的所有子元素的默认的icon和label设置。

这样,在元素中设置的icon和label属性值就会成为每个应用程序组件的默认icon和label值。

针对一个组件的icon和label设置也会有同样的效果---例如,一个元素中设置的icon和label属性值,会成这个中每个元素的默认设置。

如果元素设置了一个label属性,但是元素以及它的都没有设置这个属性,那么这个元素的label属性值会作为元素的label属性的默认值。

给Intent过滤器设置的icon和label属性被用于代表一个组件,不管什么时候,过滤器都会用这两个属性来向用户展示组件所能满足的功能。

例如,带有android.intent.action.MAIN和android.intent.category.LAUNCHER操作的一个过滤器,会把对应的Activity做应用程序的启动界面来处理,也就是说,它应该作为Android应用程序启动器中一个应用程序来显示,因此这个过滤器中的icon和label的属性设置应该显示在Launcher中。

权限

permission是一种约束,它限制了对设备上的数据或部分代码的访问。

施加权限是为了保护关键的数据和代码不被滥用,防止给用户带来不好的用户体验。

每种权限都会有一个唯一的标签来标识。

通常,标签指明了要约束的操作。

例如:

android.permission.CALL_EMERGENCY_NUMBERS 

android.permission.READ_OWNER_DATA 

android.permission.SET_WALLPAPER 

android.permission.DEVICE_POWER

一个功能能够通过多个权限来施加保护。

如果应用程序需要访问一个被权限保护的功能,那么它必须在清单文件中用元素来声明其要求的权限。

然后,在应用程序被安装到设备上时,Android安装器会通过检查应用程序的数字证书,以及询问用户,来确定是否要授予应用程序所请求的权限。

如果权限请求被接受,那么应用程序就能够使用被保护的功能,否则,在试图访问那些受保护的功能时就会失败,而且不会给用户任何提示。

应用程序也可以有保护它自己的组件(Activity、Service、BroadcastReceiver、ContentProvider)。

通常可以利用Android系统中定义的权限(在android.Manifest.permission类中列出的权限),也可以利用其它应用程序声明的权限,还可以定义自己的权限。

元素来声明一个新的权限。

例如,一个Activity可以通过下列方法来保护:

   

name="com.example.project.DEBIT_ACCT" ... />

   

name="com.example.project.DEBIT_ACCT"/>

  ...

   

     

name="com.example.project.FreneticActivity"

          android:

permission="com.example.project.DEBIT_ACCT"

         ... >

      ...

     

   

要注意的是,在这个例子中,不仅使用元素声明了一个DEBIT_ACCT权限,而且还用元素申请了一个DEBIT_ACCT权限。

为了让应用程序的其他组件能够启动这个被保护的Activity,即使这种保护是应用程序自己施加的,也必须要这样申请。

在同一个例子中,如果permission属性设置了另外一种权限(如android:

permission.CALL_EMERGENCY_NUMBERS),那么就没有必要再用元素来声明它了。

但是依然有必要使用元素来进行必要的申请。

元素为一组在代码中定义的权限声明了一个命名空间,并且元素为这个权限组定义了一个标签,这个标签在向用户展示权限时,只会影响到权限的分组。

元素没有指定哪个权限属于该组,它只是给出了一个组名。

一个权限通过比较元素的permissionGroup属性值来确定其分组。

外部类库

每个应用程序都会链接默认的Android类库,包括构建程序的基本程序包(如,Activity、Service、Intent、View、Button、Application、ContentProvider等等)。

但是,有些包会驻留在它们自己的类库中,如果应用要使用这些包中的代码,就必须明确的要求链接这些类库。

对于每个要链接的类库,清单文件中必须包含单独的元素。

AndroidManifest.xml文件详解(action)

语法(SYNATX):

name="string"/>

包含于(CONTAINEDIN):

说明(DESCRIPTION):

给Intent过滤器添加一个操作。

一个元素必须包含一个或多个元素,如果一个也没有包含,那么就不会有Intent对象通过过滤器。

属性(ATTRIBUTES):

android:

name

它定义了操作的名称。

在Intent类中用ACTION_string常量定义一些标准的操作。

要把这些操作跟这个属性关联,就要把前置的ACTION_字符串换成“android.intent.action.”。

例如,对于ACTION_MAIN操作,要使用android.intent.action.MAIN来作为属性值,对于ACTION_WEB_SEARCH操作,要使用android.intent.action.WEB_SEATCH来作为属性值。

对于自定义的操作,最好使用包名来作为前缀,以确保唯一性。

例如,TRANSMOGRIFY操作可以像下例这样定义:

name="com.example.project.TRANSMOGRIFY"/>

引入版本(INTRODUCEDIN):

API级别 1

AndroidManifest.xml文件详解(activity)

(一)

语法(SYNATX):

allowTaskReparenting=["true" | "false"]

      android:

alwaysRetainTaskState=["true" | "false"]

      android:

clearTaskOnLaunch=["true" | "false"]

      android:

configChanges=["mcc", "mnc", "locale",

                 "touchscreen", "keyboard", "keyboardHidden",

                 "navigation", "screenLayout", "fontScale", "uiMode",

                 "orientation", "screenSize", "smallestScreenSize"]

      android:

enabled=["true" | "false"]

      android:

excludeFromRecents=["true" | "false"]

      android:

exported=["true" | "false"]

      android:

finishOnTaskLaunch=["true" | "false"]

      android:

hardwareAccelerated=["true" | "false"]

      android:

icon="drawableresource"

      android:

label="stringresource"

      android:

launchMode=["multiple" | "singleTop" |

                "singleTask" | "singleInstance"]

      android:

multiprocess=["true" | "false"]

      android:

name="string"

      android:

noHistory=["true" | "false"] 

      android:

permission="string"

      android:

process="string"

      android:

screenOrientation=["unspecified" | "user" | "behind" |

                   "landscape" | "portrait" |

                   "reverseLandscape" | "reversePortrait" |

                   "sensorLandscape" | "sensorPortrait" |

                   "sensor" | "fullSensor" | "nosensor"]

      android:

stateNotNeeded=["true" | "false"]

      android:

taskAffinity="string"

      android:

theme="resourceortheme"

      android:

uiOptions=["none" | "splitActionBarWhenNarrow"]

      android:

windowSoftInputMode=["stateUnspecified",

                    "stateUnchanged", "stateHidden",

                    "stateAlwaysHidden", "stateVisible",

          

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1