android开发学习笔记(一)-Manifest文件

一:概述

所有的app都要在根目录下AndroidManifest.xml文件,这个文件显示了app告诉android系统的基本信息。在app代码运行之前,android系统从这个文件获取基本信息

功能:

  1. 给app的java包起名作为这个app的唯一标识符
  2. 声明app中要使用的组件
  3. 决定哪些进程持有app组件
  4. 确定app需要的用户权限
  5. 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
  6. 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互
  7. 声明app需要的最低级别
  8. 声明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字符。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。