清单文件简介.mp4
本章视频四: 主要介绍清单文件AndroidManifest.xml的功能、框架结构等,较详细地介绍了9个常用标签的功能和配置范例。视频内容涵盖了本章3.3节。
在Android应用程序中,包含一个清单文件AndroidManifest.xml,它是XML格式的Android程序声明文件。该文件中描述了应用程序运行前必需的配置信息,包括程序名称、图标、包名称、程序组件、权限申请、SDK版本等信息。该文件存放在Android项目根目录下,位置和文件名固定。清单文件的代码框架如下:
从代码框架可以看出,每个XML标签(也称标记)都有不同的含义,大部分的配置参数都放在标签的属性中。下面我们按照以上配置文件框架中的先后顺序来介绍Android配置文件中主要元素与标签的用法。
配置文件的根元素,必须包含一个<application>元素并且指定xlmns:android和package属性。xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android”;而package是标准的应用包名,也是一个应用进程的默认名称,如“com.example.activitydemo”。为了避免冲突,一般应用包名都很长。<manifest>标签的范例如下:
为了保证Android应用的安全性,应用框架制定了比较严格的权限系统。一个应用必须声明了正确的权限才可以使用相应的功能,例如某一应用程序需要访问网络,就要配置“android.permission.INTERNET”权限,而要使用设备的相机功能,则需要配置“android.permission.CAMERA”权限。<uses-permission>就是权限设定标签,通过设定android:name属性来声明相应的权限名,参考代码如下:
随着Android版本的提高,Google公司逐渐改进了用户权限的管理方式。Android 6.0及以后版本对一些权限需要动态申请,而不是在清单文件中配置,比如外存SD卡的读写权限。
通常情况下,我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候才需要使用<permission>标签。该标签中提供了权限名标签(android:name)、权限图标(android:icon)以及权限描述(android:description)等属性,还可以和<permission-group>以及<permission-tree>配合使用来构造更有层次、更有针对性的权限系统。<permission>标签的语法范例如下:
该标签用于指定Android应用必需的SDK版本,比如我们的应用必须运行于Android 4.4及以上版本,那么就需要指定应用支持最小的SDK版本数为19。除了指定最低版本之外,<uses-sdk>标签还可以指定最高版本和目标版本。参考代码如下:
Application是应用程序配置的根元素,位于<manifest>下层,包含所有与应用相关配置的元素,其属性可以作为子元素的默认属性,常用的属性包括android:label(名称)、android:icon(图标)、android:theme(主题)等。当然,<application>标签还提供了其他丰富的配置属性,以下语法范例中列出了一些。
Activity活动组件(即用户UI)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。<activity>标签中常用的属性有Activity对应类名属性android:name、对应主题属性android:theme、加载模式属性android:launchMode等。另外,<activity>标签还可以包含用于消息过滤的<intent-filter>元素,以下是<activity>标签的语法范例。
<service>是Service(服务)组件的声明标签,用于定义与描述一个具体的Android服务,主要属性有服务类名属性android:name、服务描述属性android:label以及服务开关属性android:enabled等。关于Service(服务)组件的概念和用法请参考第6章内容,以下是该标签的语法范例。
<receiver>是BroadcastReceiver广播接收器组件的声明标签,用于定义与描述一个具体的Android广播接收器,其主要属性类似于<service>标签。另外,可以使用<intent-filter>标签设置广播识别码。关于BroadcastReceiver广播接收器组件的概念和用法请参考第7章内容,以下是<receiver>标签的语法范例。
<provider>是ContentProvider内容提供者的声明标签。关于内容提供者组件的概念和用法请参考第8章内容。<provider>标签除了和其他组件相同的android:name、android:icon和android:label等基础属性之外,还提供了用于支持其功能的特殊属性,如:内容提供者标识名android:authorities、对指定URI授予权限标识android:grantUriPermission、具体的读写权限android:readPermission和android:writePermission等。以下是<provider>标签的语法范例。