AndroidManifest.xml主要包含以下功能:
-
说明application的java 数据包,数据包名是application的唯一标识;
-
描述application的component;
-
说明application的component运行在哪个process下;
-
声明application所必须具备的权限,用以访问受保护的部分API,以及与其他application的交互;
-
声明application其他的必备权限,用以component之间的交互;
-
列举application运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;
-
声明application所需要的AndroidAPI的最低版本级别,例如1.0,1.1,1.5等;
-
列举application所需要链接的库;
熟悉AndroidManifest.xml文件的结构及元素
-
元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出现一次。如果一个元素包含有其他子元素,必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。
-
属性:按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素<manifest>的属性,所有其他元素属性的名字都是以android:前缀的;
-
定义类名:所有的元素名都对应其在SDK中的类名,如果你自己定义类名,必须包含类的数据包名,如果类与application处于同一数据包中,可以直接简写为“.”;
-
多数值项:如果某个元素有超过一个数值,这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中;
-
资源项说明:当需要引用某个资源时,其采用如下格式:@[package :]type :name 。 例如 <activity android:icon=”@drawable/icon ” . . . >
-
字符串值:类似于其他语言,如果字符中包含有字符“\”,则必须使用转义字符“\\”;
<?xml version="1.0" encoding="utf-8"?> <!-- xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android” package: 标准的应用包名,也是一个应用进程的默认名称 android:versionCode是给设备程序识别版本用的,必须是一个整数值代表apk更新过多少次 android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的 android:installLocation=""表示应用程序安装的位置 auto:自动寻找安装位置,ROM或者SDCard,默认属性 internalOnly: 仅仅只安装在ROM上 preferExternal:直接安装到SDCard --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yxkong.intent" android:versionCode="1" android:versionName="1.0" android:installLocation="auto" android:sharedUserId="" > <!-- 基本配置 --> <!-- uses-permission 请求你的package正常运作所需赋予的安全许可。一个manifest能包含零个或更多此元素 为了保证Android应用的安全性,应用框架制定了比较严格的权限系统,一个应用必须声明了正确的权限才可以使用相应的功能 --> <!-- 访问网络相关 --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 读取电话状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 通知相关功能 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 声明了安全许可来限制哪些程序能使用你的package中的组件和功能。一个manifest能包含零个或更多此元素 权限声明标签,定义了供给<uses-permission>使用的具体权限,通常情况下我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候你才需要使用<permission>标签。 该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等属性,另外还可以和<permission-group>以及<permission-tree>配合使用来构造更有层次的、更有针对性权限系统。 --> <permission android:name="aa"></permission> <permission-tree /> <permission-group android:name="permissionGroup" ></permission-group> <!-- 声明了用来测试此package或其他package指令组件的代码。一个manifest能包含零个或更多此元素 --> <instrumentation ></instrumentation> <!--uses-feature uses-configuration 这两个标签都是用于描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装 <uses-configuration>标签中, 比如有些设备带有D-pad或者Trackball这些特殊硬件,那么android:reqFiveWayNav属性就需要设置为true; 而如果有一些设备带有硬件键盘,android:reqHardKeyboard也需要被设置为true。 另外,如果设备需要支持蓝牙,我们可以使用<uses-feature android:name="android.hardware.bluetooth" />来支持这个功能。 这两个标签主要用于支持一些特殊的设备中的应用 --> <uses-configuration /> <uses-feature /> <!-- 对于一些应用或者游戏来说,只能支持某些屏幕大小的设备或者在某些设备中的效果比较好,我们就会使用<supports-screens>标签来指定支持的屏幕特征。 其中比较重要的属性包括:屏幕自适应属性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持属性, 按屏幕渲染图像属性android:anyDensity以及最小屏幕宽度属性android:requiresSmallestWidthDp等 --> <supports-screens /> <compatible-screens ></compatible-screens> <!-- 用于指定Android应用中所需要使用的SDK的版本,比如我们的应用必须运行于Android 2.2以上版本的系统SDK之上,那么就需要指定应用支持最小的SDK版本数为8; 当然,每个SDK版本都会有指定的整数值与之对应,比如我们最常用的Android 4.2.x的版本数是17。当然,除了可以指定最低版本之外,<uses-sdk>标签还可以指定最高版本和目标版本 --> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <!-- 用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中,其中比较重要的属性有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。 另外,我们需要注意的是Instrumentation对象是在应用程序的组件之前被实例化的,这点在组织测试逻辑的时候需要被考虑到 --> <instrumentation android:name="aab" android:targetPackage="com.yxkong"></instrumentation> <!-- 应用配置 --> <!--application 包含所有与应用有关配置的元素,其属性可以作为子元素的默认属性 android:allowBackup:是否允许备份 android:icon:应用图标 android:label:表示应用的文字说明 android:theme:应用主题 --> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <!-- Activity配置 Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。 常用的属性有:Activity 对应类名android:name, 对应组件显示名称android:label, 对应主题android:theme, 加载模式android:launchMode, 键盘交互模式android:windowSoftInputMode等 --> <activity android:name="com.yxkong.intent.MainActivity" android:label="@string/app_name" > <!-- 用于消息过滤 <intent-filter>用于Intent消息过滤器的声明,我们了解到Intent消息对于Android应用系统来说,是非常重要的“粘合剂”, <intent-filter>元素可以放在<activity>、<activity-alias>、<service>和<receiver>元素标签中,来区分可用于处理消息的Activity控制器、Service服务和广播接收器Broadcast Receiver。 另外,我们还知道Intent消息还包含有名称、动作、数据、类别等几个重要属性。这点与该标签的写法也有一定的关系, 比如<intent-filter>中必须包含有<action>元素,即用于描述具体消息的名称; <category>标签则用于表示能处理消息组件的类别,即该Action所符合的类别; 而<data>元素则用于描述消息需要处理的数据格式,我们甚至还可以使用正则表达式来限定数据来源。当然,这些元素和标签的具体用法我们还需要慢慢学习, --> <intent-filter> <!--设置打开app,就启动的activity,一个项目中只能配置一个--> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 用于存储预定义数据,和<intent-filter>类似, <meta-data>也可以放在<activity>、<activity-alias>、<service>和<receiver>这四个元素标签中。 Meta数据一般会以键值对的形式出现,个数没有限制,而这些数据都将被放到一个Bundle对象中, 程序中我们则可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo对象的metaData属性中读取。 --> <meta-data /> </activity> <!-- Activity组件别名的声明标签,简单来说就是Activity的快捷方式,属性android:targetActivity表示的就是其相关的Activity名,当然必须是前面已经声明过的Activity。 --> <activity-alias /> <!-- Service配置 Service服务组件的声明标签,用于定义与描述一个具体的Android服务, 主要属性有:Service服务类名android:name, 服务图标android:icon, 服务描述android:label 服务开关android:enabled等 --> <service android:name=""> <intent-filter ></intent-filter> <meta-data /> </service> <!-- Receiver配置 Boardcast Receiver广播接收器组件的声明标签,用于定义与描述一个具体的Android广播接收器, 其主要属性和<service>标签有些类似:Boardcast Receiver接收器类名android:name,接收器图标android:icon,接收器描述android:label以及接收器开关android:enabled等 --> <receiver android:name="" ></receiver> <!-- Provider配置 --> <provider android:name="" > <grant-uri-permission /> <meta-data /> </provider> <!-- 所需类库配置 用于指定Android应用可使用的用户库 通过该标签让ClassLoader加载其类库供Android应用运行时用 --> <uses-library /> </application> </manifest>
文章评论