[基础知识]全面认识AndroidManifest.xml文件(三)

<application/>

<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="stringresource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawableresource"
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="stringresource"
             android:logo="drawableresource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:requiredAccountType="string"
             android:restrictedAccountType="string"
             android:supportsRtl=["true" | "false"]
             android:taskAffinity="string"
             android:testOnly=["true" | "false"]
             android:theme="resource ortheme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"]
             android:vmSafeMode=["true" | "false"] >
    . . .
</application>

android:allowTaskReparenting:

是否允许Activities从启动的Task移到同一affinity启动的Task中

软件A   AA1Activity  AA2Activity 软件B BB1Activity

BB1Activity启动AA1Activity  此时状态为Task1,再启动AA2Activity,一样的affinity时打开状态为Task1,否则为Task2

<activity/>的allowTaskReparenting属性可以覆盖

android:allowBackup:

是否允许备份,如果为false,即便整个系统备份也不能保存其数据

android:backupAgent

实现备份代理的类名,应为全限定类名,例如com.example.project.MyBackupAgent,如果以句点开头,自动以AndroidManifest.xml中包名属性为前缀

android:debuggable:

是否可以运行debug模式,开发时设为true,发行时应该改为false,默认为false

android:description:

描述软件的String资源

android:enabled:

系统是否能够实例化组件

 android:hasCode:

应用是否包含代码,默认为true,如果为false,系统启动时不会加载程序代码

android:hardwareAccelerated:

是否开启硬件加速渲染功能,来提升2D效果,如果设为true,minSdkVersion和targetSdkVersion必须为14或更高

android:icon:

应用所有组件的图画资源

android:killAfterRestore:

默认为true,全系统恢复操作完成后会关闭应用进程,三方程序没有必要设置此项属性

android:largeHeap:

应用第一次启动时是否分配更大的内存,应用应该更关注于减少所占用的内存

android:label:

应用所有组件的标签

android:logo:

默认没有logo,所有activities的logo

android:manageSpaceActivity

全限定名称的activity子类,可以管理应用所占的内存,必须以<activity/>声明

android:name:

全限定名称的application子类,此选项可选,多数时候用不到,系统会使用Base Application的实例

android:permission:

应用所需权限,组件可以覆盖此属性

android:persistent:

应用是否时刻保持运行,默认为false,只有一些系统级应用需要

android:process:

为应用指定进程名称,组件可以自定义,默认为<manifest/>中的包名

android:restoreAnyVersion:

如果为true,即便版本号不匹配,也会恢复数据,默认为false

android:requiredAccountType:

默认为null,无需账户就能运行,如果需要,必须符合account authenticator 类型,通过AuthenticatorDescription定义。如果需要用受限个人资料访问,必须在ndroid:restrictedAccountType中指定同样的属性。可能泄露个人资料,最好声明为null

android:supportsRtl:

应用是否支持right-to-left布局,默认为false,使用需要targetSdkVersion为17或更高

android:taskAffinity:

android:allowTaskReparenting需要用到的属性,默认为<manifest/>的包名

android:testOnly:

应用是否是为了测试,它可能向外暴露数据,引发安全漏洞,如果为true,应用只能通过adb安装

android:theme:

通过样式资源指定主题

android:uiOptions:

UI附加属性:none默认值,没有额外属性,splitActionBarWhenNarrow在水平空间受限的时候,会分成上下两部分Actionbar

android:vmSafeMode:

默认为false,true为禁用JIT编译器,只在VM环境下执行

 

<activity/>

<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                "touchscreen", "keyboard", "keyboardHidden",
                                "navigation", "screenLayout", "fontScale", "uiMode",
                                "orientation", "screenSize", "smallestScreenSize"]
          android:documentLaunchMode=["intoExisting", "always",
                                 "none", "never"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawableresource"
          android:label="stringresource"
          android:launchMode=["multiple" | "singleTop" |
                             "singleTask" | "singleInstance"]
          android:maxRecents="integer"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                    "landscape" | "portrait" |
                                    "reverseLandscape" | "reversePortrait" |
                                    "sensorLandscape" | "sensorPortrait" |
                                    "userLandscape" | "userPortrait" |
                                    "sensor" | "fullSensor" | "nosensor" |
                                    "user" | "fullUser" | "locked"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource ortheme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                      "stateUnchanged", "stateHidden",
                                      "stateAlwaysHidden", "stateVisible",
                                      "stateAlwaysVisible", "adjustUnspecified",
                                      "adjustResize", "adjustPan"] >   
    . . .
</activity>

声明一个Activity的子类,实现了应用的可视化界面部分,所有Activity必须在Androidmanifest.xml中声明,否则将不会被启动

android:allowEmbedded

指明该activity可以被其他activity的嵌入子元素启动。比如,activities用于穿戴设备自定义通知的必须声明此属性为true,这样就可以显示在属于其他进程的上下文流中,默认false

android:allowTaskReparenting

同上述<application/>中的定义,只是<activity/>中这个属性会覆盖<application/>中的,如未定义,则使用<application/>的android:allowTaskReparenting的值

android:alwaysRetainTaskState

默认为false,系统会在某些情况下重置为初始状态,true则系统会维持此activity的状态,比如在浏览器中,保证用户打开的标签不会丢失

android:autoMoveFromRecents

如果为true,则自动从最近打开的activities和task列表中移除,false不移除

android:clearTaskOnLanuch

如果为true,从主屏中重启时,除开处理根节点的Activity,其他的Activity都会被删除。默认为false,例如Activity P中启动Activity Q,这时用home离开,再回到P,看到的应该是Q,如果属性为true,则看到的是P,从P上启动的都被删除了。

android:configChanges

应当避免使用此属性,作为最后手段使用,如果使用此属性,则Activity不会在运行配置变化时,自动重启加载新配置,而是保持运行,并且调用onConfigurationChanged()

可以声明的属性有mcc移动网络国家号码|mnc移动网络网号|locale区域设置|touchscreen触摸屏改变,用不到|keyboard键盘模式改变,例如接入外部键盘|keyboardHidden用户键盘可访问性改变|navigation导航模式改变,用不到|screenLayout屏幕布局发生改变|fontScale全局字体缩放改变|uiMode用户模式改变,例如开启夜间模式|orientation朝向改变时,API 13或以上还应声明screenSize|screenSize可用屏幕尺寸,跟纵横比有关,所以朝向改变时也要声明此属性|smallestScreenSize物理屏幕尺寸改变,例如接入外部屏幕|layoutDirection,例如LTR变为RTL

android:documentLaunchMode

指定Activity每次启动时,新实例添加进task的方式。这个属性允许用户可以在最近打开的列表中呈现多种形式

intoExisting:重用现有的task,效果跟设置FLAG_ACTIVITY_NEW_DOUCUMENT但不设置FLAG_ACTIVITY_MULTIPLE_TASK一样

always:不管什么情况都创建一个新的task,效果跟同时设置上述两个属性

none:默认值,不创建新的task,除非设置了FLAG_ACTIVITY_NEW_TASK,显示single task

never:如果FLAG_ACTIVITY_NEW_DOUCUMENT与FLAG_ACTIVITY_MULTIPLE_TASK其中之一设置了,效果跟none一样

使用none或never属性需要定义launchMode=”standard”,如果未定义,则使用documentLaunchMode=”none”

android:enabled

默认为true可以实例化,false不可以,<application/>与<activity/>必须同时为true或default才可以实例化

android:excludeFromRecents

默认false这个activity初始化的task不排除在最近打开的列表中,true排除

android:exported

能否被其他应用组件启动,true如果可以就能启动,false只能同一应用启动或同user ID的应用启动

默认值则取决于activity是否包含intent filters,不包含则默认false,外部应用也无法知道类名,包含则true,可以被外部启动

android:finishOnTaskLaunch

activity再次启动时,是否应该结束当前的task,默认false不结束,如果为true则结束

如果此属性与allowTaskReparenting都为true,这个属性优先级更高,activity的affinity属性将被忽略

android:hardwareAccelerated

硬件加速渲染时,Canvas、Paint、Xfermode、ColorFilter、Shader和Camera中大多数操作都会被加速,使动画、滚动更平滑,改善整体效果

启动硬件加速需要更多系统资源与内存,非所有OpenGL 2D操作都会被加速,注意测试

android:icon

android:label

android:launchMode

指明Activity的启动模式,4种,默认为standard

针对多数Activity推荐使用standard和singleTop:

standard支持多实例,每次启动都会创建一个新的Activity实例来响应Intent请求

singleTop有条件支持,如果栈顶已有此Activity的实例,该实例响应Intent请求(onNewIntent()回调方法中调用),如果在栈顶但不是目标task或是目标task但不在栈顶,会创建新实例并压进栈中

特殊启动模式,通常不推荐:

singleTask不支持多实例,允许其他(standard或singleTop模式的)Activity作为它任务一部分

singleInstance不支持多实例,不允许其他Activity称为它的任务一部分

android:maxRecents

从这个Activity启动的task最多可以添加进最近历史的数目,默认16,可选1-50,25为低内存设备,0不可以,必须为整数

android:multiprocess

默认false,通常activity的实例会添加进定义它的应用进程中,这样所有activity实例都运行在同一进程中,如果为true,则可以运行在不同进程中,基本用不到

android:name

android:noHistory

默认false,用户离开该Activity且它在屏幕上不可见时,不从堆栈中删除,true则删除,没有历史轨迹,用户无法返回

android:parentActivityName

定义当用户按Up按钮时,将启动哪个Activity,API Level16引进,为支持API levels 4 -16,可以使用<meta-data/>标签指定”android.support.PARENT_ACTIVITY”

android:permission

startActivity()或startActivityForResult()必须的权限,如未设置,则使用<application/>的,如果也未定义,则无权限保护

android:process

通常应用所有组件都运行在包名所在的进程中,但每个组件可以定义该属性,把应用分离到多个进程中

如果该属性以”:”开始,则需要时创建一个私有的新进程,如果以小写字母开头,则运行在它命名的全局进程中,不同应用程序组件可以共享一个进程

android:screenOrientation

默认unspecified

user用户当前首选behind  activity栈中紧靠它的activity的方向 landscape横向(屏幕宽比高长)portrait纵向(屏幕)reverseLandscape颠倒横向reversePortrait颠倒纵向

sensorLandscape横向(传感器决定是否颠倒)sensorPortrait纵向(传感器决定是否颠倒)sensor传感器决定,但有些设备不会在4个方向上都旋转fullSensor在4个方向都旋转

nosensor忽略传感器,系统使用unspecified设置相同的策略fullUser如果用户关闭传感器,跟user一样,否则跟fullSensor一样可以4方向旋转locked锁定为跟当前一样

android:stateNotNeeded

默认false,重启Activity时需要它之前的状态,true则无需之前状态,不调用onSaveInstanceState(),主屏Activity设置此属性为true,即便崩溃也能在缺省状态重启

android:taskAffinity

设置亲缘关系,默认一个应用所有Activity为同组。可以将Activity分到不同组,或不同应用中Activity放到同一任务中,未设置看<application/>的taskAffinitiy属性,都未设置,则为包名

android:theme

android:uiOptions

android:windowSoftInputMode

设置Activity主窗口与软键盘如何交互,影响以下两件事情

*当获得焦点时,软键盘是否显示

*当activity主窗口调整时,是调整activity窗口大小来适用软键盘,或当窗口一部分被软键盘覆盖时,内容区域平移以便可以显示焦点

此属性值必须为state|adjust

stateUnspecified默认设置,系统选择,或依赖主题设置

stateUnchanged当Activity到前台时,软键盘都保持最后的状态

stateHidden用户选择这个Activity而非返回到这个Activity,软键盘隐藏

stateAlwaysHidden获得输入焦点时,软键盘隐藏

stateVisible在合适的时机显示(用户浏览此activity主窗口时)

stateAlwaysVisible用户选择而非返回时,软键盘显示

adjustUnspecified默认设置,系统根据内容区域能够滚动自动选择,可滚动时,窗口自动调整以便可以在一个小区域内显示所有内容

adjustResize为适应软键盘,主窗口自动调整

adjustPan主窗口不调整,内容区域平移,很少适用,用户需要关闭软键盘以便与键盘遮住区域交互

 

<activity-alias/>

<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawableresource"
                android:label="stringresource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string" >
    . . .
</activity-alias>

给targetActivity属性指定一个别名,紧跟需要别名的Activity

别名作为一个独立个体来代表目标Activity,拥有自己的Intent filter,可以指定android.intent.action.MAIN和android.intent.category.LAUNCHER标记

android:enabled

与<application/>的属性必须都为true,有一为false,别名不起作用

android:exported

android:icon

android:label

android:name

全限定类名,但可以随意,不关联实际类

android:permission

startActivity()或startActivityForResult()调用者无权限,将不会发送它的intent对象。会取代目标Activity设置的任何权限

android:targetActivity

通过别名激活的Activity的name属性

<service/>

<service android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string" >
    . . .
</service>

android:enabled

android:exported

android:icon

android:label

android:name

android:permission

android:process

上述属性解释同<activity/>,android:permission中调用方法不一样,为startService()bindService() stopService()

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

属性解释相同

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

android:authorities

URI权限列表,多个URI以分号分隔,URI必须遵循Java-style,比如com.example.provider.cartoonprovider

android:enabled

android:exported

minSdkVersion或者targetSdkVersio为16及以下,默认为true,任何应用都可通过URI获取它,17以上默认为false,只有同一user ID才可以获取

android:grantUriPermission

用于设定那些没有访问权限的访问者是否可以访问的临时权限,为true则临时权限可以读取、修改任何数据,false则只能<gran-uri-permission>子元素的数据子集

通常激活Intent对象的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标记来授予

android:icon

android:initOrder

相比同进程的其他内容提供器,实例化顺序,为一个整数,大的先初始化

android:label

android:multiprocess

默认false,给所有访问者都是一个实例,如果true,系统能够为每个客户端进程创建一个实例,避免进程间通信开销

android:name

android:process

android:readPermission

客户端查询需要的权限

android:syncable

是否与服务器数据同步,true为需要同步,false不需要

android:writePermission

修改数据所需权限

<provider/>可以包含<grant-uri-permission/>、<meta-data/>、<path-permission/>

<grant-uri-permission/>

<grant-uri-permission android:path="string"
                      android:pathPattern="string"
                      android:pathPrefix="string" />

提供授权数据子集

android:path

android:pathPattern

android:pathPrefix

path比较完整路径

pathPrefix只比较路径初始部分

pathPattern比较完整路径,但可以包含通配符* 例如a*匹配a、aa、aaa、….或点星号.*例如.*html匹配abchtml、chhtml、html…..

 

<path-permission/>

<path-permission android:path="string"
                 android:pathPrefix="string"
                 android:pathPattern="string"
                 android:permission="string"
                 android:readPermission="string"
                 android:writePermission="string" />

定义provider中具体数据子集路径及必要权限

android:path

定义完整URI路径,只能访问给这个路径所标识的具体数据

android:pathPrefix

可以访问所有URI初始部分相同的数据子集

android:pathPattern

支持通配符的URI路径

android:permission

读写其中数据所需权限,但readPermission和writePermission比这个优先级高

android:readPermission

android:writePermission

<meta-data/>

四大组件都可包含此属性

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string" />

name-value对给父组件提供额外信息

value属性可以使用resource代替,最好使用resource

android:name

比如符合Java-style且唯一

android:resource

使用Bundle.getInt()得到资源ID

android:name

字符串 getString()

整数     getInt()

布尔值 getBoolean()

颜色值 getInt()

浮点值 getFloat()

<intent-filter/>

<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >
    <action />
    <category />
    <data />
</intent-filter>

四大组件都可包含此属性,必须包含<action/>属性

android:icon

android:label

android:priority

当一个Intent对象可以被多个Activity响应时,系统选择优先级高的,对于Broadcast Receiver只有同步消息优先调用高优先级的,异步消息忽略此设置

<intent-filter/>中可以包含<action/>、<category/>、<data/>

<action/>

<action android:name="string" />

给Intent filter添加一个操作,可以包含一个或多个,ACTION_string定义了一些标准操作,自定义的最好以包名为前缀,

比如<action android:name=”com.example.project.TRANSMOGRIFY”/>

<category/>

<category android:name="string" />
</pre>

给filter添加一个分类,标准分类用CATEGORY_name常量定义,自定义以包名为前缀,以保证唯一

<data/>

<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string" />

指定filter需要的数据规范,规范可以是mimeType、URI或mimeType和URI的组合

scheme://host:port/pathor pathPrefix or pathPattern

android:sheme

该属性结尾没有冒号,如果设置了mimeType,未设置sheme,系统假定为content:和file:

如果未指定scheme属性,其他URI属性都被忽略;未指定host属性,port与path属性都被忽略

android:host

Android框架中,主机名匹配大小写敏感,始终用小写字母指定

android:port

android:mimeType

大小写敏感,小写字母指定

android:path

android:pathPrefix

android:pathPattern

与Intent对象中的路径进行匹配

path比较完整路径

pathPrefix只比较路径初始部分

pathPattern比较完整路径,但可以包含通配符* 例如a*匹配a、aa、aaa、….或点星号.*例如.*html匹配abchtml、chhtml、html…..

 

<uses-library/>

<uses-library
  android:name="string"
  android:required=["true" | "false"] />

指定应用所需的共享类库

android:name

指定类库名称

android:required

默认true,没有这个类库,不允许安装,false该类库存在则使用,不存在也允许安装,可以设计成没有该类库也能工作,比如通过反射机制判断该类是否存在

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值