文档章节

创建应用程序和Activity之应用程序Manifest文件简介

柳哥
 柳哥
发布于 2014/12/07 11:01
字数 2162
阅读 118
收藏 7

每个Android项目都包含一个Manifest文件(Android Manifest.xml),它存储在项目层次中的最顶层。Manifest可以定义应用程序及其组件需求的结构元数据。它包含了组成应用程序的每一个Activity,Service,Content Provider和Broadcast Receiver的节点,并使用Intent Filter和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。

Manifest文件还可以指定应用程序的元数据(如它的图标,版本号或者主题)以及额外的顶层节点,这些节点可用来指定必需的安全权限和单元测试,以及定义硬件,屏幕和平台支持要求。Manifest文件由一个根manifest标签构成,该标签带有一个被设为项目包的package属性。它通常包含一个xmlns:android属性来提供文件内使用的某些属性。使用versionCode属性可将当前的应用程序版本定义为一个整数,每次版本迭代时,这个数字都会增加。使用versionName可以定义一个显示给用户的公共版本号。通过使用installLocation属性,还可以指定是否允许(或者首选)将应用程序安装到外部存储器(通常是SD卡)而不是内部存储器上。为此,可以将其值指定为preferExternalouto,使用前者时,只要有可能就会把应用程序安装到外部存储器上,后者则要求系统决定。如果不指定installLocation属性,应用程序将安装到内部存储器,而用户将无法把应用程序移动到外部存储器。内部存储器的容量一般是有限的,所以最好是只要有可能,就把应用程序安装到外部存储器。

应用程序Manifest文件详解

下面的XML代码段展示了一个典型的Manifest节点:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.paad.myapp"
            android:versionCode="1"
            android:versionName="0.9 Beta"
            android:installLocation="preferExternal">
            [... manifest nodes ... ]
</manifest>

manifest标签包含了一些节点(node),它们定义了组成应用程序的应用程序组件,安全设置,测试类和需求。下面列出了一些manifest子节点标签,并用一些XML代码段说明了它们是如何使用的。

  • uses-sdk:这个节点用于定义要想正确地运行应用程序,设备上必须具有的最低和最高SDK版本,以及为应用程序设计的目标SDK,这分别通过使用 minSDKVersionmaxSDKVersiontargetSDKVersion属性设置。最低SDK版本指定了包含应用程序中使用的API的最低SDK版本。如果没有指定最低SDK版本,其默认值为1,在这种情况下,如果应用程序试图调用不可用的API,那么就会失败。最高SDK版本用于定义想要支持的最高SDK版本。在Android Market上列出的对运行更高平台版本的设备可用的应用程序中,你的应用程序不会显示最好不要设置最高SDK版本,除非你知道应用程序在更新的平台版本上肯定不能正确工作。目标SDK版本属性用于指定你在开发和测试应用程序时使用的平台。设置目标SDK版本会告诉系统不需要为支持该版本而进行任何前向和后向兼容性更改为了利用最新的平台UI改进,当确认应用程序在最新的平台版本上的表现符合预期后,即使应用程序中没有使用任何新的API,也应该将其目标SDK设为最新的平台版本,这被认为是一种最佳实践。通常,没有必要指定最高SDK版本,也很少有人支持那么做。最高SDK版本用于定义想要支持的最高SDK版本。在运行更高平台版本的设备Android Play Store上,你的应用程序不会显示。运行的平台版本高于Android 2.0.1(API level 6)的设备在安装时将忽略任何最高SDK值

<uses-sdk android:minSdkVersion="6" android:targetSdkVersion"15"/>

:支持的SDK版本不等同于平台版本,也不能从平台版本导出。例如,Android平台的版本4.0支持SDK版本14。要想找出与每个平台对应的SDK版本,可以使用这个表:http://developer.android.com/guide/appendix/api-levels.html

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

    - reqFiveWayNav:如果要求输入设备能够向上,向下,向左和向右导航,并且能够单击当前的选项,那么需要将这个属性指定为true。这包括跟踪球和D-pad。

    - reqHardKeyboard:如果应用程序需要硬件键盘,则将此属性指定为true。

    - reqKeyboardType:用于将键盘类型指定为nokeys,qwerty,twelveley或undefined中的一种。

    - reqNavigation:将属性值指定为nonav,dpad,trackball,wheel或undefined其中之一,作为必需的导航设备。

    - reqTouchScreen:选择notouch,stylus,finger或undefined其中之一,以指定必需的触摸屏输入。

    可以指定多个支持的配置,例如,指定设备具有触摸屏,跟踪球以及一个QUERTY或12键硬件键盘,如下所示:

<uses-configuration android:reqTouchScreen="finger"
                android:reqNavigation="trackball"
                android:reqHardKeyboard="true"
                android:reqKeyboardType="qwerty"/>
<uses-configuration android:reqTouchScreen="finger"
                android:reqNavigation="trackball"
                android:reqHardKeyboard="true"
                android:reqKeyboardType="twelvekey"/>

注意:在指定必需的配置时,如果设备不具有任意一种指定配置,则应用程序将不会安装在该设备上。

  • uses-feature:Android可以在各种各样的硬件平台上运行。可以使用多个uses-feature节点来指定应用程序需要的每个硬件功能。这可以避免将应用程序安装到不包含必要的硬件功能(例如NFC硬件)的设备上。如下所示:

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

        可以要求支持兼容设备上可选的任意硬件。目前,可选的硬件功能包括:

        - 音频:用于要求低延迟音频管道的应用程序。

        - 蓝牙:用于需要蓝牙传输的应用程序。

        - 摄像头:用于要求有摄像头的应用程序。

        - 位置:用于需要基于位置的服务的应用程序,还可以显式指定要求网络或GPS支持。

        - 麦克风:用于需要音频输入的应用程序。

        - NFC:要求NFC(近场通信)支持。

        - 传感器:指定对任何潜在可用的硬件传感器的要求。

        - 电话服务:指定需要一般性的电话服务,或者特定的无线发送方式(GSM或CDMA)。

        - 触摸屏:指定应用程序需要的触摸屏类型。

        - USB:用于需要支持USB host或accessory模式的应用程序。

        - WI-FI:用于需要支持WIFI网络的应用程序。

    随着支持Android的平台种类不断增加,可选硬件的种类也将增加。以下网址给出了uses-feature硬件的完整列表:http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference

为了确保兼容性,对权限的需求暗含着对相应功能的需求。具体来说,对蓝牙,摄像头,位置服务,音频录制和Wi-Fi要求  的访问权限以及与电话服务相关的权限都暗含要有相应的硬件。通过添加一个required属性并把它设为false可以覆盖这些暗含的需求。例如,一个备忘应用程序可以支持语音备忘:

<uses-feature android:name="android.hardware.microphone" 
            android:required="false" />

摄像头硬件还代表着一种特殊的情况。当出于兼容性原因,要求有摄像头的使用权限时,或者添加了一个需要摄像头的使用权限的uses-feature节点时,暗含的要求就是摄像头要支持自动聚焦功能。在合适的地方可以把它指定为可选项

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

也可以使用uses-feature节点指定应用程序所需的OppenGL的最低版本。只需要使用glEsVersion属性,将OpenGL ES版本指定为一个整数即可。高16位代表主版本号低16位代表次版本号,所以版本1.1可以表示为:

<uses-ffeature android:glEsVersion="0x00010001" />

................未完待.....................

© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Android 程序的主要组成部分 和 Manifest 文件

Android 程序的主要组成部分 和 Manifest 文件 Android由松耦合的组件组成,并使用Manifest 绑定在一起;Manifest描述了每个组件和他们之间的交互关系,还用于应用程序的元数据、其硬件和平台...

骑着乌龟的蜗牛
2014/12/09
104
0
深度探索Android应用程序的基本原理

Android应用程序是用Java语言编写的。编译过后的字节码,以及应用程序要求的其他数据和资源文件,通过aapt工具被绑定在一起,称为 Android包,这是一个带.apk后缀的档案文件。这个文件也是用...

鉴客
2011/12/07
3.3K
0
Android SDK中 tools 目录下的工具介绍

Android SDK包含了各种各样的定制工具,简介如下: Android模拟器(Android Emulator ) 它是在你的计算机上运行的一个虚拟移动设备。你可以使用模拟器来在一个实际的Android运行环境下设计,...

红薯
2009/07/03
13.4K
5
Android开发之道(4)程序框架基础

转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant 1、程序框架 对于一个最简单的HelloWorld应用,程序的文件结构如下: 可以看到有5个目录:src源文件目录、gen目录、asset...

晨曦之光
2012/04/24
146
0
安卓(Android)开发基础知识

.aar文件 .aar是一种压缩文件,和.jar类似,不过它可以包含资源文件,例如图片、drawable、xml资源 .jar文件 在软件领域,JAR文件(Java归档,英语:Java ARchive)是一种软件包文件格式,通...

赵青青
2018/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
4分钟前
0
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部