Android 程序的主要组成部分 和 Manifest 文件

Android 程序的主要组成部分 Manifest 文件

Android由松耦合的组件组成,并使用Manifest 绑定在一起;Manifest描述了每个组件和他们之间的交互关系,还用于应用程序的元数据、其硬件和平台的要求、外部库以及必需的权限。

以下几个组件提供了应用程序的基本结构模块:

Activity 主要用于跟用户交互,显示界面,是android程序的表示层

Service Android的幕后工作者,不可见,不能交互,可以更新数据源和Activity,触发通知和广播Intent

Content Provider :顾名思义,内容提供者,就是向别的应用程序提供数据的。用来管理和持久化应用程序数据,通常会与SQL数据交互。

Intent :强大到无法想象的牛逼人物,Android 几乎无时无刻不在应用它,他是一个强大的应用程序间的消息传递框架。他可以用来启动停止ActivityService,在系统范围内活想目标ActivityServiceBroadcastReceiver 广播消息,以及请求对特定的一条数据执行操作。

BroadCast Receiver Intent 监听器。BroadCast Receiver使应用程序可以监听到那些匹配指定的过滤的Intent广播。BroadCast Receiver会自动启动应用程序来响应某个收到的Intent,这个特点使他们成为了事件驱动的应用程序的最佳选择。

Widget :通常添加到设备主屏幕的可视化应用程序组件。WidgetBroadCast Receiver的特殊变体,可用于创建动态的交互式应用程序控件。用户可以把这些组件添加主屏幕上。

 

Manifest 简介

每个Android项目都包含一个Manifest文件------Android Manifest.xml ,它存储在项目层次的最底部。Manifest文件可以定义应用程序及其组建和需求的结构和元数据。

它包含了组成应用程序的米一个ActivityServiceContent Provider Broadcast Receiver的节点。并使用Intent Filter 权限来确定这些组件之间以及这些组件和其他应用程序的是如何交互的。

Manifest 文件还可以指定应用程序的元数据(如它的图标,版本号或主题)以及额外的顶层节点,这写节点可用来指定必需的安全权限和单元测试,以及定义硬件、屏幕和平台支持。

Manifest文件由一个跟manifest标签组成,该标签带有一个被设为项目名包的package属性。它通常包含一个xmlns:android 属性 来提供文件内使用的某些系统属性。

下面介绍几个Manifest几个节点和属性:

<manifest>根节点下的几个属性

versionCode:将当前的应用程序版本定义为一个整数。每次版本迭代式,这个数字都会增加。

versionName:可定义一个显示给用户的公共版本号。

installLocation:指定程序安装的优先的位置。属性值:internalOnly(仅安装在内部存储器上) preferExternal (只要有可能就安装到外部存储卡上)   auto (要求系统稳定,然后选择安装位置)

manifest节点下的子节点标签:

1.uses-sdk :用于定义要想正确安装,必须指定最高版本(maxSDKVersion)、最低版本(minSDKVersion)和程序设计的目标版本(targetSDKVersion)。

2.Uses-configuation:指定应用程序支持的每个输入机制的组合,一般不需要包含这个节点,对于需要特殊输入控制的游戏来说,他很有用,可以指定以下输入设备的任意组合:

        android:reqTouchScreen :选择notouchstylus,finger 或者undefined之一,以指定必须的触摸屏输入。

        android:reqKeyboardType :将键盘类型指定为nokeysqwertytwelevekey undefined,中的一种。

        android:reqHardKeyboard :如果应用程序需要硬件键盘,设为true

        android:reqNavigation :指定为nonavdapadtrackballwheelundefined之一,作为必须的导航设备。

        android:reqFiveWayNav : 如果要求输入设备能够向上,向下,向左和向右导航,并且能够单机当前的选项,那么需要设为true.这包括跟踪球和D-pad

3.uses-feature: 指定应用程序需要的每个硬件功能。可以避免将应用程序安装到不包含必要的硬件功能的设备上。

nfc为例:

 <uses-feature android:name="android.hardware.nfc"/>

4.具体完整的硬件列表请看http://developer.android.com/guide/topics/manifest/uses-feature-element.html

5.supports-screens 用于指定程序针对哪些屏幕进行设计和测试。当程序支持某个设备的屏幕是,一般会使用开发人员提供的布局文件中的缩放属性来布局。当在不支持的设备上运行时,系统可能会应用“兼容模式”来显示应用程序,例如像素缩放,创建可扩展的布局来适应所有的屏幕尺寸是一种最佳实践。

其中的属性有

    <supports-screens

            android:smallScreens="true"

分辨率比传统的HVGA小的屏幕,通常为QVGA屏幕

            android:normalScreens="true"

指定典型的手机屏幕,至少是HVGA ,包括 WVGA WQVGA

             android:largeScreens="true"

比普通屏幕大的屏幕,在这里认为大屏幕比手机的显示屏大很多

             android:xlargeScreens="true"

比普通的大屏幕更大的屏幕,通常是平板电脑屏幕的屏幕

 

Honeycomb MR2(API level 13)引入额外的属性,更细致的控制程序布局可以支持屏幕的尺寸。如果程序要支持运行着API level 13以前的平台版版本的设备,一边来说最是把这些额外的属性与早期的属性结合使用

 

         android:requiresSmallestWidthDp="480"

允许用设备无关的像素指定支持的最小屏幕宽度(值屏幕高度与宽度中较小的一个),这个属性用来在Google Play Store上过滤不知他们的屏幕的应用程序,so 使用时应指定为提供可以接受的用户体验。布局所需的最小绝对像素数。

             android:compatibleWidthLimitDp="600"

指定一个上限,超出此值后应用程序可能无扩展。使用该属性可以使系统在屏幕分辨率大于你指定的值的设备上启动兼容模式。

         android:largestWidthLimitDp="720"

指定一个绝度上限,超出这个上限后,程序将无法掐当的扩展。通常,在屏幕分辨率大于你指定的值的设备上,这会导致系统强制应用程序在兼容模式下运行(而用户无法禁用此模式)

  强制应用程序进入兼容模式  被认为是一种糟糕的用户体验,只要可能,就应该让布局能够恰当的扩展,从而在更大的设备上也可以使用。

        />

6.support-gl-texture:用于声明程序能够一种特定的GL纹理格式压缩的文理资源。如果程序能够支持多种纹理压缩格式,就必须使用多个support-gl-texture元素。如要了解更多,可以看http://developer.android.com/guide/topics/manifest/supports-gl-texture-element.html

7.Uses-permission  作为安全模型一部分,它声明了应用程序的需要。安装程序时,设定的权限会全部告诉用户,由他们来决定同意与否,对很多API是必须声明权限,特别是付费和安全问题的服务。

例如:<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

8.permission 应用程序组件可以创建权限来限制对共享应用程序的访问。可定制权限,也可以用系统现有的。

9.instrument instrument 类提供的一个测试框架,用来在测试应用程序运行时测试应用程序组件。

10.application:  Manifest只能包含一个application节点。它使用各种属性来指定应用程序的各个元数据(包含图标,标题,主题等),一般会在开发时设置一个为truedebugable属性来启动测试,但在发布时应该禁用该属性。

11.uses-library :用于指定该应用程序需要的共享库。例如,地图API被打包为一个独立的库,它不是自动的链接。可以指定一个包是必需的还是可选的。指定必需时,在缺少指定的设备上无法安装应用程序;指定为可选时,应用程序在使用库前,必需使用反射机制检查该库是否存在。

Example <uses-library android:name="com.google.android.maps"                           android:required="false"/>

 


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。