AndroidManifest.xml文件解释

上一篇 / 下一篇  2013-08-02 14:06:49 / 个人分类:android

 每一个android的项目都包含一个主配置文件AndroidMainfest.xml,保存在项目的根目录下面。这个配置文件可以让你定义项目的结构和元数据,包括它的组件和运行时的一些必需的信息。
   它的节点信息包括每一个组成你的整个应用程序的组件(Activities,Services,Content Providers,和Broadcast Receivers),还包括Intent Filters , 权限Permissions,以及组件之间包括与其他应用程序之间的互动。
    配置文件的一些节点的属性还可以定义这个应用程序一些特点的特性,比如定义启动图片(Icon)和主题风格(theme),在顶级节点中还可以定义系统安全的设置,单元测试,和定义硬件配置和所需要的支持包等等都可以在下面的节点中定义。
    AndroidMainfest.xml文件的根元素<manifest>标记,其中有一个package属性是定义项目包结构的。根元素通常包含一个xmlns:android的属性,在这个命名空间里包含了这个主配置文件的所有的节点和属性的定义。
    使用versionCode属性定义当前应用程序的版本,该属性值是一个整型,这个值是应用程序内部版本的比较的。使用versionName属性是定义一个公共的版本号给用户的。
   下面是manifest节点的一个实例:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hello"
    android:versionCode="1"
    android:versionName="1.0 Beta"
    [... 其他的一些属性...]

    这个manifest标记包含了一下的一些子节点:应用程序组件,安全配置,测试类,和其他的一些组成应用程序的必须的内容。下面就展示一部分该节点标签包含的一些子节点的xml的实例。
    1、uses-sdk 这个节点是可以让你定义你的应用程序需要运行的目标设配的最低,最高和目标SDK的版本,使用android:minSdkVersion,android:maxSdkVersion,android:targetSdkVersion这三个属性组合定义,你可以严格定义你的开发的应用程序可以再那些设配上面运行,需要那个版本的SDK支持才能安装你的应用程序。
    android:minSdkVersion 是定义你开发的应用程序所用到的最低版本的SDK所包含的API,如果你错误定义了最低版本号,而你开发应用程序又访问了你的硬件设配版本没有提供的API,那么你的应用程序将会崩溃。
    android:maxSdkVersion 定义了你的应用程序支持的最高版本的限制。你应用程序将不会出现在android市场上面一些高版本的应用上面。当然最好的方式是不要定义这个属性,除非你明确的知道你的应用程序不能运行在高版本的SDK下。
    android:targetSdkVersion这个属性是定义你在开发和测试你的应用程序时所依赖的SDK包环境。定义这个SDK版本号就是告诉系统应用程序支持这个版本,不需要申请任何向前或者向后兼容。
    2、uses-configuration 使用这个节点是定义你的应用程序需要的每一个输入方式的支持,你可以定义的输入设配的支持组合包括:
    android:reqFiveWayNav 如果这个属性定义为true,那么你的输入设备需要能够响应当前的选择,以响应上下左右等方向的命令,这包括使用滚动球和D-pads。
   android:reqHardKeyboard 如果你的应用程序需要硬件键盘的支持,那么你可以设置为true。
   android:reqKeyboardType 你可以设置你的键盘类型为以下的其中一种类型(包括 nokeys(没有) ,qwerty(标准传统),twelvekey(12键),或者undefined(没定义))
    android:reqNavigation 通过这个属性你可以设置你必须的方向设配是下面的其中一种类型(nonav,dpad,trackball,wheel 或者undefined)。
   android:reqTouchScreen  可以使用 notouch(没有触屏效果) stylus(尖笔),finger(手指) 或者 undefined来定义这个属性。
   当然你可以组合使用这些属性,如下面这个例子
<uses-configuration
        android:reqHardKeyboard="true"
        android:reqTouchScreen="finger"
        android:reqKeyboardType="qwerty"
        android:reqNavigation="trackball"
        />
 
 
提示:这些属性都可以定义你应用程序可以在特定的硬件环境中使用, 建议开发的应用程序时可以运行在不同的设配中,那么uses-configuration这个标签根据就不需要定义了,而起大部分情况下,这个标签都是不需要定义的。
 
  3、 uses-feature android 的优点之一是很大量的硬件包支持在运行,使用uses-feature可以定义你开发的应用程序中所必须用到的一些硬件功能组件,使用这个标签的作用是防止你的应用程序需要一些特定的硬件支持,但是目标设配有没有此功能,而导致你的程序安装成功却不能运行。比如你的应用程序必须要用到找些功能,那么就必须用到下面两个属性之一
android.hardware.camera    摄像头功能
android.hardware.camera.autofocus  自动聚焦的摄像头功能
那么你可以使用uses-feature定义它
 <uses-feature android:name="android.hardware.camera "/>
 
uses-feature更多的硬件支持的属性值列表在android的开发者的官网上面有
http://developer.android.com/guide/topics/manifest/uses-feature-element.html.
  
   4、 supports-screens 定义你的应用程序支持的屏幕大小,它所包含的支持的屏幕大小的属性如下:
  android:smallScreens  支持比传统的HVGA 还小的屏幕的方法,QVGA屏幕
  android:normalScreens 支持所有正规的屏幕大小,包括HVGA  , WVGA 和 WQVGA。
  android:largeScreens 对超大屏幕的支持,也就是比正规的屏幕大小要大的屏幕。
  android:anyDensity 可以自动适应不同的屏幕的大小。
  android:resizeable 可以自动的改变大小设置屏幕。
 
   默认这里的所有的属性值都是true的,我们在以后会学习如何让我们的应用程序适应不同的设配,不同的屏幕规格,如果你在这里设置了一些限制,那么你的应用程序将有可能不能在一些设配上面安装。所以除了对一些特别的应用之外,这个节点也是不需要设定的。
 
 
  5、 application 一个配置文件里面只能有一个application节点,这个节点的一些属性可以让你定义你的项目的一些元数据(包括项目的标题,启动图标(icon),主题等等),在开发工程中你可以包含一个debuggable属性,并且设置为true,这样项目是可以调试,当然当你要打包发布项目的时候要设置为false。
  application节点还包含了Activity,Service,Content Provider 和Broadcast receiver 标签来定义整个应用程序的组件,你可以定义你自己的application 类,以后我们会学习如何定义自己的application类和扩充和管理应用程序的状态。
  5.1 Activity 在应用程序里的每一个Activity 类都需要在配置文件里使用<Activity>标签来定义,使用android :name 属性定义Activity的类名称。你必须包含一个主启动Activity,如果你要启动一个Activity,而这个Activity没有在配置文件中定义,那么系统会抛出异常,每一个Activity都可以包含子标签<intent-filter>,你可以使用这个子标签定义那一个Activity是主启动。
如下:
<activity
            android:name="com.example.hello.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>
5.2、service 和Activity一样,应用程序里的每一个service都需要在配置文件的使用<service>标签定义,同样该标签也包含子标签<intent-filter>
        <service android:name=".MyService"></service>
 
5.3、provider 定义应用程序里的Content Providers, Content Providers主要用于管理数据库访问、内容共享和不同应用程序直接的数据共享。
      <provider android:permission="com.example.My_permission"
            android:name=".MyProvider"
            android:enabled="true"
            android:authorities="com.example.hello.MyProvider"
            ></provider>
 
5.4、receiver
   添加一个reseiver标签,你就可以注册一个Broadcast Receiver广播接收器,你不需要启动你的应用程序,广播接收器就像是一个全局的事件监听器,只要你注册了,不论什么时候,只要系统或者某个应用程序广播了一个匹配的Intent(意图),那么注册了这个广播接收器的接收器将会自动的启动。
 
        <receiver android:name=".Myreceiver"></receiver>
       
 
6、uses-permission
   这是安全模块的一部分,这个标签表明了你的应用程序需要操作的一些权限属性,在用户安装你开发的应用程序之前,系统所用到的权限会展示给用户,许多android的原生服务,特别是一些需要到支付或者安全方面的实现(比如通话,收发短信,或者使用一些本地基础服务等等)。
   
    <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" />
  
7、permission
   你要给第三方应用程序提供访问共享应用程序组件时,也可以定义权限限制。当你定义需要严格访问应用程序组件时,你需要在主配置文件中定义这个权限,当你在你的应用程序中定义了一个权限,那么第三方应用程序需要用到你的组件时就必须需要使用<uses-permission>才能使用这些受到保护的组件。你可以使用android:protectionLevel定义你的权限等级
    <permission
        android:name="com.MyPermission"
        android:protectionLevel="normal"
        >
    </permission>
 
8、instrumentation  instrumentation 类为你的应用程序在运行时提供了一个测试框架,在你的应用程序访问系统资源的时候,你可以暂时挂住你的应用程序,为你的所有的测试类,主配置文件中通过 < instrumentation  > 标签定义
 
有关主配置文件的更多的描述你可以参考
http://developer.android.com/guide/topics/manifest/manifest-intro.html
 
    当你建立一个应用程序时,ADT会帮你自动的建立这个配置文件你可以测试建立以上介绍的所有的节点。ADT为你提供了一个可视化的环境一编辑主配置文件这样你就可以不需要直接编辑xml的源文件了。

转载自:http://soft.oneedu.cn/bbs/2012/1222/1205.html


TAG:

 

评分:0

我来说两句

Open Toolbar