下面的图显示了清单文件,并且它可以包含每一元件的一般结构。每个元素,与所有它的属性一起被记录在全在一个单独的文件中。要查看有关的任何元素的详细信息,点击该元素的名称在图中,在下面的图,或元素名称的任何其他提及的元素的字母顺序排列。
?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 /> <path-permission /> </provider> <uses-library /> </application> </manifest>所有可以出现在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>
文件约定
一些约定和规则普遍适用于在清单中的所有元素和属性:
分子
只有<清单>和<应用>元素是必需的,它们都必须存在,并且只能出现一次。大部分的人都可以发生多次或根本不出现 - 尽管至少他们中的一些必须存在的清单来完成任何有意义的事。
如果一个元素包含任何东西,它包含其他元素。所有值都通过属性设置,而不是一个元素内的字符数据。
在同一水平的元素之间通常是无序。例如,<活动>,<提供商>和<服务>元素可以任意顺序混合。 (安<活动别名>元素是例外:它必须遵循<活动>它是一个别名)。
属性
在形式上,所有的属性都是可选的。然而,也有一些必须为实现其目的的元件被指定。使用文件作为指导。对于真正的可选属性,它记载了默认值或状态在没有规范的会发生什么。
除了根<清单>元素的一些属性,所有的属性名开头的机器人:前缀 - 例如,Android版:alwaysRetainTaskState。因为前缀是共通的,文件的名字提及一个属性时忽略它。
声明类名
许多元素对应的Java对象,包括应用程序本身(<application>元素)和它的主要成分元素 - 活动(<活动>),服务(<服务>),广播接收机(<接收>)和内容提供商(<提供商>)。
如果你定义一个子类,如同你总是会为组件类(活动,服务,广播接收器和ContentProvider的),该子类通过一个name属性声明。该名称必须包括完整的包。例如,一个服务子类可以声明如下
<manifest . . . > <application . . . > <service android:name="com.example.project.SecretService" . . . > . . . </service> . . . </application> </manifest>但是,作为一个缩写,如果字符串的第一个字符是句号,该字符串添加到应用程序的包名(由<清单>元素的package属性指定)。以下分配是与上述相同的操作之一:
<manifest package="com.example.project" . . . > <application . . . > <service android:name=".SecretService" . . . > . . . </service> . . . </application> </manifest>当开始一个部件,机器人创建名称子类的实例。如果没有指定一个子类,它创建的基类的一个实例。
<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>资源值
<activity android:icon="@drawable/smallPic" . . . >从一个主题的值以类似的方式表示,但与初始“?”而不是 '@':
<manifest . . . > <permission android:name="com.example.project.DEBIT_ACCT" . . . /> <uses-permission android:name="com.example.project.DEBIT_ACCT" /> . . . <application . . .> <activity android:name="com.example.project.FreneticActivity" android:permission="com.example.project.DEBIT_ACCT" . . . > . . . </activity> </application> </manifest>需要注意的是,在这个例子中,DEBIT_ACCT权限不仅与<权限>元素声明,它的使用也要求与<用途-权限>元素。其使用必须请求,以便启动保护的活动的应用程序的其它部件,即使保护是由应用自身强加的。
然而,一些软件包驻留在自己的图书馆。如果应用程序使用任何这些软件包的代码,就必须明确要求对他们进行联系。清单必须包含一个单独的<用途库>元素命名每个库。 (库名可以为包的文档中找到。)
<action>
句法
<action android:name="string" />包含于:
<action android:name="com.example.project.TRANSMOGRIFY" />