上一讲我们介绍了使用Eclipse开发Android应用程序时的项目结构,我们知道开发工具会为我们自动新建一个AndroidManifest.xml,那么这个文件到底有什么作用呢?结构怎样?如何配置?这一讲则一一回答这些问题。

1、AndroidManifest.xml是什么?

AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个 android程序中必须的文件。且文件名是固定的,不能修改。应用程序需要通过它向Android系统提供一些必需的信息,需要在 application运行前提供给系统。它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。

AndroidManifest.xml主要包含以下功能:

  • 说明应用程序的java 包,该包名是应用程序的唯一标识;
  • 描述应用程序的组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成;
  • 说明应用程序的组件运行在哪个process下:决定那些进程将容纳应用程序组件。
  • 声明应用程序所必须具备的权限,用以访问受保护的部分API,以及与其他应用程序的交互;
  • 声明应用程序其他的必备权限,用以组件之间的交互;
  • 列举应用程序运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;
  • 声明应用程序所需要的Android API的最低版本级别,比如1.0,1.1,1.5;
  • 列举应用程序所需要链接的库;

2、AndroidManifest.xml的结构和规则

我们结合上一讲我们新建的HelloWorld项目中的文件来进行说明:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.liuzhichao.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".HelloWorldActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

除去头部XML信息说明,首先是manifest项—根节点,其属性包括:schemas URL地址、包名(com.liuzhichao.helloworld),以及程序的版本说明。

其次是manifest的子节点application,其属性包 括:程序图标、程序名称。前面带有@表示引用资源,例如:@drawable/icon表示引用的是drawable资源中的icon,可以在其源工程的 res/drawable中找到。

uses-sdk android:minSdkVersion=”8″说明程序使用的Android SDK的最低版本,其中1表示Android 1.0,2表示Android 1.1,而8则表示Android 2.2。

然后就是application的子节点activity,其属性包括:activity的名称、activity的标 签名,其子节点intent-filter则是对activity的说明。

而在intent-filter中,action android:name=”android.intent.action.MAIN”category android:name=”android.intent.category.LAUNCHER”用以说明程序启动时的入口activity是哪个。如 果这两个属性值中分别含有MAIN和LAUNCHER,则说明它就是启动程序时的入口活动。

除了该示例manifest文件中所使用的元素之外,其他常见的标记包括以下几种。

<service>标记表示一个Service。service标记的属性包括它的类和标签。Service还可以包括<intent-filter>标记。

<receiver>标记表示一个BroadcastReceiver,它可以有一个显式<intent-filter>标记,也可以没有。

<uses-permission>标记通知Android该应用程序需要特定的安全权限。例如,如果某个应用程序需要访问某个设备上的联系人,则需要在它的AndroidManifest.xml文件中添加以下标记。

更多关于AndroidManifest.xml文件的介绍,大家可以参考官方文档: http://developer.android.com/guide/topics/manifest/manifest-intro.html其对AndroidManifest.xml文件进行了详细的说明。