Android 技术重温系列 (8)- AndroidManifest.xml

来源:互联网 发布:淘宝上买药可靠吗 编辑:程序博客网 时间:2024/06/07 14:46

本章内容讲的 Android 程序中最最要的一个文件 AndroidManifest.xml,俗称清单文件。清单文件所包含的内容还是需要了解一下的,所以大家还是可以花点时间来看接下来的内容。

在 AS 环境下,清单文件通常包含如下信息:
- 应用程序的包名,该包名将会作为唯一标示
- 应用程序所包含的组件,如 Activity、Serviec、BroadcastReceiver 和 ContentProvider 等。
- 应用程序使用系统所需权限声明
- 其他程序访问该程序所需的权限声明

那么我们下一步在深入的了解一下清单文件的内容吧

文件结构

下面代码显示了清单文件的通用结构及其可包含的每个元素。每个元素及其所有属性全部记录在一个单独的文件

<?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>

文件约定

元素

只有 和 元素是必须的,它们都必须存在并且只能出现一次。其他大部分元素可以出现多次或者根本不出现,但清单文件中必须至少存在某些元素才有用

如果一个元素包含某些内容,也就包含其他元素。所有值均通过属性进行设置,而不是通过元素内的字符数据设置
同一级别的元素部分先后顺序。例如,、 和 元素可以按任何顺序混合在一起。这条规则有两个主要例外:

  • 元素必须跟在别名所指的 之后
  • 元素必须是 元素内的最后一个元素
属性

在某种意义上说,所有属性都是可选的。但是,必须指定某些属性,元素才可实现其目的。

除了 元素的一些属性外,所有属性名称均以 android: 前缀为开头。

声明类名

许多元素对应于 Java 对象,包括应用本身的元素( 元素)及其主要组件:Activity()、服务()、广播接收器()和内容提供程序()
所以声明子类需要通过 name 属性来声明。该名称必须包含完成的软件包名称。例如,Service 子类可能会声明如下:

<manifest><application><service android:name="com.example.project.SecretService">...</service>... </applicaiton></manifest>

但是,如果字符串的第一个字符是句点,则应用的软件包名称将附加到该字符串上,以下赋值与上述方法相同:

<manifest><application><service android:name=".SecretService">...</service>... </applicaiton></manifest>
多个值

如果可以指定多个值,则几乎总是在重复此元素,而不是列出单个元素内的多个值。例如,Intent 过滤器可以列出多个操作:

<intent-filter><action android:name="android.intent.action.EDIT"/><action android:name="android.intent.action.INTER"/><action android:name="android.intent.action.DELETE"/></intent-filter>
资源值

某些属性的值可以显示给用户,例如,Activity 的标签和图标。这些属性的值应该本地化,并通过资源或主题进行设置

如果资源与应用在同一个软件包中,可以省略软件包名称。类型是资源类型。例如字符串或 Drawable 。

字符串

如果属性值为字符串,则必须用双反斜杠(\)进行转义

文件功能

Intent 过滤器

应用的核心组件由 intent 激活。Inetent 是一系列用于描述所需操作的信息,其中包含执行操作的数据、应执行操作的组件以及其他相关说明。Android 系统会查找合适的组件来响应 intent,根据需要启动组件的实例,并将其传递到 Intent 对象

组件通过 intent 过滤器公布他们呢可响应的 intent 类型。由于 Android 系统在启动某组件之前必须了解该组件可以处理的intent,因此 intent 过滤器在清单中被指定为 元素。一个组件可有任意数量的过滤器,其中每个过滤器描述一种不同的功能。

图标和标签

对于可以显示给用户的小图标和文本标签,大量元素具有 icon 和 label 属性。此外,对于同样可以显示在屏幕上的较长说明文本,某些元素还具有 description 属性。例如, 元素具有所有三个属性
。因此,当系统询问用户是否授权给请求获得权限的应用时,权限图标。权限名称以及所需信息的说明均会呈现给用户。

无论何种情况下,在包含元素中设置的图标和标签都将成为所有容器子元素的默认 icon 和 label 设置。因此,在 元素中设置的图标和标签是每个应用组件的默认图标和标签。同样,为组件(例如 元素)设置的图标和标签是组件每个 元素的默认设置

在实现过滤器公布的功能时,只要想用户呈现组件,系统便会使用为 intent 过滤器设置的图标和标签标示该组件。

权限

权限是一种限制,用于限制部分代码或设备上数据的访问。施加限制是为了保护可能被误用以致破坏或损害用户体验的关键数据和代码

如果应用需要访问收权限保护的功能,则必须在清单中使用 元素声明应用需要改权限

应用也可以使用权限保护自己的组件,它可以采用由 Android 定义或由其他应用声明的任何权限。也可以自定义自己的权限

总结

清单文件中权限一块需要注意的是 6.0版本之后的权限校验变为动态权限校验,意思是在清单文件中声明的权限无效,需要当 APP 涉及到相关权限时动态赋值,而且和之前的 Android 系统常用权限分类也有点区别,这里大家需要注意一下

0 0
原创粉丝点击