AndroidManifest.xml文件是Android应用程序的清单文件,是整个Android应用程序的描述文件。每个应用的根目录中都必须包含一个 AndroidManifest.xml 文件(且文件名精确无误)。 清单文件向 Android 系统提供应用的必要信息,系统必须具有这些信息方可运行应用的任何代码。
AndroidManifest.xml清单文件通常可以包含如下信息:
- 为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符。
- 描述应用的各个组件,包括构成应用的 Activity、服务、广播接收器和内容提供程序。可以处理的 Intent 消息,向 Android 系统告知有关组件以及可以启动这些组件的条件的信息。
- 确定托管应用组件的进程。
- 声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
- 列出 Instrumentation 类,这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中,在应用发布之前将移除。
- 声明应用所需的最低 Android API 级别
- 列出应用必须链接到的库
下面给出一个清单文件的示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture />
<application>
<activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </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 /> <path-permission /> </provider>
<uses-library />
</application>
</manifest> |
后期,随着APP开发的学习,会逐步讲解AndroidManifest.xml文件中的相关配置,此处首先讲解一下Application原色。
Application元素用于应用程序的声明。它包含了每个应用程序组件的声明,
Application元素的属性如下所示:
<application android:allowTaskReparenting=["true" | "false"] android:allowBackup=["true" | "false"] android:allowClearUserData=["true" | "false"] android:backupAgent="string" android:backupInForeground=["true" | "false"] android:banner="drawable resource" android:debuggable=["true" | "false"] android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:extractNativeLibs=["true" | "false"] android:fullBackupContent="string" android:fullBackupOnly=["true" | "false"] android:hasCode=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:isGame=["true" | "false"] android:killAfterRestore=["true" | "false"] android:largeHeap=["true" | "false"] android:label="string resource" android:logo="drawable resource" android:manageSpaceActivity="string" android:name="string" android:networkSecurityConfig="xml resource" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:requiredAccountType="string" android:resizeableActivity=["true" | "false"] android:restrictedAccountType="string" android:supportsRtl=["true" | "false"] android:taskAffinity="string" android:testOnly=["true" | "false"] android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:usesCleartextTraffic=["true" | "false"] android:vmSafeMode=["true" | "false"] > . . . </application> |
下表列出记几个简单的属性描述,其他属性将在后面讲解到相关的功能是予以介绍。
属性 |
描述 |
android:allowbackup |
是否将程序加入到系统的备份和恢复架构中。Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,为了考虑安全性,建议发布时讲该属性设置为false |
android:icon |
整个应用的图标,也是每个组件的默认图标。这个属性值必须被设置为drawable资源的引用。没有默认值。 |
android:label |
应用标签,并且还是应用的每个组件的默认标签。这个标签应该被设置为引用字符串资源,当然他也可以像其他字符串一样在用户 |
android:supportsRtl |
声明你的application是否愿意支持从右到左(原来RTL就是right-to-left 的缩写...)的布局。如果设置为true,targetSdkVersion设置为17或更高,各种RTL的API将被激活,系统使用您的应用程序可以显示RTL布局。 |
android:theme |
应用程序中所有的Activity设置默认的主题,属性值要引用一个样式资源。每个独立的Activity的主题会被它们自己的theme属性所覆盖。 |
下面我们讲解一下应用程序权限说明。
一个Android应用程序如果需要访问Android系统的功能,可能需要某些系统权限,此外如果一个Android应用被其他应用调用,也可以声明调用自身所需要的权限。下面给出这两种权限的设置
1. 声明应用正常工作所需要的权限
通过为<manifest.../>元素添加<uses-permission.../>子元素即可声明该应用正常工作所需要的权限。
例如在<manifest.../>元素里添加如下代码:
<!-- 声明应用需要振动的权限--> <uses-permission android:name="android.permission.VIBRATE" /> |
2.声明调用该应用所需的权限:
通过为应用的各组件元素,如<activity.../>元素添加android:permission属性即可声明调用该程序所需要的权限。
例如在<activity.../>元素里添加如下代码:
<!-- 声明调用该Activity需要发送短信的权限 --> <activity android:permission="android.permission.SEND_SMS"> |
Android系统提供了大量的权限,这些权限都位于Manifest.permission类中,可以查看类文件中的权限声明,如下图所示:
在Android 6之前,这些权限在用户安装时询问,Android 6中,权限系统发生了改变。
Android 6对权限进行了分级
- 正常(Normal Protection)权限
- 危险(Dangerous)权限
正常权限对用户隐私没有较大影响或者不会打来安全问题,安装后就赋予这些权限,不需要显示提醒用户,用户也不能取消这些权限。
危险权限可能引起隐私问题或者影响其他程序运行,需要在运行是通过用户授权。由于该知识点相对复杂一点,此处各位暂时知道就行了,后期会单独讲解。
(张伟:2018年9月6日)
(转载时请注明来源)