转载请注明出处: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
待补充
待补充
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 区别
待补充