AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。
下面是一个标准的AndroidManifest.xml文件样例。
1.<?xml version="1.0"encoding="utf-8"?>2.3.<manifest>4.5.<!-- 基本配置 -->6.<uses-permission/>7.<permission/>8.<permission-tree/>9.<permission-group/>10.<instrumentation/>11.<uses-sdk/>12.<uses-configuration/>13.<uses-feature/>14.<supports-screens/>15.<compatible-screens/>16.<supports-gl-texture/>17.18.<!-- 应用配置 -->19.<application>20.21.<!-- Activity 配置 -->22.<activity>23.<intent-filter>24.<action/>25.<category/>26.<data/>27.</intent-filter>28.<meta-data/>29.</activity>30.31.<activity-alias>32.<intent-filter> . . . </intent-filter>33.<meta-data/>34.</activity-alias>35.36.<!-- Service 配置 -->37.<service>38.<intent-filter> . . . </intent-filter>39.<meta-data/>40.</service>41.42.<!-- Receiver 配置 -->43.<receiver>44.<intent-filter> . . . </intent-filter>45.<meta-data/>46.</receiver>47.48.<!-- Provider 配置 -->49.<provider>50.<grant-uri-permission/>51.<meta-data/>52.</provider>53.54.<!-- 所需类库配置 -->55.<uses-library/>56.57.</application>58.59.</manifest>从以上示例代码中,我们可以看出Android配置文件采用XML作为描述语言,每个XML标签都不同的含义,大部分的配置参数都放在标签的属性中,下面我们便按照以上配置文件样例中的先后顺序来学习Android配置文件中主要元素与标签的用法。
<manifest>AndroidManifest.xml配置文件的根元素,必须包含一个<application>元素并且指定xlmns:android和package属性。
xlmns:android指定了Android的命名空间,默认情况下是“/apk/res/android”;而package 是标准的应用包名,也是一个应用进程的默认名称,以本书微博应用实例中的包名为例,即“com.app.demos”就是一个标准的Java应用包名,我们为了避免命名空间的冲突,一般会以应用的域名来作为包名。
当然还有一些其他常用的属性需要注意一下,比如android:versionCode是给设备程序识别版本用的,必须是一个整数值代表app更新过多少次;而android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的。
<manifest>标签语法范例如下。
<manifest xmlns:android="/apk/res/android"package="string"android:sharedUserId="string"android:sharedUserLabel="string resource"android:versionCode="integer"android:versionName="string"android:installLocation=["auto" | "internalOnly" | "preferExternal"] >... ...</manifest><uses-permission>为了保证Android应用的安全性,应用框架制定了比较严格的权限系统,一个应用必须声明了正确的权限才可以使用相应的功能,例如我们需要让应用能够访问网络就需要配置“android.permission.INTERNET”,而如果要使用设备的相机功能,则需要设置“android.permission.CAMERA”等。
<uses-permission>就是我们最经常使用的权限设定标签,我们通过设定android:name属性来声明相应的权限名,比如在微博应用实例中,我们就是根据应用的所需功能声明了对应的权限,相关代码如下。
<manifest ...>... ...<!-- 网络相关功能--><uses-permission android:name="android.permission.INTERNET" /><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 读取电话状态--><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/> <!-- 通知相关功能--><uses-permission android:name="android.permission.VIBRATE" /> ... ...</manifest><permission>权限声明标签,定义了供给<uses-permission>使用的具体权限,通常情况下我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候你才需要使用<permission>标签。
该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等属性,另外还可以和<permission-group>以及<permission-tree>配合使用来构造更有层次的、更有针对性权限系统。
<permission>标签语法范例如下。
<permission android:description="string resource"android:icon="drawable resource"android:label="string resource"android:name="string"android:permissionGroup="string"android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] /><instrumentation>用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中,其中比较重要的属性有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。
另外,我们需要注意的是Instrumentation对象是在应用程序的组件之前被实例化的,这点在组织测试逻辑的时候需要被考虑到。
<instrumentation>标签语法范例如下。
<instrumentation android:functionalTest=["true" | "false"]android:handleProfiling=["true" | "false"]android:icon="drawable resource"android:label="string resource"android:name="string"android:targetPackage="string" /><uses-sdk>用于指定Android应用中所需要使用的SDK的版本,比如我们的应用必须运行于Android 2.0以上版本的系统SDK之上,那么就需要指定应用支持最小的SDK 版本数为5;当然,每个SDK版本都会有指定的整数值与之对应,比如我们最常用的Android 2.2.x的版本数是8。