AndroidManifest.xml文件细节整理


请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

AndroidManifest文件使用开发Android程序时用以描述程序整体功能细节的架构文件,它使用XML文件进行描述。

<?xml version="1.0" encoding="utf-8"?>
<manifest>  

    <!-- 基本配置 -->  
    <uses-permission />  
    <permission />  
    <permission-tree />  
    <permission-group />  
    <instrumentation />  
    <uses-sdk />  
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <!-- 应用配置 -->  
    <application>  

        <!-- Activity 配置 -->  
        <activity>  
            <intent-filter>  
                <action />  
                <category />  
                <data />  
            </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 配置 -->  
        <receiver>  
            <intent-filter>
            </intent-filter>  
            <meta-data />  
        </receiver>  

        <!-- Provider 配置 -->  
        <provider>  
            <grant-uri-permission />  
            <meta-data />  
        </provider>  

        <!-- 所需类库配置 -->  
        <uses-library />  

    </application>  

</manifest>

下面的列表将会逐个分析XML内的各个element及其attribute的具体含义。

manifest

AndroidManifest.xml配置文件的根元素,必须包含一个元素并且指定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”这样的。标签语法范例如下。

<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”等。就是我们最经常使用的权限设定标签,我们通过设定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

权限声明标签,定义了供给使用的具体权限,通常情况下我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候你才需要使用标签。该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等属性,另外还可以和以及配合使用来构造更有层次的、更有针对性权限系统。标签语法范例如下。

<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"] 
<permission/>

instrumentation

用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中,其中比较重要的属性有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。另外,我们需要注意的是Instrumentation对象是在应用程序的组件之前被实例化的,这点在组织测试逻辑的时候需要被考虑到。标签语法范例如下。

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

uses-sdk

用于指定Android应用中所需要使用的SDK的版本,比如我们的应用必须运行于Android 2.0以上版本的系统SDK之上,那么就需要指定应用支持最小的SDK版本数为5;当然,每个SDK版本都会有指定的整数值与之对应,比如我们最常用的Android 2.2.x的版本数是8。当然,除了可以指定最低版本之外,标签还可以指定最高版本和目标版本,语法范例如下。

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

uses-configuration

这两个标签都是用于描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。标签中,比如有些设备带有D-pad或者Trackball这些特殊硬件,那么android:reqFiveWayNav属性就需要设置为true;而如果有一些设备带有硬件键盘,android:reqHardKeyboard也需要被设置为true。另外,如果设备需要支持蓝牙,我们可以使用来支持这个功能。这两个标签主要用于支持一些特殊的设备中的应用

参考文档:

http://blog.csdn.net/bigconvience/article/details/30063995
http://demo.netfoucs.com/wen_demo/article/details/38454473