很多天翼空间社区的网友对于Android全局配置文件AndroidManifest.xml不是很熟悉,今天我们就一起看下它完整的结构以及每个节点的作用。在我们日常的开发中都少不了下面的配置,每创建一个Activity、Service都离不开这个全局配置文件,深入的了解可以简化程序代码以及提高程序的维护性。

 

  在最外层包含了包名如 package="cn.android123.demo" 、软件的版本号    android:versionCode="1" 以及   android:versionName="1.0" ,里面一层的application分支中将可能包含Android程序的四种对象 Activity、Service、Content Provider以及Receiver。我们每添加上面四个类型中的任一新对象都需要在androidmanifest.xml文件中添加相应节点。

 

  其中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"] >  

有关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>

 

 

有关Androidmanifest.xml文件中的数据提供,我们来看下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定义,一般配合<intent-filer> 和<meta-data>隐式处理。

 

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