android开发学习笔记(一)-Manifest文件
一:概述
所有的app都要在根目录下AndroidManifest.xml文件,这个文件显示了app告诉android系统的基本信息。在app代码运行之前,android系统从这个文件获取基本信息
功能:
- 给app的java包起名作为这个app的唯一标识符
- 声明app中要使用的组件
- 决定哪些进程持有app组件
- 确定app需要的用户权限
- 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
- 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
- 声明app需要的最低级别
- 声明app需要链接的API函数库(除了android API框架)
二:Manifest文件的结构
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <manifest> 4 5 <uses-permission /> 6 <permission /> 7 <permission-tree /> 8 <permission-group /> 9 <instrumentation /> 10 <uses-sdk /> 11 <uses-configuration /> 12 <uses-feature /> 13 <supports-screens /> 14 <compatible-screens /> 15 <supports-gl-texture /> 16 17 <application> 18 19 <activity> 20 <intent-filter> 21 <action /> 22 <category /> 23 <data /> 24 </intent-filter> 25 <meta-data /> 26 </activity> 27 28 <activity-alias> 29 <intent-filter> . . . </intent-filter> 30 <meta-data /> 31 </activity-alias> 32 33 <service> 34 <intent-filter> . . . </intent-filter> 35 <meta-data/> 36 </service> 37 38 <receiver> 39 <intent-filter> . . . </intent-filter> 40 <meta-data /> 41 </receiver> 42 43 <provider> 44 <grant-uri-permission /> 45 <meta-data /> 46 <path-permission /> 47 </provider> 48 49 <uses-library /> 50 51 </application> 52 53 </manifest>
三:Manifest文件惯例
element:
每一个Manifest文件都必须要出现一次<manifest>和<application>元素,其他元素根据功能需要决定出现一次、多次或一次也不出现。
所有值通过属性来设置,不会作为元素内的字符数据。
同一级别的元素是乱序排列的。( <activity-alias> 元素是个例外,它必须跟在它所引用的<activity> 后面。)
Attribute:
正式意义上来说,每个元素的属性都是可选择的,但是在完成某个功能的前提下,某些元素的属性值必须要说明的,使用文档作为指引。对于真正可选的属性,它会提及一个默认值或讲述在规范缺少的时候发生什么。
除了根元素<manifest>的属性值外,其他所有属性值都必须以前缀android:
开始,因为前缀是一般性概念,所以当通过名称引用属性时文档通常会忽略它
Declaring class names:
一些元素相当于java对象,包括<application>以及四大组件<activity>、<service>、<receiver>、<provider>
如果你想定义一个组件类的子类时,这个子类的声明通过name属性,name属性包括了完整包名
1 <manifest . . . > 2 <application . . . > 3 <service android:name="com.example.project.SecretService" . . . > 4 . . . 5 </service> 6 . . . 7 </application> 8 </manifest>
但是,作为简写。如果字符串的第一个字符是".",字符串将被添加到app的包名的尾部
1 <manifest package="com.example.project" . . . > 2 <application . . . > 3 <service android:name=".SecretService" . . . > 4 . . . 5 </service> 6 . . . 7 </application> 8 </manifest>
当启动一个组件时,android创建一个子类的对象,如果子类未指定,它会创建一个基类
Multiple values:
如果指定的值多于一个,通常要将元素重复再指定值,而不是在一个元素单元内列出多个值
<intent-filter . . . > <action android:name="android.intent.action.EDIT" /> <action android:name="android.intent.action.INSERT" /> <action android:name="android.intent.action.DELETE" /> . . . </intent-filter>
Resource values:
一些资源有显示给用户的值,例如,activity的一个label或者icon,这个属性值应该被本地化,因此被设置成来自同一个资源或主题。
资源值用以下格式来表达
1 @[package:]type:name
package:当资源在app的同一个包里时,package值可缺省
type:资源的类型,例如string、drawable
name:是一种用来指定特殊资源的名字。
1 <activity android:icon="@drawable/smallPic" . . . >
主题值用以下格式表达
1 ?[package:]type:name
String values:
属性值为字符串时,表示转义字符要加"\\"。例如,‘\\n‘用作回车或‘\\uxxxx‘用作一个Unicode字符。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。