AndroidManifest.xml主要包含以下功能:

  1. 说明application的java 数据包,数据包名是application的唯一标识;
  2. 描述application的component;
  3. 说明application的component运行在哪个process下;
  4. 声明application所必须具备的权限,用以访问受保护的部分API,以及与其他application的交互;
  5. 声明application其他的必备权限,用以component之间的交互;
  6. 列举application运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;
  7. 声明application所需要的AndroidAPI的最低版本级别,例如1.0,1.1,1.5等;
  8. 列举application所需要链接的库;

熟悉AndroidManifest.xml文件的结构及元素

  1. 元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出现一次。如果一个元素包含有其他子元素,必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。
  2. 属性:按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素<manifest>的属性,所有其他元素属性的名字都是以android:前缀的;
  3. 定义类名:所有的元素名都对应其在SDK中的类名,如果你自己定义类名,必须包含类的数据包名,如果类与application处于同一数据包中,可以直接简写为“.”;
  4. 多数值项:如果某个元素有超过一个数值,这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中;
  5. 资源项说明:当需要引用某个资源时,其采用如下格式:@[package :]type :name 。 例如 <activity android:icon=”@drawable/icon ” . . . >
  6. 字符串值:类似于其他语言,如果字符中包含有字符“\”,则必须使用转义字符“\\”; 
<?xml version="1.0" encoding="utf-8"?>
<!--
xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android”
package: 标准的应用包名,也是一个应用进程的默认名称
android:versionCode是给设备程序识别版本用的,必须是一个整数值代表apk更新过多少次
android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的
android:installLocation=""表示应用程序安装的位置
auto:自动寻找安装位置,ROM或者SDCard,默认属性
internalOnly: 仅仅只安装在ROM上
preferExternal:直接安装到SDCard
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yxkong.intent"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="auto"
android:sharedUserId=""
>
<!-- 基本配置 -->
<!-- uses-permission
请求你的package正常运作所需赋予的安全许可。一个manifest能包含零个或更多此元素
为了保证Android应用的安全性,应用框架制定了比较严格的权限系统,一个应用必须声明了正确的权限才可以使用相应的功能
-->
<!-- 访问网络相关 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 读取电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 通知相关功能 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!--
声明了安全许可来限制哪些程序能使用你的package中的组件和功能。一个manifest能包含零个或更多此元素
权限声明标签,定义了供给<uses-permission>使用的具体权限,通常情况下我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候你才需要使用<permission>标签。
该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等属性,另外还可以和<permission-group>以及<permission-tree>配合使用来构造更有层次的、更有针对性权限系统。
-->
<permission android:name="aa"></permission>
<permission-tree />
<permission-group android:name="permissionGroup" ></permission-group>
<!--
声明了用来测试此package或其他package指令组件的代码。一个manifest能包含零个或更多此元素
-->
<instrumentation ></instrumentation>
<!--uses-feature
uses-configuration
这两个标签都是用于描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装
<uses-configuration>标签中,
比如有些设备带有D-pad或者Trackball这些特殊硬件,那么android:reqFiveWayNav属性就需要设置为true;
而如果有一些设备带有硬件键盘,android:reqHardKeyboard也需要被设置为true。
另外,如果设备需要支持蓝牙,我们可以使用<uses-feature android:name="android.hardware.bluetooth" />来支持这个功能。
这两个标签主要用于支持一些特殊的设备中的应用
-->
<uses-configuration />
<uses-feature />
<!--
对于一些应用或者游戏来说,只能支持某些屏幕大小的设备或者在某些设备中的效果比较好,我们就会使用<supports-screens>标签来指定支持的屏幕特征。
其中比较重要的属性包括:屏幕自适应属性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持属性,
按屏幕渲染图像属性android:anyDensity以及最小屏幕宽度属性android:requiresSmallestWidthDp等
-->
<supports-screens />
<compatible-screens ></compatible-screens>
<!--
用于指定Android应用中所需要使用的SDK的版本,比如我们的应用必须运行于Android 2.2以上版本的系统SDK之上,那么就需要指定应用支持最小的SDK版本数为8;
当然,每个SDK版本都会有指定的整数值与之对应,比如我们最常用的Android 4.2.x的版本数是17。当然,除了可以指定最低版本之外,<uses-sdk>标签还可以指定最高版本和目标版本
-->
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"
/>
<!--
用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中,其中比较重要的属性有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。
另外,我们需要注意的是Instrumentation对象是在应用程序的组件之前被实例化的,这点在组织测试逻辑的时候需要被考虑到
-->
<instrumentation android:name="aab" android:targetPackage="com.yxkong"></instrumentation>
<!-- 应用配置 -->
<!--application 包含所有与应用有关配置的元素,其属性可以作为子元素的默认属性
android:allowBackup:是否允许备份
android:icon:应用图标
android:label:表示应用的文字说明
android:theme:应用主题
-->
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
>
<!-- Activity配置
Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
常用的属性有:Activity
对应类名android:name,
对应组件显示名称android:label,
对应主题android:theme,
加载模式android:launchMode,
键盘交互模式android:windowSoftInputMode等
-->
<activity
android:name="com.yxkong.intent.MainActivity"
android:label="@string/app_name" >
<!--
用于消息过滤
<intent-filter>用于Intent消息过滤器的声明,我们了解到Intent消息对于Android应用系统来说,是非常重要的“粘合剂”,
<intent-filter>元素可以放在<activity>、<activity-alias>、<service>和<receiver>元素标签中,来区分可用于处理消息的Activity控制器、Service服务和广播接收器Broadcast Receiver。
另外,我们还知道Intent消息还包含有名称、动作、数据、类别等几个重要属性。这点与该标签的写法也有一定的关系,
比如<intent-filter>中必须包含有<action>元素,即用于描述具体消息的名称;
<category>标签则用于表示能处理消息组件的类别,即该Action所符合的类别;
而<data>元素则用于描述消息需要处理的数据格式,我们甚至还可以使用正则表达式来限定数据来源。当然,这些元素和标签的具体用法我们还需要慢慢学习,
-->
<intent-filter>
<!--设置打开app,就启动的activity,一个项目中只能配置一个-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 用于存储预定义数据,和<intent-filter>类似,
<meta-data>也可以放在<activity>、<activity-alias>、<service>和<receiver>这四个元素标签中。
Meta数据一般会以键值对的形式出现,个数没有限制,而这些数据都将被放到一个Bundle对象中,
程序中我们则可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo对象的metaData属性中读取。
-->
<meta-data />
</activity>
<!--
Activity组件别名的声明标签,简单来说就是Activity的快捷方式,属性android:targetActivity表示的就是其相关的Activity名,当然必须是前面已经声明过的Activity。
-->
<activity-alias />
<!-- Service配置
Service服务组件的声明标签,用于定义与描述一个具体的Android服务,
主要属性有:Service服务类名android:name,
服务图标android:icon,
服务描述android:label
服务开关android:enabled等
-->
<service android:name="">
<intent-filter ></intent-filter>
<meta-data />
</service>
<!-- Receiver配置
Boardcast Receiver广播接收器组件的声明标签,用于定义与描述一个具体的Android广播接收器,
其主要属性和<service>标签有些类似:Boardcast Receiver接收器类名android:name,接收器图标android:icon,接收器描述android:label以及接收器开关android:enabled等
-->
<receiver android:name="" ></receiver>
<!-- Provider配置 -->
<provider android:name="" >
<grant-uri-permission />
<meta-data />
</provider>
<!-- 所需类库配置
用于指定Android应用可使用的用户库
通过该标签让ClassLoader加载其类库供Android应用运行时用
-->
<uses-library />
</application>
</manifest>