上次对AndroidManifest.xml文件中部分标签作了说明,并且采用实例说明了instrumentation标签在单元测试中的作用,下面接着对剩下的几个组件标签进行介绍。
<uses-sdk >标签说明
API文档中定义语法如下:
<uses-sdk android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer" />
顾名思义,这个标签是用来指定应用使用的android sdk版本。其中minSdkVersion与maxSdkVersion两个属性比较好理解,分别指代这个应用适配的最低版本与最高版本,一旦终端在安装应用时,检测当前Android系统与应用不匹配,将无法安装成功。当然由于Android系统的向后兼容特性,一般应用只设置最低版本即可。
targetSdkVersion这个属性可以说只是用来推荐安装的Android系统版本,表明在这个版本上,该应用已经被充分测试,无需对该应用再进行兼容性检查,或许运行得更流畅一些。这里我们可以认为该属性只是对应用状态的描述信息,抛开可能存在的性能因素,该属性不会对应用造成任何影响。注意该属性与project.properties文件中的target有本质上的区别。
上面三个属性值都为int类型,根据市场占有率来说,最低版本设置为9(Android 2.3)就可以了,目前Android API level最高为21(Android 5.0)
<uses-configuration>标签与<uses-feature>标签说明
这两个标签主要是用来描述应用需要的硬件与软件信息。比如某个应用必须使用硬键盘,必须使用蓝牙或者要求设备必须支持多点触控,就可以在这两个标签中增加限制说明。如果不支持这些内容,应用同样无法使用,外部服务无法对应用进行筛选推送。
由于这部分内容接触不多,并且很多限制是用于游戏应用开发需要注意的,因此这里不再做单独说明,后续如果有需要再独立进行分析。
API文档中定义语法如下:<uses-configuration
android:reqFiveWayNav=["true" | "false"]
android:reqHardKeyboard=["true" | "false"]
android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
<supports-screens>标签说明API文档中定义语法如下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
这个标签用来说明应用本身支持的屏幕尺寸,这些并非是应用安装或者运行时的限制内容。对于smallScreens在外部服务(不清楚国内的应用商店会怎么样,在Google Play中是支持的)中进行针对小屏幕的终端不再进行推送。而针对largeScreens或者xlargeScreens时,如果设置为false,则表明该应用屏幕适配时不支持大屏幕的展示,那样在更大屏幕的终端上由系统自动进行屏幕兼容,当然兼容时只会针对普通模式的屏幕来进行UI放大,这样很可能造成UI重叠并且导致UI显示模糊。
我们在使用时应该考虑到不同尺寸、密度屏幕适配的问题,最好不要由系统进行兼容。如果没有设置该标签,默认值为true,不过也并不绝对,在某些版本上默认值会有些变动。
<compatible-screens>标签说明
该标签用于指定应用兼容的屏幕参数。注意该标签不会被Android系统读取,只会提供给外部服务(比如Google Play,又是拿Google Play举例,现在也上不了,不知道国内的应用市场支持这些不?)进行筛选使用。该标签可以无视之,有特殊需要的除外。
API文档中定义语法如下:<compatible-screens>
<screen android:screenSize=["small" | "normal" | "large" | "xlarge"]
android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
...
</compatible-screens>
<supports-gl-texture>标签说明
按照文档中的描述,这个标签用于声明一个应用程序所支持的GL纹理压缩格式。
针对Android下OpenGL开发,本人能力有限,在此不作说明。
API文档中定义语法如下:<supports-gl-texture android:name="string" />
<application>标签说明
上面说的这些标签项,都是针对应用的限制说明,有一些在Android系统上能够体现(应用的安装和运行时),有一些只是在外部服务对应用的筛选和推送时才会体现。不过这些标签都是可选项,在Android中还有一个必要的标签:Application。
由于Application内容较多,并且该标签中还包括了很多的子标签项,比如<activity>、<activity-alias>、<meta-data>、<service>、<receiver>、<provider>、<uses-library>等,并且在子标签下还包含了更多的标签信息。因此在这里只对Application做一个简单的说明,后续会针对里面的每一项进行具体介绍,如果有遗留的内容,欢迎补充。
API文档中对Application定义语法如下:<application android:allowTaskReparenting=["true" | "false"]
android:allowBackup=["true" | "false"]
android:backupAgent="string"
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:killAfterRestore=["true" | "false"]
android:largeHeap=["true" | "false"]
android:label="string resource"
android:logo="drawable resource"
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 or theme"
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:vmSafeMode=["true" | "false"] >
. . .
</application>
从定义上就可以看出application的庞大信息了,在Android中有一个类com.app.Application与这个标签配合使用。Application是对整个应用的管理,每个应用启动后有一个Application的实例进行维护。在标签中定义的内容也是应用的全局配置信息。
allowTaskReparenting标签指定application管理的activity是否可以更换所属的task,实际上在activity标签中也有该属性,可以指定具体activity的配置。默认为false
android:allowBackup 是否允许备份应用数据,默认为true。这里的备份操作包括直接通过adb进行数据或者应用备份。
backupAgent 实现应用备份的类的名称
android:debuggable 用来指定应用是否可以进行调试,注意,该值默认为false。但是在模拟器中该值即使为false仍然可以调试,但是在真机中就不一样了。
description 描述信息,注释使用,可以不必理会。
enabled 用来设置application中的各个组件是否可以被实例化,默认为true
hasCode 设置应用是否包含代码,默认值为true。如果为false,系统不会在组件启动时加载任何应用代码。
hardwareAccelerated 硬件加速渲染,从level 11支持,在level 14以及上版本默认值为true,否则为false
icon 指定应用的图标,如果需要修改应用安装后的显示图标就可以修改该值。这一项也是组件的默认图标。
killAfterRestore在整个系统恢复期间,应用在其设置被恢复之后是否应该被终止。默认值为true
largeHeap 应用进程是否可以使用一个较大的堆空间,当然了Android提倡精简内存来改善性能。
label 应用的标签信息,也是每个组件的默认标签信息
logo 应用的全局标志,也是activity的默认标志,注意这与icon不同
manageSpaceActivity 指定管理数据的Activity名称,而默认清理数据时会将应用私有空间的文件全部删除,有了数据管理后,就可以进行针对性的处理了。
name 指定Application的名称,如果没有的话,系统提供一个默认的Application进行处理。
permission客户端必须有的,用来与之交互的权限的名字。
persistent 应用是否应该一直持续运行,正常来说应用不应该设置这一项,默认值为false
process 应用所有组件应该运行其中的进程的名字。每个组件都可以使用它自己的进程属性覆盖这个默认值。
restoreAnyVersion 表示应用可以使用任何版本的备份信息来恢复数据,默认值为false,该值正常不需要使用。
requiredAccountType 与 requiredAccountType指定应用所要求的账户类型。默认值为null,表示在任何账户下应用都可以使用。Level 18中增加该支持。
supportsRtl 支持从右向左进行布局。PS:我查了一下,应该是支持某些语言的阅读习惯是从右向左。有些属性不是没有道理,只是我们用不上。
taskAffinity 设置应用内的所有activity默认的affinity。关于android:taskAffinity在后续Activity启动模式中会具体说明。
testOnly 表明这个应用是否只是用于测试。 这种应用只能通过adb安装。
theme 设置activity的默认主题。
uiOptions activity UI的额外选项,可以为"none"或者"splitActionBarWhenNarrow"。后者在actionbar中经常使用,意思为当水平方向上空间受到限制的时候,在ActionBar中,在屏幕下面添加一个bar来显示行为条目。action bar被分为了上下两部分,而不只是几个屏幕上方action bar中显示的行为条目。这使得行为条目和屏幕上方的导航、标题元素拥有大量合理的空间。菜单项不会被分割到两个bar上,他们总是在一起出现。
vmSafeMode 表明应用是否愿意让虚拟机(VM)在安全模式下操作。默认值为false。Dalvik JIT(实时编译器)把Dalvik字节码编译成本地代码,这样可以明显加快执行速度。使用安全模式表示禁用JIT.