一:概述
所有的app都要在根目录下AndroidManifest.xml文件,这个文件显示了app告诉android系统的基本信息。在app代码运行之前,android系统从这个文件获取基本信息
功能:
- 给app的java包起名作为这个app的唯一标识符
- 声明app中要使用的组件
- 决定哪些进程持有app组件
- 确定app需要的用户权限
- 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
- 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
- 声明app需要的最低级别
- 声明app需要链接的API函数库(除了android API框架)
二:Manifest文件的结构
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <manifest>
4
5 <uses-permission />
6 <permission />
7 <permission-tree />
8 <permission-group />
9 <instrumentation />
10 <uses-sdk />
11 <uses-configuration />
12 <uses-feature />
13 <supports-screens />
14 <compatible-screens />
15 <supports-gl-texture />
16
17 <application>
18
19 <activity>
20 <intent-filter>
21 <action />
22 <category />
23 <data />
24 </intent-filter>
25 <meta-data />
26 </activity>
27
28 <activity-alias>
29 <intent-filter> . . . </intent-filter>
30 <meta-data />
31 </activity-alias>
32
33 <service>
34 <intent-filter> . . . </intent-filter>
35 <meta-data/>
36 </service>
37
38 <receiver>
39 <intent-filter> . . . </intent-filter>
40 <meta-data />
41 </receiver>
42
43 <provider>
44 <grant-uri-permission />
45 <meta-data />
46 <path-permission />
47 </provider>
48
49 <uses-library />
50
51 </application>
52
53 </manifest>
三:Manifest文件惯例
element:
每一个Manifest文件都必须要出现一次<manifest>和<application>元素,其他元素根据功能需要决定出现一次、多次或一次也不出现。
所有值通过属性来设置,不会作为元素内的字符数据。
同一级别的元素是乱序排列的。( <activity-alias> 元素是个例外,它必须跟在它所引用的<activity> 后面。)
Attribute:
正式意义上来说,每个元素的属性都是可选择的,但是在完成某个功能的前提下,某些元素的属性值必须要说明的,使用文档作为指引。对于真正可选的属性,它会提及一个默认值或讲述在规范缺少的时候发生什么。
除了根元素<manifest>的属性值外,其他所有属性值都必须以前缀android:
开始,因为前缀是一般性概念,所以当通过名称引用属性时文档通常会忽略它
Declaring class names:
一些元素相当于java对象,包括<application>以及四大组件<activity>、<service>、<receiver>、<provider>
如果你想定义一个组件类的子类时,这个子类的声明通过name属性,name属性包括了完整包名
1 <manifest . . . >
2 <application . . . >
3 <service android:name="com.example.project.SecretService" . . . >
4 . . .
5 </service>
6 . . .
7 </application>
8 </manifest>
但是,作为简写。如果字符串的第一个字符是".",字符串将被添加到app的包名的尾部
1 <manifest package="com.example.project" . . . >
2 <application . . . >
3 <service android:name=".SecretService" . . . >
4 . . .
5 </service>
6 . . .
7 </application>
8 </manifest>
当启动一个组件时,android创建一个子类的对象,如果子类未指定,它会创建一个基类
Multiple values:
如果指定的值多于一个,通常要将元素重复再指定值,而不是在一个元素单元内列出多个值
<intent-filter . . . >
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.INSERT" />
<action android:name="android.intent.action.DELETE" />
. . .
</intent-filter>
Resource values:
一些资源有显示给用户的值,例如,activity的一个label或者icon,这个属性值应该被本地化,因此被设置成来自同一个资源或主题。
资源值用以下格式来表达
1
package:当资源在app的同一个包里时,package值可缺省
type:资源的类型,例如string、drawable
name:是一种用来指定特殊资源的名字。
1 <activity android:icon="@drawable/smallPic" . . . >
主题值用以下格式表达
1
String values:
属性值为字符串时,表示转义字符要加"\\"。例如,'\\n'用作回车或'\\uxxxx'用作一个Unicode字符。