小艾笔记——AndroidManifest.xml分析

来源:互联网 发布:淘宝杜蕾斯授权店 编辑:程序博客网 时间:2024/05/24 00:49

Android—— AndroidManifest.xml简单分析

AndroidManifest.xml 是每个android程序中必须的文件。我们称之为清单文件,它位于整个项目的根目录,随着项目建立的时候自动生成。标准的.xml文件,内容有着严格的层次结构,又开始标签就必须存在结束标签,这里不做解释。由于分析项目的时候遇到了清单文件的相应节点不熟悉,就再此给自己的做一下总结。

AndroidManifest.xml的总体结构

<?xmlversion="1.0"encoding="utf-8"?><manifest>  <application>    <activity>      <intent-filter>        <action/>        <category/>      </intent-filter>    </activity>    <activity-alias>      <intent-filter></intent-filter>      <meta-data/>    </activity-alias>    <service>      <intent-filter></intent-filter>      <meta-data/>    </service>    <receiver>      <intent-filter></intent-filter>      <meta-data/>    </receiver>    <provider>      <grant-uri-permission/>      <meta-data/>    </provider>    <uses-library/>  </application>  <uses-permission/>  <permission/>  <permission-tree/>  <permission-group/>  <instrumentation/>  <uses-sdk/>  <uses-configuration/>   <uses-feature/>   <supports-screens/></manifest>

各节点的简介

我这里介绍的每个节点的属性并不完整,仅仅是我当前项目有的一些和我自己补充的一些。主要介绍常用的,不常用的遇到的话可自行百度。

第一层:(manifest)

起始的是xml文件自动生成的头文件。manifest的主要属性有

  1. xmlns:android = “xmlns:android=”http://schemas.android.com/apk/res/android”” 一般都是这样定义的,定义了Android的命名空间,这样使得Android中各种标准属性能在文件中使用
  2. package=”” 项目的包名
  3. android:versionCode=”” 给设备程序识别版本(升级)用的,刚开始是1,升级一次就是2,3,4…等等
  4. android:versionName=”” 这个名称是给用户看的,APP版本号是可以自行设置的,起始可以使1.1,后续更新版本设置为1.2、1.3版本等等

第二层:(application)

  1. android:allowClearUserData=”true” | “false” 用户是否能选择自行清除数据,默认为true。当为true时,用户可自己清理用户数据,反之亦然
  2. android:allowTaskReparenting=”true” | “false” 用户是否被允许从一个任务跳转至另一个任务,默认是true
  3. android:label=”” 此属性是为许可提供的,label主要是用以描述许可是在保护什么功能,还有一个description属性,也是描述许可的。值是字符串类型,一般来自资源String文件
  4. android:icon=”” 描述程序的图标,值来自资源drawable文件夹
  5. android:theme=”” 定义了一个默认的主题风格给所有的activity,风格可以在自己的theme里面去设置它
  6. android:allowBackup=”true”|”false” 应用程序的数据备份和恢复的功能,默认是true,用户可以通过adb backup和adb restore进行对应用数据的备份和恢复,存在一定的风险

第三层:(activity)

  1. android:alwaysRetainTaskState=”true”|”false” 是否保留最后一次退出activity时的状态
  2. android:configChanges=”” 如果在设置这个值后,在手机的屏幕发生改变的时候不会杀掉当前的布局文件,重新加载oncreate方法,而是当前Activity直接调用onConfigurationChanged() 方法
  3. android:screenOrientation=”” 默认为unspecified:由系统自动判断显示方向;landscape横屏模式,宽度比高度大;portrait竖屏模式, 高度比宽度大;user模式,用户当前首选的方向;behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的);sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换;nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了

第四层:(intent-filter)

  1. action属性:只有android:name这个属性。常见的值有:
    android.intent.action.MAIN:表明此activity是作为应用程序的入口
    android.intent.action.VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据
    android.intent.action.EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据 
    android.intent.action.DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码
    android.intent.action.CALL:直接呼叫Data中所带的号码 
    android.intent.action.ANSWER:接听来电
    android.intent.action.SEND:由用户指定发送方式进行数据发送操作
    android.intent.action.SENDTO:系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作

  2. category属性:只有android:name属性。常见的值有:
    android.intent.category.LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 
    android.intent.category.DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行
    android.intent.category.HOME:设置该组件为Home Activity
    android.intent.category.PREFERENCE:设置该组件为Preference
    android.intent.category.BROWSABLE:设置该组件可以使用浏览器启动
    android.intent.category.GADGET:设置该组件可以内嵌到另外的Activity中

  3. data属性:
    每个data元素指定一个URI和数据类型(MIME类型)。它有四个属性scheme、host、port、path对应于URI的每个部分:
    scheme://host:port/path
    scheme的值一般为”http”,host为包名,port为端口号,path为具体地址,其中host和port合起来构成URI的凭据(authority),如果host没有指定,则port也会被忽略,要让authority有意义,scheme也必须要指定。要让path有意义,scheme+authority也必须要指定

    而pathPattern和PathPrefix主要是为了格式化path所使用的

一个activity里面可以包含多个intent-filter,他们之间的设置的属性是不一样的,目的是为activity提供显示和隐示访问的机制,是我猜的

第四层:(meta-data)

可以包含在activity 、activity-alias 、service 、receiver四个元素中

<meta-data android:name="string"  元数据项的名字    android:resource="resource specification"  资源的一个引用,指定给这个项的值是该资源的id    android:value="string"/> 指定给这一项的值

第三层:(activity-alias)

是为activity创建快捷方式的,具体的应该不常用,我很少遇见,这里不做详细描述

第三层:(service)

与activity同级,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。比如听音乐,网络下载数据等,都是由service运行的

service的生命周期:onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法

service与activity间的通信:Activity与service间的通信主要用IBinder负责

第三层:(receiver)

BroadcastReceiver:用于发送广播,broadcast是在应用程序之间传输信息的一种机制,而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件

第三层:(provider)

我没怎么遇见过,这里不描述了

第三层:(uses-library)

用于引用可自定义的用户库、所有android的包

第一层:(supports-screens)

<supports-screens        android:smallScreens="true"|"false"     android:normalScreens="true"|"false"     android:largeScreens="true"|"false"     android:anyDensity="true"|"false" />

四个属性,是否支持大屏,是否支持中屏,是否支持小屏,是否支持多种不同密度

第二层:(uses-sdk)

描述应用所需的api level,就是版本

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

第一层:(permission、uses-permission、permission-tree、permission-group )

最常用的是uses-permission,为应用程序提供相应的权限,区别也就不做对比了

uses-feature:过滤所有你设备不支持的应用

1 0
原创粉丝点击