ITEEDU

AndroidManifest.xml 文件

AndroidManifest.xml是每一个应用都需要的文件, 位于应用根目录下,它 描述了程序包的全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类, 什么样的数据可以操作, 以及在什么地方运行。

这个文件的一个重要方面就是是其中的intent过滤器(intent filters)。 这些过滤器描述了何时何种情况下让活动(activity) 启动。 当一个activity(或是操作系统)想要执行一个动作, 例如打开一个Web页或是打开一个联系人选取屏幕,它将会创建一个Intent对象。 该对象包含了很多几个描述符(descriptors), 描述了你想做什么操作, 你想处理什么数据, 数据的类型, 以及一些其他的信息。 Android将Intent对象中的信息与所有应用暴露的intent过滤器比较, 找到一个最能恰当处理请求者要求的数据和动作(action)的activity。关于intents的更多信息在Intent页可以找到。

除了声明应用的活动(Activities),内容管理器( Content Providers),服务( Services), 和 Intent 接收器(Intent Receivers), 你也可以在AndroidManifest.xml文件中指定权限和instrumentation(安全控制和测试). 请查看AndroidManifest了解这个标签和他们的属性。

如下是一个简单的AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.my_domain.app.helloactivity">
        
    <application android:label="@string/app_name">
    
        <activity android:name=".HelloActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        
    </application>
    
</manifest>

需要注意的一些通用事项:

  • 几乎所有的AndroidManifest.xml 文件(同其他的Android文件一样)都会在其第一个元素(element)中包含一个命名空间的声明xmlns:android="http://schemas.android.com/apk/res/android" 。 该声明使标准Android属性在该文件中可用,这些属性为文件中的xml元素提供了大部分数据。.

  • 大多数的manifests包含一个<application>元素, 该元素定了这个程序包内所有应用层面上可用的组件和属性。

  • 所有需要可以从应用程序启动器(program launcher)中呈现给用户的顶层应用都至少需要包括一个活动(Activity)组件,它用来支持MAIN action 和显示在LAUNCHER 目录中。

下面列出了AndroidManifest.xml 这个文件详细的结构大纲, 描述了所有可用标签。

<manifest>
文件根节点。 描述了程序包的所有内容。 在其节点下面内可以放置:
<uses-permission>
请求一个安全授权, 你的程序包必须被授予该权限才能正确的操作。参见看安全模块( Security Model)文档以了解有关授权的更多信息。 一个manifest可以包含零个或多个这样的节点。
<permission>
声明一个安全授权,它 用来限制哪些应用可以访问你的(或别的)程序包内的组件和特有功能(feature)。参见看安全模块( Security Model)文档以了解有关授权的更多信息。一个manifest可以包含零个或多个这样的节点。
<instrumentation>
声明一个instrumentation 组件可用于测试这一个或别的包的代码。更详细内容参见Instrumentation 。一个manifest可以包含零个或多个这样的节点。
<application>
声明程序包内应用级别组件的根节点。 该节点能够描述应用程序的全局(和/或)默认属性, 例如标签, 图标, 主题, 需要的权限, 等等。 一个manifest可以包含零个或一个这样的节点(多个application 节点是不允许的)。 在该节点下, 可以包含零个或多个以下每个组件的声明:
<activity>
活动(Activity) 是应用与用户交互的最主要机制。当一个应用运行的时候, 用户看到的第一个屏幕就是activity。 此外, 用户所使用的其他绝大多数屏幕也是由独立的活动实现的,它们由额外活动tag声明。

注意: 无论活动是外部可见还是仅在程序包内使用,在manifest中每一个活动必须在定义一个 标签。如果活动在manifest 中没有匹配的标签,那么你无法启动它。

此外,为了支持运行时活动查找,你可以包含一个或多个 元素来描述该活动支持的动作(actions)。

<intent-filter>
以一个IntentFilter的形式声明组件所支持的特定的一组 Intent 值。除了可以在此元素下指定的各种值,也可以在此对属性(atttibutes)进行赋值以支持唯一的标签(label),图标(icon),和所描述动作(action)的其它信息。
<action>
该组件支持的 Intent action。
<category>
该组件支持的Intent目录(Intent category)。
<data>
该组件支持的 Intent data MIME type, Intent data URI scheme, Intent data URI authority, 或 Intent data URI path。

你也可把一个或多个meta-data 与你的活动(activity)关联,其它客户端(clients)可以取得这些meta-dada以获得关于这个活动的任意信息。

<meta-data>
向活动(activity)添加新的元数据(meta data),客户端可以通过ComponentInfo.metaData获取该数据。
<receiver>
一个BroadcastReceiver 可以使应用接收数据变化和行为发生的通知,即使这个应用没有在运行也同样可以。同activity 标签一样, 你可以选择包含一个或多个该receiver支持元素或值。更多信息参见活动(activity)的<intent-filter><meta-data>描述。
<service>
服务(Service )是一个在后台可以运行任意长时间的组件。 同activity 标签一样, 你可以选择包含一个或多个该服务支持元素或值。更多信息参见活动(activity)的<intent-filter><meta-data> 描述。
<provider>
组件管理器(ContentProvider)用来管理持久数据和向其它应用发布数据的组件。你也可以按照活动的(activity’s)中描述附加一个或多个 <meta-data> 值。