manifest :可运行任何应用程序的代码

更新时间:2024-09-20 18:14

manifest是一种软件,属于AndroidManifest.XML文件,在简单的Android系统的应用中提出了重要的信息,它可以运行任何应用程序的代码。

主要功能

文件

每个安卓应用程序必须有一个AndroidManifest.xml文件,在app/manifests目录中。它在简单的Android系统的应用中提出了重要的信息,信息系统必须具备之前,它可以运行任何应用程序的代码。除其他事项外,清单中执行下列操作:

它给应用程序的Java包命名,包的名称作为应用程序的唯一标识符。

它描述了应用程序的组件的活动、服务,广播接收机,内容提供商,应用程序组成。它命名的类,实现每个组件,并出版自己的能力(例如,可以处理哪些意图的消息)。这些声明让Android系统知道这些组件是什么和在什么条件下,他们可以推出。

它决定哪些进程将运行应用程序组件。

它决定了应用程序必须有权限才能访问受保护的API部分,并与其他应用程序进行交互。

它还决定了其他人与应用程序的组件交互所需要的权限。

它宣布了Android API的应用程序需要的最低水平。

它列出了库,应用程序必须与之配对。

结构

下图显示了manifest文件和每一个元素,它可以包含的一般结构。每个元素,连同其所有属性记录在一个单独的文件。要查看有关的任何元素的详细信息,单击图中的元素的名称,在按字母顺序排列的列表,如下图,或任何其他元素的名称提到的元素。

\u003c?XML版本= “1.0”编码= “UTF-8” ?\u003e

\u003cmanifest\u003e

\u003cuses-permission/\u003e

\u003cpermission/\u003e

\u003cpermission-tree/\u003e

\u003cpermission-group/\u003e

\u003cinstrumentation/\u003e

\u003cuses-sdk/\u003e

\u003cuses-configuration/\u003e

\u003cuses-feature/\u003e

\u003csupports-screens/\u003e

\u003ccompatible-screens/\u003e

\u003csupports-gl-texture/

的\u003capplication\u003e\u003cactivity\u003e\u003cintent-filter\u003e行动\u003c /\u003e\u003c 类别\u003e\u003c数据/\u003e\u003c/意图过滤器\u003e\u003c元数据/\u003e\u003c/活动\u003e\u003cactivity-alias\u003e\u003cintent-filter\u003e。。。过滤器\u003e\u003c元数据/\u003e\u003c/活动别名\u003e的\u003cservice\u003e\u003cintent-filter\u003e。。。过滤器\u003e\u003cmeta-data/\u003e\u003c/服务\u003e\u003creceiver\u003e\u003cintent-filter\u003e。。。过滤器\u003e\u003c元数据/\u003e\u003c/接收器\u003e的\u003cprovider\u003e\u003c赠款URI权限/\u003e\u003c 元数据\u003e\u003c/供应商\u003e\u003c用途库/\u003e\u003c/申请\u003e\u003c/清单\u003e

下面列出的所有元素可以出现在manifest文件中按字母顺序排列。这是唯一合法的元素,你不能添加自己的元素或属性。

\u003caction\u003e

\u003cactivity\u003e

\u003cactivity-alias\u003e

\u003capplication\u003e

\u003ccategory\u003e

\u003cdata\u003e

\u003cgrant-uri-permission\u003e

\u003cinstrumentation\u003e

\u003cintent-filter\u003e

\u003cmanifest\u003e

\u003cmeta-data\u003e

\u003cpermission\u003e

\u003cpermission-group\u003e

\u003cpermission-tree\u003e

\u003cprovider\u003e

\u003creceiver\u003e

\u003cservice\u003e

\u003csupports-screens\u003e

\u003cuses-configuration\u003e

\u003cuses-feature\u003e

\u003cuses-library\u003e

\u003cuses-permission\u003e

\u003cuses-sdk\u003e

约定

一些公约和规则普遍适用于清单中的所有元素和属性:

分子

只有 \u003cmanifest\u003e和 的\u003capplication\u003e 元素是必需的,他们每人必须在场,并只能出现一次。大多数人可以出现多次或根本没有-但至少他们中的一些必须完成任何有意义的清单。如果一个元素包含任何东西,它包含其他元素。通过属性值设置,而不是作为一个元素内的字符数据。

一般不会下令在同一级别的元素。例如, \u003cactivity\u003e的\u003cprovider\u003e,和 的\u003cservice\u003e 元素可以以任何顺序混合。(一个 \u003cactivity-alias\u003e 元素是此规则的例外:必须遵循 \u003cactivity\u003e,它是一个别名。)

属性

在正式意义上说,所有的属性都是可选的。不过,也有一些必须指定为元素,以实现其目的。使用的文件,作为指导。对于真正的可选属性,它提到一个默认值或规范的情况下发生的事情。除了 根属性 \u003cmanifest\u003e 元素,所有的属性名与Android的开始:前缀-例如,机器人:alwaysRetainTaskState。因为前缀是普遍的,一般的文件时忽略它指属性的名字。

名称

许多元素对应到Java对象,包括应用程序本身的元素(的\u003capplication\u003e 元素),其主要成分-活动(\u003cactivity\u003e),服务(的\u003cservice\u003e),广播接收机(\u003creceiver\u003e),内容提供商(的\u003cprovider\u003e)。如果你定义一个子类,子类,你几乎总是会活动,服务, BroadcastReceiver,和ContentProvider的组件类()被宣布通过名称属性。该名称必须包括完整的包指定。例如,一个服务子类可以声明如下:

\u003c清单。。\u003e \u003c应用程序。。\u003e \u003c服务机器人:名称= “com.Exampleproject.SecretService”。。。\u003e。。。\u003c/服务\u003e。。。\u003c/申请\u003e \u003c/清单\u003e然而,作为一个缩写,如果字符串的第一个字符是一个句号,该字符串附加到应用程序的包名(由指定\u003cmanifest\u003e 元素的 包 属性)。上面是相同的分配如下:

\u003c清单的包= “com.example.project”。。\u003e \u003c应用程序。。\u003e \u003c服务机器人:名称= “。SecretService”。。。\u003e。。。\u003c/服务\u003e。。。\u003c/申请\u003e \u003c/清单\u003eAndroid的组件启动时,创建一个命名的子类的实例。如果没有指定一个子类,它创建一个基类的实例。

多个值

如果可以指定多个值,元素几乎总是重复的,而不是在一个单一的元素列出多个值。例如,一个意图过滤器可以列出几个动作:\u003c意图过滤器。。。。。\u003c/意图过滤器\u003e 资源值一些属性,可以向用户显示的值 - 例如,一个标签和一个活动的图标。这些属性的值应本地化,因此从资源或主题。资源值表示在下面的格式,[包:]类型:名称

如果资源是在应用程序相同的包,其中包名称可以省略,类型是一个类型的资源-如“串”或“绘制” -名称是名称标识的特定资源。例如:

\u003c 活动:图标= “@绘制/ smallPic”。。。\u003e以类似的方式表达主题值,但与最初的“ ? “而不是“ @ “:

[包:]类型:名称

字符串值如果属性值是一个字符串,双反斜杠(' \ \ ')必须使用转义字符-例如,“ \ \ N “一个换行符或” \ \ uxxxx“的Unicode字符。

功能

以下各节描述了一些Android的功能是如何体现在manifest文件中。

意图过滤器

应用程序(它的活动,服务和广 播接收机)的核心部件,被激活的意图。意图是信息(捆绑意向书,描述了一个理想的行动对象) -包括要采取行动时,组件类别的数据,应执行的行动,和其他有关说明。机器人找到一个合适的组件回应的意图,启动一个新的组件实例,如果需要的话,它传递的Intent对象。

组件宣传他们的能力-他们能够应对各种意图的意图过滤器 -通过。由于Android系统必须学习一个组件可以处理其中的意图之前推出的组件,意图过滤器指定在清单 \u003cintent-filter\u003e 元素。一个组件可以有任何数量的过滤器,每一个不同的能力。

意图明确命名一个目标组件将激活该组件;过滤器并没有起到作用。但意图不指定目标的名字,可以激活一个组件,只有当它可以通过组件的过滤器之一。

意向对象是如何对意图过滤器测试的信息,看到一个单独的文件,意图和意图过滤器。

图标和标签

一些元素可以向用户显示一个小图标和文本标签的图标和标签属性。有些也有 描述较长的说明性文本,也可以在屏幕上显示的属性。例如,在 \u003cpermission\u003e 元素具有所有这三个属性,这样当用户询问是否要授予应用程序的权限要求,一个图标代表的权限,权限的名称,描述它需要什么都可以呈现给用户。

在任何情况下,包含元素的图标,并在标签集变成默认的 图标和标签设置为容器的所有子元素。因此,在设置的\u003capplication\u003e 元素的图标和标签 是默认的图标,并为每个应用程序的组件标签。同样,图标和标签组件集-为例如, \u003cactivity\u003e的 元素-每个组件的默认设置 \u003cintent-filter\u003e的 元素。如果 的\u003capplication\u003e 元素设置一个标签,而是一种活动,其意图过滤器没有做,被视为应用程序标签的活动和意图过滤器的标签。

被用来代表一个组件时,该组件实现广告过滤器的功能,向用户意图过滤器设置的图标和标签。例如,一个“过滤器android.intent.action.MAIN “和” android.intent.category.LAUNCHER “设置广告作为一个,启动一个应用程序的活动-即是,作为一个在应用程序启动器应显示。在过滤器中设置的图标和标签,因此在发射器上显示的。

权限

一个权限是一种限制,限制访问代码的一部分,或在设备上的数据。施加的限制,以保护关键数据和代码可能被滥用,扭曲或损害了用户体验。

每个权限确定一个唯一的标签。标签往往表示,这是限制的行动。例如,这里是由Android定义了一些权限:

android.permission.CALL_EMERGENCY_NUMBERS

android.permission.READ_OWNER_DATA

android.permission.SET_WALLPAPER

android.permission.DEVICE_POWER

一个功能可以保护最多一个权限。

如果应用程序需要访问权限保护功能,它必须声明,它需要 在清单与权限 \u003cuses-permission\u003e的元素。然后,在设备上安装应用程序时,安装程序决定是否批准或者不批准通过检查当局签署的应用程序的证书,并在某些情况下,要求用户请求的权限。如果被授予的权限,应用程序能够使用的保护功能。如果没有,只会失败,没有任何通知用户试图访问这些功能。

应用程序还可以保护自己的组件(活动,服务,广播接收机,内容提供商)与权限。它可以采用任何定义的Android(在列出的权限 android.Manifest.permission)或其他应用程序申报。或者也可以定义自己的。一个新的权限宣布与 \u003cpermission\u003e 元素。例如,一个活动可以保护如下:

\u003c清单。。\u003e:许可机器人:名称= “com.Exampleproject.DEBIT_ACCT。。/\u003e \u003c用途许可机器人:名称= “com.example.project.DEBIT_ACCT” /\u003e。。。\u003c应用程序。。。。\u003e。。。\u003c/活动\u003e \u003c/申请\u003e \u003c/清单\u003e请注意,在这个例子中,DEBIT_ACCT许可不仅宣布 \u003cpermission\u003e 元素,它的使用也要求与 \u003cuses-permission\u003e 元素。为了应用程序的启动保护活动的其他组成部分,必须要求其使用,即使是由应用程序本身施加保护。

同样的例子,如果在宣布在别处(例如作为android.permission.CALL_EMERGENCY_NUMBERS权限,权限属性设置,它不会有必要宣布它再次 \u003cpermission\u003e 元素,但它仍然会一直有必要要求其与使用 \u003cuses-permission\u003e。

\u003cpermission-tree\u003e 元素声明为一组,将在代码中定义的权限的命名空间。和 \u003cpermission-group\u003e 定义为一组的权限(包括那些与舱单申报的标签 \u003cpermission\u003e 元素和那些宣布在别处)。它的影响只有权限如何分组时,呈现给用户。 \u003cpermission-group\u003e 元素没有指定属于该组的权限;它只是给该组的名称。权限被放置在该组分配的\u003cpermission\u003e 元件的 permissionGroup,属性组的名称。

每一个应用程序连接到默认的Android库,其中包括建筑应用(如活动,服务,意图,查看“按钮,应用,ContentProvider的,等通用类)的基本包。

然而,一些软件包驻留在自己的图书馆。如果您的应用程序使用这些包有任何的代码,它必须明确要求对他们联系。舱单必须包含单独 \u003cuses-library\u003e 元素,每个命名的图书馆。(库的名称,可以发现在文件包)。

MANIFEST 系统文件

C:\WINDOWS\WinSxS\Manifests\下有许多XML格式的manifest文件,这些是服务端的程序清单。WinSxS是windows XP以上版本提供的非托管并行缓存,里面安装了各种版本的经过强文件名签名的系统库,这些文件正是标注了系统中的强文件名签名,如果与manifest 清单里面所列出的依赖项对上的话,就会被加载。

C:\WINDOWS\WinSxS\Manifests\是一个重要的系统文件夹,不能删除!

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: