will

每天进步一点点

Android学习--1.AndroidManifest.xml文件

写在前面:最近在看Android自带的学习指南,所以就把所看的内容整理下,方便自己查阅,或许对其他同仁也有所助,由于本人的英语水平有限,所以一些理解上或存在差错,希望热心朋友指正,在此谢过!

一、Android应用都必须包含一个名为AndroidManifest.xml的文件,文件存放在根目录下,它包含Android系统应用的基本信息,文件必须在执行一些应用代码前加 载,主要完成以下功能:
1.为应用命名包名,且包名唯一;
2.描述应用中的组件:activities, services, broadcast receivers,content providers,列出组件和签名的功能的实现类(比如,可以处理什么样的Intent);
3.确定哪个是应用的主进程;
4.声明应用中的必须权限以便可以访问API的中被保护的部分以及和其它应用交互;它也可以声明其它要和应用组件交互的权限;
5.列出了Instrumentation类所提供的程序运行中所需的设置信息和其它信息。这些声明仅当应用被开发或被测试才存在于manifest中,应用发布时被移除;
6.声明应用所需的Android API最小级别(比如Android2.2 API的级别是8);
7.列出应用必须连接依靠的库文件。

二、Manifest File的结构
1.下图显示的Manifest 的基本结构以及它可以包含的元素;每个元素和属性被定义在独立的文件中;

<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<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 />
</provider>
<uses-library />
</application>
</manifest>

2. Manifest可以出现的组件只能是下面列出,这些是约定的组件,不能添加自己定义的逐渐和属性;

<action>
<activity>
<activity-alias>
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
<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文件约定 
一些约定和规则适用所有在manifest的元素和属性:
1.Elements:只用<manifest>和<application>是必须的,它们必须且只能出现一次,其它大多数的可以不出现或出现多次,然而它们中的一些必须出现在manifest  中为了实现一些目的。如果一个一个元素根本不包含任何东西,它包含其它的元素。那么所有的值被设置成属性,不作为元素的字符数据;同一级别的数据通常不限制排列次序,但 <activity-alias>例外,它必须紧接着它要别名的<activity>;

2.Attributes:依一个合理的认知,所有的属性都是可选的,然而有些为了实现一定的目的必须指出,除了根元素<manifest>之外的其它一些元素,所有属性的命名以一个'android:'作为前缀;因为这个前缀是通用的,所以文档中通常省落它当根据名字提及属性时;

3.Declaring class names :一些类相当于Java对象,包含应用自身的元素(<application>元素)和它主要的组件-(<activity>), services (<service>),    broadcast receivers (<receiver>), 和content providers (<provider>);如果你定义一个子类,通常都是继承组件类(Activity, Service, BroadcastReceiver, 和ContentProvider),子类中声明name属性,这个name必需必须包含完整的包名称,例如一个Service子类可以声明成如下样式:

<manifest . . . >
   
<application . . . >
       
<service android:name="com.example.project.SecretService" . . . >
            . . .
       
</service>
        . . .
   
</application>
</manifest>

然而,一种简便写法,如果子类第一个字符是点,name是这个字符附加在应用的包名(<manifest>元素的package属性)后,下面的声明方式等同于上面的。

<manifest package="com.example.project" . . . >
   
<application . . . >
       
<service android:name=".SecretService" . . . >
            . . .
       
</service>
        . . .
   
</application>
</manifest>

4.Multiple values如果超过一个的值被指定,这些元素通常是重复的,我们不是不是为每一个元素列出Multiple values;例如一个intent filter可以列出一些action;

<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.Resource values :一些属性有被显示给用户的值,例如,一个activity中的label和icon。这些属性的值被本地化,因此被设置在resource或theme中,Resource值被描述成如下的方式

@[package:]type:name

如果Resource和应用在同一个包下,那么package可以省略,type是resource的一种类型--例如"string" 或 "drawable",name 是指定resource的标识,例如<activity android:icon="@drawable/smallPic" . . . >
从theme中的获取Values被指定和Resource相识的方式,唯一不同的是使用大写的"?"代替"@",如下:

?[package:]type:name

6.String values :当一个属性的值是字符串,双反斜杠('\\')被用于转义--例如:'\\n'表示新行或'\\uxxxx'标识一个Unicode字符。

这次先写到这里。

posted on 2011-06-09 17:19  will.sun  阅读(1161)  评论(0编辑  收藏  举报

导航