AndroidManifest.xml文件综合详解

一,重要性

AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个 android程序中必须的文件。它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件(activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。
因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。一个典型的Android应用程序的结构如下图所示:

 Android应用程序的结构

二,主要功能

它指定了该应用程序的Java包:该包名作为应用程序的一个独特标识。
它描述了应用程序组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成。它指定了实现每个组件的类以及公开发布它们的能力(例如,它们能持有哪个Intent信息)。这些声明使Android系统知道这儿有什么组件以及在什么条件下它们可以被载入。
它决定那些进程将容纳应用程序组件。
它声明了本应用程序必须拥有哪些许可,以便访问API的被保护部分,以及与其他应用程序交互。
它也声明了其他应用程序在和该应用程序交互时需要持有的许可。
它列出了Instrumentation类,可以在应用程序运行时提供简档和其他信息。这些声明仅当应用程序在开发和测试过程中被提供;它们将在应用程序正式发布之前被移除。
它声明了该应用程序所需的Android API的最小化水平。
它列出了该应用程序必须链接的库。

 

三,主要结构及规则

下面列表显示了manifest文件的通常的结构以及它可以含有的元素。每个元素,连同它的所有属性,会在各个单独的文档里进行充分的描绘。

 

四,详细说明值得一提一些常用之处:

1,几乎所有的AndroidManifest.xml(以及许多其他Android的xml的文件)在第一个元素中包含了命名空间的声明 xmlns:android="http://schemas.android.com/apk/res/android"。这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
2,大部分manifests包含了单个<application>的元素,它定义了所有的application级别组件和属性,并能在package中使用。
3,任何被用户看作顶层应用程序,并能被程序启动器所用的package,需要包含至少一个Activity组件来支持MAIN操作和LAUNCHER种类。动作android.intent.action.MAIN指示这是应用程序的入口点。类别 android.intent.category.LAUNCHER将此Activity放在启动器窗口中。
在最外层的<manifest>中包含了包名如 package="cn.androidlover.demo" 、软件的版本号 android:versionCode="1" 以及 android:versionName="1.0"的属性,而里面一层的<application>分支中将可能包含Android程序的四种对象 Activity、Service、Content Provider以及Receiver。我们每添加上面四个类型中的任一种新对象都需要在androidmanifest.xml文件中添加相应节点,否则运行时将会产生异常。每一个activity必须要一个<activity>标记对应,无论它给外部使用或是只用于自己的package 中。如果一个activity没有对应的标记,你将不能运行它。
此文件一个重要的地方就是它所包含的intent-filters。这些filters描述了activity启动的位置和时间。每当一个 activity(或者操作系统)要执行一个操作,例如:打开网页或联系簿时,它创建出一个intent的对象。它能承载一些信息描述了你想做什么,你想处理什么数据,数据的类型,和一些其他信息。Android比较了intent对象中和每个application所暴露的intent-filter中的信息,来找到最合适的activity来处理调用者所指定的数据和操作。关于intent的更多信息请访问Intent参考页面。


application属性介绍:
有关AndroidManifest.xml文件的application分支我们有必要了解一些常见的属性,这里可以看到一些我们实用的选项,比如允许调试android:debuggable、任务关系android:taskAffinity,比如我们常见的方式创建一个新的任务实用标记 FLAG_ACTIVITY_NEW_TASK,为程序制定一个主题,可以使用android:theme指向一个主题文件。平时我们创建的程序使用一些安全敏感项,会需要请求系统许可权限,这里可以使用android:permission来制定相关的许可,每个程序的service、 activity、content provider、receiver都需要在application的节点内实现。有关完整的属性可以查看:

 

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


另外:Activity的属性常用的可能为android:name和android:label两个,但我们需要了解所有的属性以帮助解决复杂的问题,完整的如下:

  • android:allowTaskReparenting=["true" | "false"]
  • android:alwaysRetainTaskState=["true" | "false"]
  • android:clearTaskOnLaunch=["true"" | "false"]
  • android:configChanges=[one or more of: "mcc" "mnc" "locale" "touchscreen" "keyboard" "keyboardHidden" "navigation" "orientation" "fontScale"]
  • android:enabled=["true" | "false"]
  • android:excludeFromRecents=["true" | "false"]
  • android:exported=["true" | "false"]
  • android:finishOnTaskLaunch=["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" | "nonsensor"]
  • android:stateNotNeeded=["true" | "false"]
  • android:taskAffinity="string"
  • android:theme="resource or theme"
  • android:windowSoftInputMode=[one or more of: "stateUnspecified" "stateUnchanged" "stateHidden" "stateAlwaysHidden" "stateVisible" "stateAlwaysVisible" "adjustUnspecified" "adjustResize" "adjustPan"]

从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>

 

而对于服务相关定义如下:
<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>


最后是Broadcast使用的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>

 

总之,AndroidManifest.xml文件虽然看起来复杂,但是,只要我们理清中里面各元素的作用,那么一切就变得简单了。

 

转自:http://yangguangfu.javaeye.com/blog/796062

AndroidManifest.xml是Android应用程序的核心配置文件,它描述了应用程序的基本信息和特性,如应用程序的名称、版本、图标、启动组件、权限等等。在这里,我将为您提供一个AndroidManifest.xml的详解,包括其结构、元素和属性。 ## 结构 AndroidManifest.xml文件的结构如下: ```xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app" android:versionCode="1" android:versionName="1.0"> <!-- Application components (activities, services, etc.) --> <application android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" android:exported="false" android:enabled="true"/> <receiver android:name=".MyReceiver" android:exported="false" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> <!-- Permissions --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CAMERA" /> </manifest> ``` ## 元素和属性 ### manifest元素 `<manifest>`元素是AndroidManifest.xml文件的根元素,它包含了以下属性: - `package`:应用程序的包名,它必须是唯一的。 - `android:versionCode`:应用程序的版本号,用于区分不同版本。 - `android:versionName`:应用程序的版本名,用来显示给用户。 ### application元素 `<application>`元素描述了整个应用程序的信息,包括应用程序的图标、名称、主题等。它包含了以下属性: - `android:allowBackup`:是否允许备份应用程序的数据,默认为true。 - `android:icon`:应用程序的图标。 - `android:label`:应用程序的名称。 - `android:theme`:应用程序的主题。 ### activity元素 `<activity>`元素描述了应用程序的一个活动,它包含了以下属性: - `android:name`:活动的类名。 - `android:label`:活动的名称。 - `android:theme`:活动的主题。 `<activity>`元素还可以包含一个或多个`<intent-filter>`元素,每个`<intent-filter>`元素描述了该活动能够响应的一类Intent。例如,以下代码表示该活动可以响应ACTION_MAIN和CATEGORY_LAUNCHER的Intent,即该活动是应用程序的启动活动。 ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> ``` ### service元素 `<service>`元素描述了应用程序的一个服务,它包含了以下属性: - `android:name`:服务的类名。 - `android:exported`:服务是否允许其他应用程序调用,默认为false。 - `android:enabled`:服务是否启用,默认为true。 ### receiver元素 `<receiver>`元素描述了应用程序的一个广播接收器,它包含了以下属性: - `android:name`:广播接收器的类名。 - `android:exported`:广播接收器是否允许其他应用程序发送广播调用,默认为false。 - `android:enabled`:广播接收器是否启用,默认为true。 `<receiver>`元素还可以包含一个或多个`<intent-filter>`元素,每个`<intent-filter>`元素描述了该广播接收器能够响应的一类Intent。例如,以下代码表示该广播接收器可以响应BOOT_COMPLETED的Intent,即在设备启动完成后自动启动该应用程序。 ```xml <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> ``` ### uses-permission元素 `<uses-permission>`元素描述了应用程序需要的权限,它包含了以下属性: - `android:name`:权限的名称。 例如,以下代码表示该应用程序需要访问联系人和相机的权限。 ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CAMERA" /> ``` ## 总结 AndroidManifest.xml是Android应用程序的核心配置文件,它描述了应用程序的基本信息和特性。本文介绍了AndroidManifest.xml的结构、元素和属性,希望能够帮助您更好地理解和使用AndroidManifest.xml。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值