转载博客:http://blog.csdn.net/shagoo/article/details/7485958#

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。下面是一个标准的AndroidManifest.xml文件样例。

<?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 配置 -->
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity> <activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias> <!-- Service 配置 -->
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service> <!-- Receiver 配置 -->
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver> <!-- Provider 配置 -->
<provider>
<grant-uri-permission />
<meta-data />
</provider> <!-- 所需类库配置 -->
<uses-library /> </application> </manifest>

从以上示例代码中,我们可以看出Android配置文件采用XML作为描述语言,每个XML标签都不同的含义,大部分的配置参数都放在标签的属性中,下面我们便按照以上配置文件样例中的先后顺序来学习Android配置文件中主要元素与标签的用法。
<manifest>

AndroidManifest.xml配置文件的根元素,必须包含一个<application>元素并且指定xlmns:android 和package属性。xlmns:android指定了Android的命名空间,默认情况下是 “http://schemas.android.com/apk/res/android”;而package是标准的应用包名,也是一个应用进程的默 认名称,以本书微博应用实例中的包名为例,即“com.app.demos”就是一个标准的Java应用包名,我们为了避免命名空间的冲突,一般会以应用 的域名来作为包名。当然还有一些其他常用的属性需要注意一下,比如android:versionCode是给设备程序识别版本用的,必须是一个整数值代 表app更新过多少次;而android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样 的。<manifest>标签语法范例如下。

<manifest xmlns:android="http://schemas.android.com/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-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 读取电话状态 -->
    <uses-permission android: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。当然,除了可以指定最低版本之外,<uses-sdk>标签还可以指定最高版本和目标版本,语法范例如下。

<uses-sdk android:minSdkVersion="integer"
    android:targetSdkVersion="integer"
    android:maxSdkVersion="integer" />

<uses-configuration>与<uses-feature>


两个标签都是用于描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。<uses-configuration>标签
中,比如有些设备带有D-pad或者Trackball这些特殊硬件,那么android:reqFiveWayNav属性就需要设置为true;而如果
有一些设备带有硬件键盘,android:reqHardKeyboard也需要被设置为true。另外,如果设备需要支持蓝牙,我们可以使
用<uses-feature android:name="android.hardware.bluetooth"
/>来支持这个功能。这两个标签主要用于支持一些特殊的设备中的应用,两个标签的语法范例分别如下。

<uses-configuration android:reqFiveWayNav=["true" | "false"]
    android:reqHardKeyboard=["true" | "false"]
    android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
    android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
    android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />

<uses-feature android:name="string"
    android:required=["true" | "false"]
    android:glEsVersion="integer" />

<uses-library>


于指定Android应用可使用的用户库,除了系统自带的android.app、android.content、android.view和
android.widget这些默认类库之外,有些应用可能还需要一些其他的Java类库作为支持,这种情况下我们就可以使用<uses-
library>标签让ClassLoader加载其类库供Android应用运行时用。<uses-library>标签的用法很简
单,以下是语法范例。

<uses-library android:name="string"
    android:required=["true" | "false"] />

小贴士:

运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java类加载到JVM里头运行,负责加载Java类的这部分就叫做
ClassLoader。当然,ClassLoader是由多个部分构成的,每个部分都负责相应的加载工作。当运行一个程序的时候,JVM启动,运行
BootstrapClassLoader,该ClassLoader加载java核心API(ExtClassLoader和
AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载
CLASSPATH目录下定义的Class,这就是一个Java程序最基本的加载流程。

<supports-screens>


于一些应用或者游戏来说,只能支持某些屏幕大小的设备或者在某些设备中的效果比较好,我们就会使用<supports-screens>标签
来指定支持的屏幕特征。其中比较重要的属性包括:屏幕自适应属性android:resizeable,小屏
(android:smallScreens)、中屏(android:normalScreens)、大屏
(android:largeScreens)和特大屏(android:xlargeScreens)支持属性,按屏幕渲染图像属性
android:anyDensity以及最小屏幕宽度属性android:requiresSmallestWidthDp
等。<supports-screens>标签的语法范例如下。

<supports-screens android:resizeable=["true"| "false"]
    android:smallScreens=["true" | "false"]
    android:normalScreens=["true" | "false"]
    android:largeScreens=["true" | "false"]
    android:xlargeScreens=["true" | "false"]
    android:anyDensity=["true" | "false"]
    android:requiresSmallestWidthDp="integer"
    android:compatibleWidthLimitDp="integer"
    android:largestWidthLimitDp="integer"/>

<application>


用配置的根元素,位于<manifest>下层,包含所有与应用有关配置的元素,其属性可以作为子元素的默认属性,常用的属性包括:应用名
android:label,应用图标android:icon,应用主题android:theme等。当然,<application>
标签还提供了其他丰富的配置属性,由于篇幅原因就不列举了,大家可以打开Android SDK文档来进一步学习,以下是语法范例。

<application android:allowTaskReparenting=["true" | "false"]
    android:backupAgent="string"
    android:debuggable=["true" | "false"]
    android:description="string resource"
    android:enabled=["true" | "false"]
    android:hasCode=["true" | "false"]
    android:hardwareAccelerated=["true" | "false"]
    android:icon="drawable resource"
    android:killAfterRestore=["true" | "false"]
    android:label="string resource"
    android:logo="drawable resource"
    android:manageSpaceActivity="string"
    android:name="string"
    android:permission="string"
    android:persistent=["true" | "false"]
    android:process="string"
    android:restoreAnyVersion=["true" | "false"]
    android:taskAffinity="string"
    android:theme="resource or theme" >
... ...
</application>

<activity>

Activity
活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声
明,否则系统将不识别也不执行该Activity。<activity>标签中常用的属性有:Activity对应类名
android:name,对应主题android:theme,加载模式android:launchMode(详见2.1.3.4节),键盘交互模式
android:windowSoftInputMode等,其他的属性用法大家可以参考Android
SDK文档学习。另外,<activity>标签还可以包含用于消息过滤的<intent-filter>元素,当然还有可用于
存储预定义数据的<meta-data>元素,以下是<activity>标签的语法范例。

<activity android:allowTaskReparenting=["true" | "false"]
    android:alwaysRetainTaskState=["true" | "false"]
    android:clearTaskOnLaunch=["true" | "false"]
    android:configChanges=["mcc", "mnc", "locale",
        "touchscreen", "keyboard", "keyboardHidden",
        "navigation", "orientation", "screenLayout",
        "fontScale", "uiMode"]
    android:enabled=["true" | "false"]
    android:excludeFromRecents=["true" | "false"]
    android:exported=["true" | "false"]
    android:finishOnTaskLaunch=["true" | "false"]
    android:hardwareAccelerated=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
    android:multiprocess=["true" | "false"]
    android:name="string"
    android:noHistory=["true" | "false"]  
    android:permission="string"
    android:process="string"
    android:screenOrientation=["unspecified" | "user" | "behind" |
        "landscape" | "portrait" |
        "sensor" | "nosensor"]
    android:stateNotNeeded=["true" | "false"]
    android:taskAffinity="string"
    android:theme="resource or theme"
    android:windowSoftInputMode=["stateUnspecified",
        "stateUnchanged", "stateHidden",
        "stateAlwaysHidden", "stateVisible",
        "stateAlwaysVisible", "adjustUnspecified",
        "adjustResize", "adjustPan"] >   
... ...
</activity>

<activity-alias>

Activity
组件别名的声明标签,简单来说就是Activity的快捷方式,属性android:targetActivity表示的就是其相关的Activity
名,当然必须是前面已经声明过的Activity。除此之外,其他比较常见的属性有:Activity别名名称android:name,别名开关
android:enabled,权限控制android:permission等。另外,我们还需要注意的是,Activity别名也是一个独立的
Activity,可以拥有自己的<intent-filter>和<meta-data>元素,其语法范例如下。

<activity-alias android:enabled=["true" | "false"]
    android:exported=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:permission="string"
    android:targetActivity="string" >
... ...
</activity-alias>

<intent-filter>与<action>、<category>、<data>

<intent-
filter>用于Intent消息过滤器的声明,在前面的2.1.3.2节中我们已经对Android应用框架中的Intent消息作过比较详细
的介绍,我们了解到Intent消息对于Android应用系统来说,是非常重要的“粘合剂”,<intent-filter>元素可以放
在<activity>、<activity-alias>、<service>
和<receiver>元素标签中,来区分可用于处理消息的Activity控制器、Service服务和广播接收器Broadcast
Receiver。另外,我们还知道Intent消息还包含有名称、动作、数据、类别等几个重要属性。这点与该标签的写法也有一定的关系,比
如<intent-filter>中必须包含有<action>元素,即用于描述具体消息的名
称;<category>标签则用于表示能处理消息组件的类别,即该Action所符合的类别;而<data>元素则用于描述消
息需要处理的数据格式,我们甚至还可以使用正则表达式来限定数据来源。当然,这些元素和标签的具体用法我们还需要慢慢学习,下面是标
准<intent-filter>元素标签的语法范例。

<intent-filter android:icon="drawable resource"
    android:label="string resource"
    android:priority="integer" >
    <action android:name="string" />
    <category android:name="string" />
    <data android:host="string"
        android:mimeType="string"
        android:path="string"
        android:pathPattern="string"
        android:pathPrefix="string"
        android:port="string"
        android:scheme="string" />
</intent-filter>

<meta-data>


于存储预定义数据,和<intent-filter>类似,<meta-data>也可以放
在<activity>、<activity-alias>、<service>
和<receiver>这四个元素标签中。Meta数据一般会以键值对的形式出现,个数没有限制,而这些数据都将被放到一个Bundle对象
中,程序中我们则可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo对象的metaData属性中读取。假设
我们在一个Activity中定义了一个<meta-data>元素,相关示例用法如下。

<activity...>
    <meta-data android:name="testData" android:value="Test Meta Data"></meta-data>
</activity>

ActivityInfo info = this.getPackageManager()
    .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
String testData = info.metaData.getString("testData");
System.out.println("testData:" + testData);

<service>

Service
服务组件的声明标签,用于定义与描述一个具体的Android服务,主要属性有:Service服务类名android:name,服务图标
android:icon,服务描述android:label以及服务开关android:enabled等。关于Service服务组件的概念和用法
请参考2.1.4.2节的内容,以下是<service>标签的语法范例。

<service android:enabled=["true" | "false"]
    android:exported=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:permission="string"
    android:process="string" >
... ...
</service>

<receiver>

Boardcast

Receiver广播接收器组件的声明标签,用于定义与描述一个具体的Android广播接收器,其主要属性和<service>标签有些类
似:Boardcast
Receiver接收器类名android:name,接收器图标android:icon,接收器描述android:label以及接收器开关
android:enabled等。关于Boardcast
Receiver广播接收器组件的概念和用法请参考2.1.4.3节的内容,以下是<receiver>标签的语法范例。

<receiver android:enabled=["true" | "false"]
    android:exported=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:permission="string"
    android:process="string" >
... ...
</receiver>

<provider>与<grant-uri-permission>


Activity、Service和Boardcast Receiver之外的另一个“四大组件”,也就是Content
Provider内容提供者的声明标签。关于内容提供者组件的概念和用法请参考2.1.4.4节的内容,不再赘述。<provider>标签
除了和其他组件相同的android:name、android:icon和android:label等基础属性之外,还提供了用于支持其功能的特殊属
性,如:内容提供者标识名称android:authorities,对指定URI授予权限标识android:grantUriPermission以
及具体的读、写权限,即android:readPermission和android:writePermission等。当然,这些属性的具体用法我
们还需要慢慢学习,以下是<provider>标签的语法范例。

<provider android:authorities="list"
    android:enabled=["true" | "false"]
    android:exported=["true" | "false"]
    android:grantUriPermissions=["true" | "false"]
    android:icon="drawable resource"
    android:initOrder="integer"
    android:label="string resource"
    android:multiprocess=["true" | "false"]
    android:name="string"
    android:permission="string"
    android:process="string"
    android:readPermission="string"
    android:syncable=["true" | "false"]
    android:writePermission="string" >
... ...
</provider>

AndroidManifest.xml配置文件详解(转)的更多相关文章

  1. AndroidManifest.xml配置文件详解(转载)

     AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是 ...

  2. AndroidManifest.xml配置文件详解

    AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xm ...

  3. AndroidManifest.xml配置文件详解 (转)

    原文:http://blog.csdn.net/shagoo/article/details/7485958# AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的 ...

  4. [转]AndroidManifest.xml文件详解

    转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...

  5. AndroidManifest.xml文件详解

    本文为安全专家李洋的最新一篇专栏文章<AndroidManifest.xml文件详解>.AndroidManifest.xml是一个跟安全相关的配置文件,该配置文件是Android安全保障 ...

  6. sqlMapConfig.xml配置文件详解

    sqlMapConfig.xml配置文件详解: Xml代码 Xml代码  <? xml version="1.0" encoding="UTF-8" ?& ...

  7. AndroidManifest.xml文件详解(uses-permission)

    语法(SYNTAX): <uses-permissionandroid:name="string"/> 被包含于(CONTAINED IN): <manifest ...

  8. Android之androidmainfest.xml配置文件详解

    写配置文件的时候我们会不知道把那些配置项放在哪里,请看: 配置文件样例: <?xml version="1.0" encoding="utf-8"?> ...

  9. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

随机推荐

  1. Qt/Qte/Qtopia三者的区别

    Qt泛指 Qt software的所有版本的图像界面库,包括 Qt/X11(Unix/Linux),Qt Windows, Qt Mac 等,但这只是相对于二进制来说的.Qt作为一个跨平台的GUI 框 ...

  2. SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理

    20 个有用的 SVG 工具,提供更好的图像处理 SVG 现正在 Web 设计领域变得越发流行, 你可以使用 Illustrator 或者 Inkscape 来创建 SVG 图像. 但当进行 Web ...

  3. python slot

    每个实例包含一个字典,slot 让实例变成tup 或list,减少内存,但不能再增加属性 For classes that primarily serve as simple data structu ...

  4. HDU 5183 Negative and Positive (NP) (手写哈希)

    题目链接:HDU 5183 Problem Description When given an array \((a_0,a_1,a_2,⋯a_{n−1})\) and an integer \(K\ ...

  5. MybatisPlus自动填充公共字段的策略

    背景:数据库中多个表有时间字段,并且字段名一致 需求:该时间字段由MybatisPlus自动插入和更新,业务代码无需处理 方法: 一.创建基础实体[BaseEntity],定义需要处理的公共字段(创建 ...

  6. rafy使用笔记

    1.rafy里实体字段string类型映射成数据库varchar(2000). 解决:“DomainApp“下“OnRuntimeStarting“方法里添加“DbMigrationSettings. ...

  7. HDU 1029Ignatius and the Princess IV

    Ignatius and the Princess IV Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32767 K ( ...

  8. HBase学习记录

    HBase 使用docker搭建参考https://blog.csdn.net/baifanwudi/article/details/78498325 搭建好以后,网页端可以看到: terminal ...

  9. 致命错误: Call to undefined function %y-%M-%d()

    在TP5.0中套模板时出现的问题: 原有html模板代码: <input type="text" onfocus="WdatePicker({ maxDate:'# ...

  10. C# 下载模板

    /// <summary> /// 模板下载 /// </summary> /// <returns></returns> public ActionR ...