深入AndroidManifest.xml文件详解
关于AndroidManifestxml:
在根目录中的每个应用程序都有一个功能清单文件 AndroidManifest.xml (一定是这个名字).这个功能清单文件为 Android 系统提供了关于这个应用程序的基本信息,系统在运行任何程序代码之前必须知道这些信息.
AndroidManifest.xml 文件主要包括一下功能:
1) 命名应用程序的Java应用包,这个包名用来唯一标识应用程序.
2)描述应用程序的组件---活动,服务,广播接收者,内容提供者.对实现每个组件和公布其功能(比如能处理哪些意图信息)的类进行命名.这些声明使得 Android 系统了解这些组件以及它们在什么条件下可以被启动.
3)决定应用程序组件运行在哪些进程里.
4)声明应用程序所必须具备的权限,用以访问受保护的部分API,以及和其他引用程序交互.
5)声明引用程序其他的必备权限,用以组件之间的交互.
6)列举测试设备 Instrumentation 类,用来提供应用程序运行时所需的环境配置以及其它信息,这些声明只在程序开发和测试阶段存在,发布前将被删除
7)声明应用程序所要求的 Android API 的最低版本级别.
8)列举 application 所需要链接的库.
程序中使用的所有组件都会在功能清单文件中列举出来,所以程序员必须对此文件非常了解,并能够对其进行准确的修改.
以下是 AndroidManifest.xml 文件中的代码.
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" //第一层次 3 package="com.example.helloworld" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk //第二层次,描述 Android SDK 的版本信息 8 android:minSdkVersion="8" 9 android:targetSdkVersion="21" /> 10 11 <application //第二层次,声明描述应用程序的相关特性 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity //第三层次,声明应用程序中的组件,如 Activity 17 android:name=".MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> //第四层次,声明此 Activity 的filter 特性 20 <action android:name="android.intent.action.MAIN" /> 21 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> //第四层次的声明结束 24 </activity> //第三层次 Activity 的声明结束 25 </application> //第二层次 Application 的声明结束 26 27 </manifest> //第一层次的声明结束 28
第1行代码会告诉解析器,这个文件是按照1.0版本的 XML 规则进行解析的,并此 XML 文件编码格式为 utf-8的编码格式.
第2行代码中 xmlns:android 定义了Android 的命名空间,一般为 http://schemas.android.com/apk/res/android,这使得 Android 中的各个标准属性都能在文件中被使用,为大部分元素提供了数据.
第3行代码 package="com.example.helloworld" 指定了本应用程序中 Java 主程序包的包名,它也是一个应用进程的默认名称.
第4行代码 android:versionCode="1" 是给设备程序标识版本(升级)用的,它必须是一个 interger 值,代表 APP 更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3 等.
第5行是给用户看的,用户可以将自己的 APP 版本号设置为1.1版,后续更新版本上设置为1.2,2.0版本等.
第7~9行代码的功能是描述应用所需的api 版本信息,在此属性中可以指定支持的最小版本,目标版本以及最大版本.
第11~25行声明应用程序的相关信息,一个 AndroidManifest.xml 必须包含一个 application 标签,这个标签声明了每一个应用程序的组件以及属性(如 icon,label,permission 等).这也是最重要的声明部分.
第12行 android:allowBackup="true" 表示允许应用程序备份和恢复
第13行表用来声明整个 APP 的图标,图片一般都放在 drawable 文件中,使用资源引用的方式.
第14行用来声明整个 APP 的应用程序名称,字符串一般都放在 strings 文件中,使用资源引用的方式.
第15行定义资源的风格,它定义了一个默认的主题风格给所有 Activity,当然也可以在自己的 theme 里设置它,有点类似于 style.
第16~24行是对这个应用程序中的一个 Activity 的声明,如果有多个 Activity 或 Serice 等程序员自己开发的组件,则必须在这里添加声明.
第17行代码为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。
若该类(比方MainActivity类)是在声明的package下,则可以直接声明android:name=".MainActivity",但此类是在
package下面的子包的话,就必须声明为全路径或android:name="package名称.子包名称.MainActivity"
第18行代码为单个活动页面的名称,字符串一般都放在 strings 文件中,使用资源引用的方式.
第19~22行为这个 Activity 的过滤器 Filter 的声明,Intent-filter 内设定的资料包括 action,data与 category 3种,也就是说 Filter 只会与 Intent 里的3中资料做对比动作.
action属性:action很简单,它只有android:name 这个属性,常见的android:name值为 android.intent.action.MAIN,表明此Action 是作为应用程序的入口.该属性起到的功能和C语言程序中的main()函数相同,所以 action.MAIN 的属性只能赋给一个 Activity.
category属性:category 也只有 android:name属性.常见的android:name 值为android:.intent.category.LAUNCHER,它用来决定应用程序是否显示在程序列表里.
data属性:每个 data 元素指定一个 URI 和数据类型(MIME类型).它有4个属性 scheme,host,port和path,他们分别对应URI(scheme://host:port/path)的每个部分.
Android 的 manifest 文件中有4个标签与 Permission 有关,它们分别是<permission>,<permission-group>,<permission-tree>和<uses-permission>.
最常用的是<uses-permission>,如果需要获取某个权限时,就必须在 manifest 文件中声明<uses-permission>,<uses-permission>与<application>同层次,一般插入application标签后面,例如:
1 <uses-permission android:name="android.permission.READ_CONTACTS"/>
这句代码表示当前的应用程序具有从内部的通讯录联系人中读出名字和号码的权限.