1.8 应用清单文件
每个应用的根目录中都必须包含一个清单文件(AndroidManifest.xml)。该文件向Android系统提供应用的必要信息,系统必须具有这些信息才能运行应用的任何代码。
此外,清单文件还包含以下功能:
• 为应用设置包名。软件包名称是当前应用的唯一标识符。
• 描述应用的各个组件,包括Activity、服务、广播接收器和内容提供者。它还为实现每个组件的类命名并发布其功能,例如它们可以处理的Intent消息。这些声明向Android系统告知有关组件以及可以启动这些组件的条件的信息。
• 确定应用组件的进程。
• 声明应用有哪些权限,还声明其他应用与该应用组件交互所需具备的权限。
• 声明应用需要的最低Android API级别。
1.8.1 清单文件结构
下面的代码段显示了清单文件的通用结构以及可以包含的每个元素。
1.8.2 文件约定
适用于清单文件中所有元素和属性的约定和规则。
1. 元素
只有<manifest>和<application>元素是必需的,这两个元素都只能有一个并且必须唯一。其他大部分元素可以出现多次或者根本不出现,但清单文件中必须存在其中某些元素才有效。元素的值通过属性进行设置。
同一级别的元素不区分先后顺序。例如,<activity>、<provider>和<service>元素可以按任何顺序混合在一起。
2. 属性
所有的属性都是可选的,但是有些元素必须要指定属性才能有效。
除了根<manifest>元素的一些属性外,所有属性名称均以android:前缀开头。例如,android:alwaysRetainTaskState。
3. 声明类名
有很多元素可以指定java类,例如<application>、Activity(<activity>)、服务(<service>)、广播接收器(<receiver>)以及内容提供者(<provider>)。
如果我们没有给manifest指定package属性,写法如下:
4. 多个值
如果指定多个值,就一直重复增加这个元素,而不是给一个元素赋多个值。例如,intent过滤器可以有多个:
5. 权限
权限是一种限制,用于限制对部分代码或设备数据的访问。增加限制是为了保护可能被误用以致破坏或损害用户体验的关键代码。
如果应用需要访问受权限保护的功能,就必须在清单中使用<uses-permission>元素声明应用需要该权限。
将应用安装到设备上之后,安装程序会通过检查签署应用证书的颁发机构并(在某些情况下)询问用户,确定是否授予请求的权限。如果授予权限,则应用能够使用受权限保护的功能。否则,访问这些权限保护的功能会失败,并且不会向用户发送任何通知。