AndroidManifestxml文件详解.docx
- 文档编号:16687441
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:20
- 大小:27.12KB
AndroidManifestxml文件详解.docx
《AndroidManifestxml文件详解.docx》由会员分享,可在线阅读,更多相关《AndroidManifestxml文件详解.docx(20页珍藏版)》请在冰点文库上搜索。
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:
alwaysRetainTaskState。
因为这个前缀是通用的,所以本文档在提到属性名时,通常会忽略这个前缀。
声明类名称
许多元素都对应着Java对象,包括代表应用程序自己的元素
如果要定义子类,那么这些子类几乎总是继承以下组件类:
Activity、Service、BroadcastReceiver、ContentProvider。
子类是通过name属性来声明的。
这个名称必须是完整Java包名。
例如,下例演示了Service子类的声明方法:
name="com.example.project.SecretService" ... > ...
...
但是,也可以使用简略的表达方式,用”.”符号做为name属性值的第一个字符。
在Android系统解析是会在”.”符号前追加包名(包名是在
下例的声明方法与上例的结果相同:
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都会成为它所包含的所有子元素的默认的icon和label设置。 这样,在 针对一个组件的icon和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" ... > ... 要注意的是,在这个例子中,不仅使用 为了让应用程序的其他组件能够启动这个被保护的Activity,即使这种保护是应用程序自己施加的,也必须要这样申请。 在同一个例子中,如果permission属性设置了另外一种权限(如android: permission.CALL_EMERGENCY_NUMBERS),那么就没有必要再用 但是依然有必要使用 一个权限通过比较 外部类库 每个应用程序都会链接默认的Android类库,包括构建程序的基本程序包(如,Activity、Service、Intent、View、Button、Application、ContentProvider等等)。 但是,有些包会驻留在它们自己的类库中,如果应用要使用这些包中的代码,就必须明确的要求链接这些类库。 对于每个要链接的类库,清单文件中必须包含单独的 AndroidManifest.xml文件详解(action) 语法(SYNATX): name="string"/> 包含于(CONTAINEDIN): 说明(DESCRIPTION): 给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",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AndroidManifestxml 文件 详解