Android系统梳理-AndroidManifest.xml文件说明2

    上次对AndroidManifest.xml文件中部分标签作了说明,并且采用实例说明了instrumentation标签在单元测试中的作用,下面接着对剩下的几个组件标签进行介绍。

 

<uses-sdk >标签说明

    API文档中定义语法如下:

<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />

    顾名思义,这个标签是用来指定应用使用的android sdk版本。其中minSdkVersionmaxSdkVersion两个属性比较好理解,分别指代这个应用适配的最低版本与最高版本,一旦终端在安装应用时,检测当前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.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值