200 likes | 439 Views
2.2 Android Manifest.XML 简介. AndroidManifest.xml 的文件结构. 每个 Android 的 application 都必须包含一个 AndroidManifest.xml ,且文件名是固定的,不能修改。应用程序需要通过它向 Android 系统提供一些必需的信息,且需要在 application 运行前提供给系统,如下图所示:. Android Manifest.xml 的功能介绍. Android Manifest.xml 主要包含以下功能:
E N D
AndroidManifest.xml的文件结构 • 每个Android的application都必须包含一个AndroidManifest.xml,且文件名是固定的,不能修改。应用程序需要通过它向Android系统提供一些必需的信息,且需要在application运行前提供给系统,如下图所示:
Android Manifest.xml的功能介绍 • Android Manifest.xml主要包含以下功能: • 说明application的java 数据包,数据包名是application的唯一标识; • 描述application的component; • 说明application的component运行在哪个process下; • 声明application所必须具备的权限,用以访问受保护的部分API,以及与其他application的交互; • 声明application其他的必备权限,用以component之间的交互; • 列举application运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除; • 声明application所需要的Android API的最低版本级别,比如1.0,1.1,1.5; • 列举application所需要链接的库;
<?xml version="1.0" encoding="utf-8"?> <manifest> //根节点,描述了package中所有的内容 <uses-permission /> //请求你的package正常运作所需赋予的安全许可。一个manifest能包含零个或更多此元素 <permission /> //声明了安全许可来限制哪些程序能使用你的package中的组件和功能。一个manifest能包含零个或更多此元素 <permission-tree /> <permission-group /> <instrumentation /> //声明了用来测试此package或其他package指令组件的代码。一个manifest能包含零个或更多此元素 <uses-sdk /> //指定当前应用程序兼容的最低sdk版本号 <application> //包含package中application级别组件声明的根节点。此元素也可包含application中全局和默认的属性,如标签,icon,主题,必要的权限,等等。一个manifest能包含零个或一个此元素(不允许多余一个) <activity> //用来与用户交互的主要工具。当用户打开一个应用程序的初始页面时一个activity,大部分被使用到的其他页面也由不同的activity所实现并声明在另外的activity标记中。 <intent-filter> //声明了指定的一组组件支持的Intent值 <action /> <category /> <data /> <type/> <schema/> <authority/> <path/> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> //Service是能在后台运行任意时间的组件 <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> //IntentReceiver能使你的application获得数据的改变或者发生的操作,即使它当前不在运行 <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> //ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件 <grant-uri-permission /> <meta-data /> </provider> <uses-library /> <uses-configuration /> </application> </manifest> 主要结构及规则
Manifest 语法(SYNTAX): <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string“ android:sharedUserId="string“ android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" |"preferExternal"]> . . . </manifest>
uses-sdk 语法(SYNTAX): <uses-sdkandroid:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer"/> 属性(ATTRIBUTES): android:minSdkVersion 一个整数,它指定了应用程序运行所需要的最小的API级别。如果Android系统的API级别被该应用程序清单中的这个属性值小,那么系统就阻止安装该应用程序,应该始终声明这个属性。 android:targetSdkVersiion 一个整数,它指定了应用程序要运行的目标的API级别。如果没有设置,它的默认值等于给定的minSdkVersion属性值。 android:maxSdkVersion 一个整数,表明该应用要运行的最大的API Level。
uses-configuration 语法(SYNTAX): <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"] /> 说明(DESCRIPTION): 这个属性用于指定该应用程序所需要的硬件和软件功能。例如,应用程序可以用这个元素指定它所需要的物理键盘或特殊的导航设备,如轨迹球。使用这个规范可以避免把应用程序安装在那些不支持其不能工作的设备上。
uses-feature 语法(SYNTAX): <uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer"/> 说明(DESCRIPTION): 这个元素用于声明一个单独的被应用程序使用的硬件或软件功能。 属性(ATTRIBUTES): android:name 这个属性用描述性的字符串,指定该应用程序所使用的软/硬件功能。 android:required 这个属性用一个布尔值来指定应用程序是否需要在android:name属性中所指定的功能。 android:qlEsVersion 这个属性用于声明应用程序所需要的OpenGL ES的版本。
supports-screens 语法(SYNTAX): <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"/> 说明(DESCRIPTION): 这个元素用于指定应用程序所支持的屏幕尺寸,并针对比应用程序所支持的屏幕还要大屏幕,启用屏幕兼容模式。在应用程序中使用这个元素指定应用程序所支持的屏幕尺寸是至关重要的。
supports-gl-texture 语法(SYNTAX): <supports-gl-textureandroid:name="string"/> 说明(DESCRIPTION): 这个元素用于声明一个应用程序所支持的GL纹理压缩格式。 一个应用程序支持一种纹理压缩格式,如果应用程序提供了用该格式压缩纹理资源的能力,那么一旦应用程序被安装在设备上,应用程序就能够从.apk文件的内部提供本地的压缩资源,或者在运行时从服务器上下载它们。 每个<supports-gl-texture>元素用android:name属性明确的声明一个所支持的纹理压缩格式。如果应用程序支持多种纹理压缩格式,可以声明多个<supports-gl-texture>元素,例如: <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> <supports-gl-texture android:name="GL_OES_compressed_paletted _texture" />
uses-permission 语法(SYNTAX): <uses-permission android:name="string"/> 说明(DESCRIPTION): 这个属性用于给应用程序授予正确的操作的所必须的权限。这些权限是在应用程序安装时被授予的,而不是在运行时授予的。 属性(ATTRIBUTES): android:name 这个属性用于定义权限的名称。它能够是由该应用程序用<permission>元素定义的一个权限,也可以是由另外一个应用程序所定义的权限,还可以是有系统定义的标准的权限,如:android:permission.CAMERA或android:permission.READ_CONTACTS等。
permission 说明(DESCRIPTION): 定义一个用来控制其他包对本包内的组件访问的全乡对象。这将产生一个新的结构体,应用组件在使用android:permission时指定权限名称方可生效。 属性(ATTRIBUTES): android:description一个对权限的长文本描述,必须是一个字符串的引用; android:icon当这个权限要在某写地方显示时,可以显示这个图标 android:label指定一个清晰易读的名字 android:name权限名称,使用权限时需要使用这个名字。 android:permissionGroup指定权限所在的组,这个组必须先建立 android:protectionLevel权限使用的级别,这是一个枚举值,使用字符串normal,dangerous,signature,signatureOrSystem
application 说明(DESCRIPTION): 应用组件的根节点,包含这个包中所有的应用组件,如果组件没有在这个节点下注册,那么系统在运行时将无法找到这个应用组件。这个节点设置的属性可以为它下面的所有子节点设立默认属性,如icon,label,theme等等 属性(ATTRIBUTES): android:allowClearUserData,指定应用是否可以清除应用数据,默认是true,不想清除数据的话明确填写false。 android:persistent请求系统保持应用一直运行,bool值 android:process指定进程名,如果进程名以“:”开头,则该应用运行在一个新的单独的进程中,如果直接以小写字符开始,表示可以多个应用共用一个进程,节约资源开销。 android:taskAffinity指定一个任务名称,可以使多个应用组件作为一个任务运行。默认整个Application的应用都是一个任务。
activity 语法(SYNTAX): <activity android:name=".HelloWorldActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 说明(DESCRIPTION): 这个标签用来描述一个Activity类应用组件,包含其子类应用组件。它可以带有intentFilter子节点。用来在隐式Intent中过滤。 属性(ATTRIBUTES): android:clearTaskOnLaunch,对于保存在栈中的任务,当再次进入时,是否从main Activity开始运行。 android:multiprocess设置这个activity是否可以有多个实例运行在不同的进程中。 android:finishOnTaskLaunch当这个activity所处的任务重新开始时,指定这个activity是结束运行. android:excludeFromRecents指示这个activity可以放进最近运行的一个全局资源中. android:exported指示这个activity是否可以被其他用户的任务调用.当没有指定intentFilter时默认是false,指定了IntentFilter,默认是true;
Service 语法(SYNTAX): <service android:enabled=["true" | "false"] android:exported[="true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string"> </service> service与activity同级,与activity不同的是,它不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。比如听音乐,网络下载数据等,都是由service运行的 service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法 service与activity间的通信 Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),Activity与service间的通信主要用IBinder负责。
Provider 语法(SYNTAX): <provider android:authorities="list" android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" > </provider> 说明(DESCRIPTION): Provider标签用来指定应用程序中的每一个Content Provider. Content Provider用来管理数据库访问和共享。
receiver 语法(SYNTAX): <receiverandroid:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string"> . . . </receiver> 说明(DESCRIPTION): 这个元素用于声明一个广播接收器(一个BroadcastReceiver子类),作为应用程序的组件之一。广播接收器能够让应用程序接收那些由系统或其他应用程序发出的广播Intent对象,即使是在该应用程序的其他组件没有运行的时候,也能够接收来自系统或其他应用程序的广播消息。