Android 5从入门到精通
上QQ阅读APP看书,第一时间看更新

3.4 Manifest文件

每一个Android项目都包含一个清单(Manifest)文件AndroidManifest.xml,它是XML格式的Android程序声明文件,包含了Android系统运行程序前所必须掌握的重要信息,这些信息包含应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个AndroidManifest.xml。

例如,Manifest文件可以使用如下代码声明一个activity:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ... >
        <application android:icon="@drawable/app_icon.png" ... >
            <activity android:name="com.example.project.ExampleActivity"
                      android:label="@string/example_label" ... >
            </activity>
            ...
        </application>
    </manifest>

AndroidManifest.xml中可包含的所有标签元素如以下代码所示,其中除了<manifest>和<application>标签是必需的,其他所有标签都可按情况添加。

    <?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 />
           </provider>
           <uses-library />
       </application>
    </manifest>

在此,仅对几种常见的标签进行简单介绍。

(1)manifest标签

manifest标签是AndroidManifest.xml文件的根标签,该标签用于设置与项目相关的一些属性,比如用于唯一标识应用程序的package属性,用于记录应用程序版本的Android:versionName属性等。其中的xmlns:Android属性必须被定义为:“http://schemas.Android.com/apk/res/Android”

(2)application标签

manifest标签仅能包含一个application标签,它使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。它还可以作为一个包含了活动(Activity)、服务(Service)、内容提供器(Provider)和广播接收器(BroadcastReceiver)标签的容器,用来指定应用程序组件。


●activity标签。应用程序显示的每一个Activity都要求有一个activity标签,并使用Android:name属性来指定类的名称。这必须包含核心的启动Activity和其他所有可以显示的屏幕或者对话框。启动任何一个没有在清单中定义的Activity时都会抛出一个运行时异常。每一个Activity节点都允许使用intent-filter子标签来指定哪个Intent启动该活动。

●service标签。和activity标签一样,应用程序中使用的每一个Service类都要创建一个新的service标签。(Service标签也支持使用intent-filter子标签来允许后面的运行时绑定。)

●provider标签。provider标签用来说明应用程序中的每一个内容提供器。内容提供器是用来管理数据库访问以及程序内和程序间共享的,第6章将会对其进行详细讲述。

●receiver标签。通过添加receiver标签,可以注册一个广播接收器(Broadcast Receiver),而不用事先启动应用程序。广播接收器就像全局事件监听器一样,一旦注册了之后,无论何时,只要与它相匹配的intent被应用程序广播出来,它就会立即执行。通过在声明中注册一个广播接收器,可以使这个进程实现完全自动化。如果一个匹配的Intent被广播了,则应用程序就会自动启动,并且你注册的广播接收器也会开始运行。


(3)uses-permission标签

作为安全模型的一部分,uses-permission标签声明了那些自己定义的权限,而这些权限是应用程序正常执行所必需的。在安装程序时,设定的所有权限将会告诉给用户,由他们来决定同意与否。对很多本地Android服务来说,权限都是必需的,特别是那些需要付费或者有安全问题的服务(例如,拨号、接收SMS或者使用基于位置的服务)。第三方应用程序,包括你自己的应用程序,也可以在提供对共享的程序组件进行访问之前指定权限。

(4)permission标签

在可以限制访问某个应用程序组件之前,需要在清单中定义一个permission。可以使用permission标签来创建这些权限定义。然后,应用程序组件就可以通过添加Android: permission属性来要求这些权限。其他的应用程序就需要在它们的清单中包含uses-permission标签(并且通过授权),之后才能使用这些受保护的组件。在permission标签内,可以详细指定允许的访问权限的级别(normal、dangerous、signature,signatureOrSystem)、一个label属性和一个外部资源,这个外部资源应该包含了对授予这种权限的风险的描述。

(5)instrumentation标签

Instrumentation类提供一个框架,用来在应用程序运行时在活动或者服务上运行测试。它们提供了一些方法来监控应用程序及其与系统资源的交互。对于为自己的应用程序所创建的每一个测试类,都需要创建一个新的节点。