Android Manifest详解

什么是Android应用程序的构成?

Android应用程序的各个组件又是什么?

各个组件和AndroidManifest之间的关系是什么?

 

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

Android应用程序的组件:

Activity:是应用程序的表示层。应用程序中的每一个UI都是通过Activity类的一个或多个扩展实现的。Activity使用Fragment和视图来布局和显示信息,以及响应用户动作。

Service:应用程序中不可见的工作者。Service组件在运行时没有UI,它们可以更新数据源和Activity、触发通知和广播Intent。

Content Provider:一个可共享的持久数据存储器(谈到持久化存储机制,首先想到的是数据库)。Content Provider用来管理和持久化应用程序数据,通常会与SQL数据库交互。它是应用程序之间共享数据的首选方法。(个人认为:该功能更多的是提供数据访问,即是读数据)

Intent:一个强大的应用程序间的消息传递框架。Intent可以用来启动和停止Activity和Service,在系统范围内或向目标Activity、Service或Broadcast Receiver广播消息,以及请求对特定的一条数据执行操作。

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

Widget:通常会被添加到设备主屏幕的可视化应用程序组件。Widget是Broadcast Receiver的特殊变体。(这一点怎么理解?和Broadcast Receiver的关系是什么?Widget有什么功能?)

Notification:该组件允许向用户发送信息,但却不会过分吸引他们的注意力或者打断他们当前的Activity。这种方式是当应用程序不可见或不活动时吸引用户注意的首选方法。

AndroidManifest.xml文件简介:

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

它包含了组成应用程序的每一个Activity、Service、Content Provider和Broadcast Receiver的节点,并使用Intent Filter和权限来确定这些组件之间以及组件和其他应用程序的交互方式。

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

特别需要注意的是:使用installLocation属性,指定是否允许(或首选)将应用程序安装到外部存储器而不是内部存储器上。

当把应用程序安装到外部存储器上时,如果用于使用USB大容量存储器想计算机复制文件,或如果用户拒绝或取出SD卡,应用程序将立即终止。上述情况将直接影响到用户体验,以下几类应用程序不适合安装到外部存储设备中:

1. 就有Widget、Live Wallpaper和Live Folder的应用程序;

2. 提供不中断服务的应用程序;

3. 输入法引擎;

4. 设备管理器。

内部存储器的容量一般是有限的,所以最好是只要有可能,就把应用程序安装到外部存储器上。

Manifest.xml文件中都有哪些标签或节点node?

该文件由根节点引导:<manifest...>,该node具有的属性值如下:

可用的节点node有以下几种:

 

节点node:uses-sdk,用于定义要想正确运行应用程序,设备上必须具有的最低和最高SDK版本,以及为应用程序设计的目标SDK,分别使用minSDKVersion,maxSDKVersion,targetSDKVersion属性设置。

需要注意的是:支持的SDK版本不等同于平台版本,也不能从平台版本导出(SDK--software development toolkit)。

节点uses-configuration:指定应用程序支持的每个输入机制的组合。一般不需要包含这个节点,不过对于需要特殊输入控制的游戏应用程序来说,非常有用。可以配置的属性值有:reqFiveWayNav,reqHardKeyboard,reqKeyboardType,reqNavigation,reqTouchScreen五种。在指定必需的配置时,如果设备不具有任意一种指定配置,则应用程序将不会安装到设备上。

节点uses-feature:指定应用程序需要的硬件功能,可以避免将应用程序安装到不包含必要的硬件功能(如NFC硬件)的设备上。

1

2

3

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

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

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

包括:音频、蓝牙、摄像头、位置、麦克风、NFC、传感器、电话服务、触摸屏、USB、WIFI等。

节点supports-screens:指定应用程序中布局文件支持的屏幕。

节点uses-permission:声明应用程序需要的权限;在安装应用程序的时候,所有权限都将告诉用户。对很多API和方法调用来说,权限都是必需的,特别是那些需要付费或者有安全问题的服务。

节点permission:应用程序组件创建权限来限制对共享应用程序组件的访问。使用permission标签来创建权限定义。

节点instrumentation:instrumentation类提供一个测试框架,用来在应用程序运行时测试应用程序组件。对于为应用程序创建的每一个测试类,都需要创建一个新的节点。

节点application:一个manifest只能包含一个application节点。该节点使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。application节点还可以包含Activity、Service、Content Provider和Broadcast Receiver节点的容器,它包含的这些节点指定了应用程序组件。其中使用android:name属性可以指定自定义Applicatioin类的名称。

应用程序内的每一个Activity都要求有一个activity标签,并使用android:name属性来指定Activity类的名称。此时必须包含核心的启动Activity和其他所有可以显示的Activity。启动任何一个没有在Manifest中定义的Activity时都会抛出一个运行时异常。

其中service、provider、receiver这些标签和activity标签一样,都标记的是应用程序中对应的Service、Content Provider和Broadcast Receiver类。

其中uses-library用于指定该应用程序需要的共享库。可以指定特定的一个包是必需的还是可选的。指定为必需时,在缺少指定库的设备上将无法安装该应用程序。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值