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字符。

这次先写到这里。

转载于:https://www.cnblogs.com/slmm/archive/2011/06/09/Android.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值