ACCESSAndroidManifest.xml配置文件详解(转载)

 AndroidManifest.xml配置文件详解 2013-01-05
10:25:23

分类: Android平台

 

ACCESS 1%5D9PGF.gif)

AndroidManifest.xml配置文件对此Android应用开发来说是异常主要之基础知识,本文旨在总结该配置文件中重大的用法,以便日后查阅。下面是一个正式的AndroidManifest.xml文件样例。

 

 

[html] view
plaincopy

 

  1. <?xml version=”1.0″ encoding=”utf-8″?>  
  2.   
  3. <manifest>  
  4.   
  5.     <!– 基本配备 –>  
  6.     <uses-permission />  
  7.     <permission />  
  8.     <permission-tree />  
  9.     <permission-group />  
  10.     <instrumentation />  
  11.     <uses-sdk />  
  12.     <uses-configuration />  
  13.     <uses-feature />  
  14.     <supports-screens />  
  15.     <compatible-screens />  
  16.     <supports-gl-texture />  
  17.       
  18.     <!– 应用配置 –>  
  19.     <application>  
  20.           
  21.         <!– Activity 配置 –>  
  22.         <activity>  
  23.             <intent-filter>  
  24.                 <action />  
  25.                 <category />  
  26.                 <data />  
  27.             </intent-filter>  
  28.             <meta-data />  
  29.         </activity>  
  30.           
  31.         <activity-alias>  
  32.             <intent-filter> . . . </intent-filter>  
  33.             <meta-data />  
  34.         </activity-alias>  
  35.           
  36.         <!– Service 配置 –>  
  37.         <service>  
  38.             <intent-filter> . . . </intent-filter>  
  39.             <meta-data/>  
  40.         </service>  
  41.           
  42.         <!– Receiver 配置 –>  
  43.         <receiver>  
  44.             <intent-filter> . . . </intent-filter>  
  45.             <meta-data />  
  46.         </receiver>  
  47.           
  48.         <!– Provider 配置 –>  
  49.         <provider>  
  50.             <grant-uri-permission />  
  51.             <meta-data />  
  52.         </provider>  
  53.           
  54.         <!– 所欲类库配置 –>  
  55.         <uses-library />  
  56.   
  57.     </application>  
  58.   
  59. </manifest>  

由以上示例代码中,我们可以看出Android配置文件采用XML作为描述语言,每个XML标签都不同的意思,大部分之布局参数都坐落标签的性质被,下面我们就以上述配置文件样例中的先后顺序来学学Android配置文件被根本要素与标签的用法。

<manifest>

AndroidManifest.xml配置文件的根元素,必须包含一个<application>元素而指定xlmns:android和package属性。xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android”;而package是标准的应用包名,也是一个应用进程的默认名称,以本书微博应用实例中的包名为例,即“com.app.demos”就是一个标准的Java应用包名,我们为了避免命名空间的冲突,一般会以应用的域名来作为包名。当然还有一些其他常用的属性需要注意一下,比如android:versionCode是给设备程序识别版本用的,必须是一个整数值代表app更新过多少次;而android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的。&lt;manifest&gt;标签语法范例如下。

<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-permission>

为了保证Android应用的安全性,应用框架制定了比较严厉的权能系统,一个运得声明了不利的权限才堪应用相应的效应,例如我们用让以会访问网络就是得配备“android.permission.INTERNET”,而如只要运设备的照相机功能,则用设置“android.permission.CAMERA”等。<uses-permission>就是我们最常使用的权柄设定标签,我们由此设定android:name属性来声称相应的权能名,比如当微博应用实例中,我们就是是冲使用之所待功能声称了对应之权柄,相关代码如下。

<manifest …>
… …
    <!– 网络有关力量 –>
    <uses-permission android:name=”android.permission.INTERNET”
/>
    <uses-permission
android:name=”android.permission.ACCESS_NETWORK_STATE” />
    <uses-permission
android:name=”android.permission.ACCESS_COARSE_LOCATION” />
    <uses-permission
android:name=”android.permission.ACCESS_FINE_LOCATION” />
    <!– 读取电话状态 –>
    <uses-permission
android:name=”android.permission.READ_PHONE_STATE”/>
    <!– 通知有关力量 –>
    <uses-permission android:name=”android.permission.VIBRATE”
/>
… …
</manifest>

<permission>

权限声明标签,定义了供给<uses-permission>使用的现实权限,通常情况下我们无需呢投机的应用程序声明某个权限,除非需要给任何应用程序提供可调用的代码或者数额,这个时节你才用采用<permission>标签。该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等性,另外还好和<permission-group>以及<permission-tree>配合以来布局更产生层次的、更发出对权限系统。<permission>标签语法范例如下。

<permission android:description=”string resource”
    android:icon=”drawable resource”
    android:label=”string resource”
    android:name=”string”
    android:permissionGroup=”string”
    android:protectionLevel=[“normal” | “dangerous” | “signature” |
“signatureOrSystem”] />

<instrumentation>

用来声明Instrumentation测试接近来监控Android应用之一言一行并采用至相关的功用测试着,其中于根本的性质有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。另外,我们需要注意的是Instrumentation对象是于应用程序的组件之前被实例化的,这点于社测试逻辑的早晚需要吃考虑到。<instrumentation>标签语法范例如下。

<instrumentation android:functionalTest=[“true” | “false”]
    android:handleProfiling=[“true” | “false”]
    android:icon=”drawable resource”
    android:label=”string resource”
    android:name=”string”
    android:targetPackage=”string” />

<uses-sdk>

用来指定Android应用被所急需利用的SDK的本,比如我们的运得运行于Android
2.0上述版本的系SDK之上,那么就是需指定应用支撑太小之SDK版本数为5;当然,每个SDK版本都见面发指定的整数值与的相应,比如我们尽常用之Android
2.2.x之版本数是8。当然,除了可指定最低版本之外,<uses-sdk>标签还可以指定最高版本及对象版本,语法范例如下。

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

<uses-configuration>与<uses-feature>

当时半只标签还是用于描述下所要之硬件及软件特性,以便防止以在并未这些特点的设备上安。<uses-configuration>标签中,比如有些设备带有D-pad或者Trackball这些特别硬件,那么android:reqFiveWayNav属性就需要安装也true;而若有一对配备带有硬件键盘,android:reqHardKeyboard也欲吃装也true。另外,如果设备用支持蓝牙,我们得以使<uses-feature
android:name=”android.hardware.bluetooth”
/>来支持是功效。这简单单标签主要用于支持有非常之装置中的用,两个标签的语法范例分别如下。

<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” />

<uses-library>

用以指定Android应用可使的用户库,除了系统自带的android.app、android.content、android.view和android.widget这些默认类库之外,有些应用或还需有的其它的Java类库作为支持,这种状态下我们尽管可以运用<uses-library>标签为ClassLoader加载其类库供Android应用运行时用。<uses-library>标签的用法很粗略,以下是语法范例。

<uses-library android:name=”string”
    android:required=[“true” | “false”] />

小贴士:
当运行Java程序时,首先运行JVM(Java虚拟机),然后重新管Java类加载到JVM里头运行,负责加载Java类的立有的即于做ClassLoader。当然,ClassLoader是由于多独片构成的,每个片还担负相应的加载工作。当运行一个次的时刻,JVM启动,运行BootstrapClassLoader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此刻吃加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是是一个Java程序太基本的加载流程。

<supports-screens>

对此部分使用或游戏吧,只能支持某些屏幕大小的装备或者在好几设备遭遇之机能比较好,我们不怕见面利用<supports-screens>标签来指定支持的屏幕特征。其中于根本的性质包括:屏幕自适应属性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持性,按屏幕渲染图像属性android:anyDensity以及最小屏幕宽度属性android:requiresSmallestWidthDp等。<supports-screens>标签的语法范例如下。

<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”/>

<application>

使配置的根元素,位于<manifest>下层,包含有和使用有关安排的要素,其属性可以当子元素的默认属性,常用之习性包括:应用名android:label,应用图标android:icon,应用主题android:theme等。当然,<application>标签还提供了别增长的部署属性,由于篇幅由即无列举了,大家可以打开Android
SDK文档来更读书,以下是语法范例。

<application android:allowTaskReparenting=[“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: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:taskAffinity=”string”
    android:theme=”resource or theme” >
… …
</application>

<activity>

Activity活动组件(即界面控制器组件)的声明标签,Android应用中之各国一个Activity都必以AndroidManifest.xml配置文件中宣称,否则系统以不识别也未履行该Activity。<activity>标签中常用之属性有:Activity对应类名android:name,对诺主题android:theme,加载模式android:launchMode(详见2.1.3.4节),键盘交互模式android:windowSoftInputMode等,其他的特性用法大家可以参考Android
SDK文档学习。另外,<activity>标签还得涵盖用于信息过滤的<intent-filter>元素,当然还有可用于储存预定义数据的<meta-data>元素,以下是<activity>标签的语法范例。

<activity android:allowTaskReparenting=[“true” | “false”]
    android:alwaysRetainTaskState=[“true” | “false”]
    android:clearTaskOnLaunch=[“true” | “false”]
    android:configChanges=[“mcc”, “mnc”, “locale”,
        “touchscreen”, “keyboard”, “keyboardHidden”,
        “navigation”, “orientation”, “screenLayout”,
        “fontScale”, “uiMode”]
    android:enabled=[“true” | “false”]
    android:excludeFromRecents=[“true” | “false”]
    android:exported=[“true” | “false”]
    android:finishOnTaskLaunch=[“true” | “false”]
    android:hardwareAccelerated=[“true” | “false”]
    android:icon=”drawable resource”
    android:label=”string resource”
    android:launchMode=[“multiple” | “singleTop” | “singleTask” |
“singleInstance”]
    android:multiprocess=[“true” | “false”]
    android:name=”string”
    android:noHistory=[“true” | “false”]  
    android:permission=”string”
    android:process=”string”
    android:screenOrientation=[“unspecified” | “user” | “behind” |
        “landscape” | “portrait” |
        “sensor” | “nosensor”]
    android:stateNotNeeded=[“true” | “false”]
    android:taskAffinity=”string”
    android:theme=”resource or theme”
    android:windowSoftInputMode=[“stateUnspecified”,
        “stateUnchanged”, “stateHidden”,
        “stateAlwaysHidden”, “stateVisible”,
        “stateAlwaysVisible”, “adjustUnspecified”,
        “adjustResize”, “adjustPan”] >   
… …
</activity>

<activity-alias>

Activity组件别名的声明标签,简单的话即使是Activity的快捷方式,属性android:targetActivity代表的就是是彼系的Activity名,当然不能不是前方早已宣称了之Activity。除此之外,其他比较广泛的习性有:Activity别名叫名称android:name,别名开关android:enabled,权限控制android:permission等。另外,我们还得注意的是,Activity别名也是一个独自的Activity,可以享好之<intent-filter>和<meta-data>元素,其语法范例如下。

<activity-alias android:enabled=[“true” | “false”]
    android:exported=[“true” | “false”]
    android:icon=”drawable resource”
    android:label=”string resource”
    android:name=”string”
    android:permission=”string”
    android:targetActivity=”string” >
… …
</activity-alias>

<intent-filter>与<action>、<category>、<data>

<intent-filter>用于Intent消息过滤器的声明,在面前的2.1.3.2节省吃我们早就对Android应用框架中的Intent消息作了比详细的介绍,我们询问及Intent消息于Android应用体系的话,是好重大之“粘合剂”,<intent-filter>元素得以放在<activity>、<activity-alias>、<service>和<receiver>元素标签中,来分可用于拍卖消息之Activity控制器、Service服务及播发接收器Broadcast
Receiver。另外,我们尚知道Intent消息还担保含有名称、动作、数据、类别等几乎独至关重要性质。这点以及拖欠标签的写法也发生一定之涉,比如<intent-filter>中得带有有<action>元素,即用于描述具体信息之名目;<category>标签则用于表示能够处理消息组件的色,即该Action所称的种;而<data>元素虽然用来描述消息需要处理的数量格式,我们还还可下正则表达式来限制数量来源。当然,这些因素和标签的具体用法我们还索要逐步学,下面是专业<intent-filter>元素标签的语法范例。

<intent-filter android:icon=”drawable resource”
    android:label=”string resource”
    android:priority=”integer” >
    <action android:name=”string” />
    <category android:name=”string” />
    <data android:host=”string”
        android:mimeType=”string”
        android:path=”string”
        android:pathPattern=”string”
        android:pathPrefix=”string”
        android:port=”string”
        android:scheme=”string” />
</intent-filter>

<meta-data>

用以存储预定义数据,和<intent-filter>类似,<meta-data>也得以置身<activity>、<activity-alias>、<service>和<receiver>这四单要素标签中。Meta数据一般会因为键值对之样式出现,个数没有限制,而这些数量都用为放到一个Bundle对象被,程序中我们尽管可使用ActivityInfo、ServiceInfo甚至ApplicationInfo对象的metaData属性中读取。假设我们当一个Activity中定义了一个<meta-data>元素,相关示例用法如下。

<activity…>
    <meta-data android:name=”testData” android:value=”Test Meta
Data”></meta-data>
</activity>

ActivityInfo info = this.getPackageManager()
    .getActivityInfo(getComponentName(),
PackageManager.GET_META_DATA);
String testData = info.metaData.getString(“testData”);
System.out.println(“testData:” + testData);

<service>

Service服务组件的宣示标签,用于定义跟叙一个切实可行的Android服务,主要性能有:Service服务类名android:name,服务图标android:icon,服务描述android:label以及服务开关android:enabled等。关于Service服务组件的定义以及用法请参考2.1.4.2节的情,以下是<service>标签的语法范例。

<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>

<receiver>

Boardcast
Receiver广播接收器组件的扬言标签,用于定义及叙一个切实的Android广播接收器,其首要性能和<service>标签有些接近:Boardcast
Receiver接收器类名android:name,接收器图标android:icon,接收器描述android:label以及接收器开关android:enabled等。关于Boardcast
Receiver广播接收器组件的定义与用法请参见2.1.4.3省之始末,以下是<receiver>标签的语法范例。

<receiver 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” >
… …
</receiver>

<provider>与<grant-uri-permission>

除Activity、Service和Boardcast
Receiver之外的另外一个“四不行组件”,也尽管是Content
Provider内容提供者的声明标签。关于内容提供者组件的概念与用法请参见2.1.4.4节底情,不再赘述。<provider>标签除了和其它零件相同之android:name、android:icon和android:label等基础属性之外,还提供了用于支持该力量的特性质,如:内容提供者标识名称android:authorities,对点名URI授予权限标识android:grantUriPermission以及实际的宣读、写权限,即android:readPermission和android:writePermission等。当然,这些性之现实用法我们尚待慢慢学,以下是<provider>标签的语法范例。

<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>

相关文章