AndroidManifest.xml文件详解1

2014/05/20 1474点热度 1人点赞 0条评论

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>

yxkong

这个人很懒,什么都没留下

文章评论