LeoYan Blog

技术分享,生活记录。

0%

Android 清单文件AndroidManifest.xml最全详解

转载请注明出处:www.leoyanblog.com

本文出自 LeoYan 的博客

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYan 即可关注。

一、前言

AndroidManifest.xml 是每个Android程序中必须的文件,它位于整个项目的根目录。我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息。但是对于这个文件,我们真正又了解多少了,还是只是停留在只会简单的配置,而不明白其中的具体含义,以及为什么要这样设置?今天就让我们来详细的学习一下这个文件里各项参数的具体含义,因为它是整个应用的入口,所以有助于我们更加深入的理解Android。

二、概述

  AndroidManifest.xml是Android应用的入口文件,它描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)。   

三、结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xmlversion="1.0"encoding="utf-8"?>
<manifest>

<uses-sdk/>
<uses-configuration/>
<uses-feature/>

<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>

<supports-screens/>

<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</activity>
<activity-alias>
<intent-filter></intent-filter>
<meta-data/>
</activity-alias>
<service>
<intent-filter></intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter></intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<meta-data/>
</provider>
<uses-library/>
</application>
</manifest>

三、详解

1、Manifest

详见: http://www.leoyanblog.com/post/2017/04/30.html

2、Application

待补充

3、Activity

待补充

4、intent-filter

待补充

5、meta-data

待补充

6、activity-alias

待补充

7、Service

待补充

8、Receiver

待补充

9、Provider:属性

待补充

10、uses-library

用户库,可自定义。所有android的包都可以引用

11、supports-screens

1
2
3
4
5
<supports-screens  
android:smallScreens = ["true" | "false"]
android:normalScreens = ["true" | "false"]
android:largeScreens = ["true" | "false"]
android:anyDensity = ["true" | "false"] />

这是在android1.6以后的新特性,支持多屏幕机制

各属性含义:这四个属性,是否支持小屏,是否支持中屏,是否支持大屏,是否支持多种不同密度

12、uses-configuration 与uses-feature性能都差不多

1
2
3
4
5
6
7
8
9
10
11
<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:glEsVersion = "integer"
android:name = "string"
android:required = ["true" | "false"] />

这两者都是在描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。

13、uses-sdk

1
2
3
4
<uses-sdk
android:minSdkVersion = "integer"
android:targetSdkVersion = "integer"
android:maxSdkVersion = "integer"/>

描述应用所需的api level,就是版本,目前是android 2.2 = 8,android2.1 = 7,android1.6 = 4,android1.5=3

在此属性中可以指定支持的最小版本,目标版本以及最大版本

14、instrumentation

1
2
3
4
5
6
7
<instrumentation
android:functionalTest = ["true" | "false"]
android:handleProfiling = ["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string"/>

定义一些用于探测和分析应用性能等等相关的类,可以监控程序。在各个应用程序的组件之前instrumentation类被实例化

android:functionalTest(解释:instrumentation类是否能运行一个功能测试,默认为false)

15、permission、uses-permission、permission-tree 、permission-group 区别

待补充