Manifest.xml文件的职责:
指定APP的包名.
声明四大组件, 以及启动方式.
指定APP运行的进程名称.
指定APP权限.
指定最小API版本.
指定需要连接的库.

Manifest.xml的格式:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />

<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>

<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>

<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>

<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>

<provider>
<grant-uri-permission />
<meta-data />
<path-permission />
</provider>

<uses-library />

</application>
</manifest>

全部标签:
<action>
<activity>
<activity-alias> ==》activity-alias是android里为了重复使用Activity而设计的。
<application>
<category>
<data>
<grant-uri-permission>

<instrumentation>
==》Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>

Manifest.xml文件规则:
1.标签: 只有<manifest>和<application>是必须的, 它们俩只能被声明一次. 其余都是可选标签.
在同一级别的标签没有先后顺序的要求, 不过这里有一个例外:<activity-alias>必须紧跟<activity>.
2.属性: 理论上讲所有的属性都是可选的. 除了<application>标签外, 其他标签的属性都以android:前缀开头.
3.声明类名: 很多标签都对应一个Java的对象, 包括<application>以及四大组件.
Android规定使用name属性来为标签指定一个Java类。

比如下面是为一个Service指定类名:
<manifest . . . >
<application . . . >
<service android:name="com.example.project.SecretService" . . . >
. . .
</service>
. . .
</application>
</manifest>
如果类所在名跟包名一样, 则可以简写成一个”.”, 比如:
<manifest package="com.example.project" . . . >
<application . . . >
<service android:name=".SecretService" . . . >
. . .
</service>
. . .
</application>
</manifest>
启动一个组件的时候, Android会创建一个被指定的子类的实例, 如果没指定的话, 那么Android会创建一个组件基类的实例.

4.单个属性多个值: 有些属性可以接收多个值, 通常我们会这样使用重复的属性:
<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>

5.引用资源: 有些属性值需要我们引用资源文件, 跟之前描述资源文件的用法一样,
只需要使用@[package:]type:name格式来引用资源即可:<activity android:icon="@drawable/smallPic" . . . >

6.使用字符串: 当属性值是字符串的时候, 使用转义字符必须加”\\”, 比如”\\n”用于换行, “\\uxxxx”用于Unicode

Manifest.xml的文件特性:
1.Intent Filters:
Intent是启动Android组件的重要工具,Intent意为”意图”, 是启动组件的”信使”, 它包括需要传送的数据(data), 处理action的组件的种类(category)和其它的相关说明. Android根据Intent来启动一个对应的组件, 然后将Intent传递给它.
每个组件可以包含多个<Intentfilter>, 它告诉Android自己想要接收的Intent长啥样. 当一个Intent明确指定了组件名称的时候(显示启动activity), Intent filter就不再发挥作用. 但是对于不指定名字的Intent(隐式启动activity),那么它只能启动符合的Intent filter的组件.

2.图标和标签:
很多标签都有图标(icon)和标签(label)属性, 它们分别指定了小图标和文字标签给用户. 有些还支持更长的description属性可以显示更长的文字信息. 如果一个标签包含了icon和label属性, 那么它们会成为子标签的默认属性. 所以只要设置了<application>的icon和label属性, 那么它们会成为application内所有组件的默认icon和label属性.

3.权限(permission): 权限是限制APP访问指定数据的约束性标签. 它用来指定APP拥有的权限. 是一串字符串, 如:
android.permission.CALL_EMERGENCY_NUMBERS ==>拨打紧急号码
android.permission.READ_OWNER_DATA ==>允许程序读取所有者的数据
android.permission.SET_WALLPAPER ==>设置壁纸
android.permission.DEVICE_POWER ==>设备电源权限
上述四个分别对应拨打紧急号码, 允许程序读取所有者的数据, 设置壁纸, 设备电源权限. 如果APP想访问某个被permission保护的权限, 那么必须用<user-permission>标签申请该权限. 在安装的时候, 系统将会检查这些权限, 并且将敏感权限提示给用户,由用户决定是否安装.
一款APP也可以通过权限管理来保护自己的组件, 可以使用Android提供的permissions(在android.Manifest.permission中列出), 也可以使用其它APP定义的permission,还可以自己定义.

定义一个permission的代码如下:
<manifest . . . >
<permission android:name="com.example.project.DEBIT_ACCT" . . . />
<uses-permission android:name="com.example.project.DEBIT_ACCT" />
. . .
<application . . .>
<activity android:name="com.example.project.FreneticActivity"
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
</activity>
</application>
</manifest>
这里需要注意的是:
所有需要访问被DEBIT_ACCT保护的Activity的组件, 都得使用<user-permission>来声明该权限, 就算在自己的APP内部也是如此.
<permission-tree>标签用于为同一组permission声明命名空间.<permission-group>则为一组permission定义一个label. 它只影响权限向用户展示的方式. <permission-group>仅仅用于给出一个组的名字, 并不指定权限是如何分组的.决定permission如何分组的是<permission>中的permissionGroup属性.

4.库(Libraries):
每个Android APP都会与Android默认的基础库连接, 包括基础的类, 比如Activity, Service, Intent, Button, View等. 然而有些时候我们也需要为我们的APP连接外部的库, 这些库需要<uses-library>标签指定.

android学习笔记30——AndroidMainfest.xml的更多相关文章

  1. Android学习笔记之AndroidManifest.xml文件解析(转)

    //自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...

  2. Android学习笔记之AndroidManifest.xml文件解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  3. Android学习笔记之AndroidManifest.xml文件解析(详解)

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  4. Android学习笔记(9):使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面.然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller.是模型(model)-视图(view)-控制 ...

  5. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  6. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常

    目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...

  7. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

随机推荐

  1. Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题

    1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选 ...

  2. this指针基础介绍

    =================this指针的由来==================== 一个学生可以有多本书一样,而这些书都是属于这个同学的:同理,如果有很多个同学在一起,那么为了确定他们的书不 ...

  3. 一个好用的Log管理类

    public class L { private static String className; //所在的类名 private static String methodName; //所在的方法名 ...

  4. [JSP] c:forEach 输出序号 每行自动生成序号

    关键在于<c:forEach>的varStatus属性,具体代码如下: <table width="500" border="0" cells ...

  5. MySql 查询一周内最近7天记录

    本周内:select * from wap_content where week(created_at) = week(now) 查询一天:select * from table where to_d ...

  6. ZOJ-3929 Deque and Balls (DP+找规律)

    题目大意:n个数,每个数的大小都在1~n之间.操作n次,第 i 次将第 i 个数放到一个双端队列里面,放到队列两端的概率是相等的.问操作n次之后双端队列中元素满足xi>xi+1的对数的期望,输出 ...

  7. Java之JUC系列:外部Tools

    前面写了两篇JDBC源码的文章,自己都觉得有点枯燥,先插一段JUC系列的文章来换换胃口,前面有文章大概介绍过JUC包含的东西,JUC体系包含的内容也是非常的多,不是一两句可以说清楚的,我这首先列出将会 ...

  8. 使用 margin 让div块内容居中

    问:有一个div块,其width为300px,如何设置margin让div块居中显示? 答:margin设置为 margin:0 auto,即div块的上下外边距设置为 0 , 左右外边距设置为 自动 ...

  9. 自然语言处理3.3——使用Unicode进行文字处理

    全世界有多种语言,经常需要应用程序处理不同的语言和字符集.下面将介绍如何利用Unicode处理使用非ASCII字符集文字. 1.什么是Unicode Unicode支持一百万种以上的字符,每一个字符分 ...

  10. 008. asp.net mvc3.0安装文件及其安装时发生错误的解决方案

    0. 安装步骤: vs2010 → vs2010sp1→ AspNetMVC3Setup.exe→ AspNetMVC3Setup_CHS.exe→ AspNetMVC3ToolsUpdateSetu ...