AndroidManifest.xml文件常用

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

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

说明如下:

android:allowTaskReparenting
是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务。
--------------------------------------------------------------------------------------
android:alwaysRetainTaskState
是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态
--------------------------------------------------------------------------------------
android:clearTaskOnLanunch
比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 从新启动 P, 是否显示 Q
--------------------------------------------------------------------------------------
android:configChanges
当配置list发生修改时, 是否调用 onConfigurationChanged() 方法 比如 "locale|navigation|orientation".
--------------------------------------------------------------------------------------
android:enabled
activity 是否可以被实例化,
--------------------------------------------------------------------------------------
android:excludeFromRecents
是否可被显示在最近打开的activity列表里
--------------------------------------------------------------------------------------
android:exported
是否允许activity被其它程序调用
--------------------------------------------------------------------------------------
android:finishOnTaskLaunch
是否关闭已打开的activity当用户重新启动这个任务的时候
--------------------------------------------------------------------------------------
android.icon
--------------------------------------------------------------------------------------
android:label
--------------------------------------------------------------------------------------
android:launchMode
activity启动方式, "standard" "singleTop" "singleTask" "singleInstance" 其中前两个为一组, 后两个为一组
--------------------------------------------------------------------------------------
android:multiprocess
允许多进程
--------------------------------------------------------------------------------------
android:name
activity的类名, 必须指定
--------------------------------------------------------------------------------------
android:onHistory
是否需要移除这个activity当用户切换到其他屏幕时。 这个属性是 API level 3 中引入的
--------------------------------------------------------------------------------------
android:permission
--------------------------------------------------------------------------------------
android:process
一个activity运行时所在的进程名,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一致。<application>中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。 如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。
--------------------------------------------------------------------------------------
android:screenOrientation
activity显示的模式, "unspecified" 默认值 "landscape" 风景画模式,宽度比高度大一些 "portrait" 肖像模式, 高度比宽度大。 "user" 用户的设置 "behind" "sensor" "nosensor"
--------------------------------------------------------------------------------------
android:stateNotNeeded
是否 activity被销毁和成功重启并不保存状态
--------------------------------------------------------------------------------------
android:taskAffinity
activity的亲属关系, 默认情况同一个应用程序下的activity有相同的关系
--------------------------------------------------------------------------------------
android:theme
activity的样式主题, 如果没有设置,则activity的主题样式从属于应用程序, 参见<application>元素的theme属性
--------------------------------------------------------------------------------------
android:windowSoftInputMode
activity主窗口与软键盘的交互模式, 自从API level 3 被引入

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

yxkong

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

文章评论