文章目录
- 参考资料
- 免责说明
- 概述
- 文件主要功能(TBD)
- 软件包名称和应用ID(TBD)
- 应用组件
- 权限(TBD)
- 设备兼容性(TBD)
- 文件约定
- 元素
- 属性
- 多个值
- 资源值(TBD)
- 字符串值
- 清单元素参考
- 清单文件示例
参考资料
免责说明
文章仅仅是记录自己当前对某个知识的理解,可能存在问题,如果由于文中的错误给你造成了损失,本人不承担任何责任。文章后面可能会继续更新。
概述
每个应用项目必须在项目源设置的根目录中加入 AndroidManifest.xml 文件(且必须使用此名称)。 清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述应用的基本信息。
重点是,清单文件需声明以下内容:
- 应用的软件包名称,其通常与代码的命名空间相匹配。
- 应用的组件,包括所有 Activity、服务、广播接收器和内容提供程序, 每个组件都必须定义基本属性。
- 应用为访问系统或其他应用的受保护部分所需的权限。
- 应用需要的硬件和软件功能,这些功能会影响哪些设备能够从 Google Play 安装应用。
清单文件中有很多个元素,每个元素都有它自己的定义和用法,具体情况请参考官方说明。也许你也会遇到官方说明上没有提到的情况,比如android:roundIcon属性,我暂且理解为可能是因为android版本升级,属性增多,然后文档没有及时同步更新。(有老铁知道为啥有些没有,也请告诉我下原因)
<application
android:roundIcon= "xxxx" >
</application>
文件主要功能(TBD)
软件包名称和应用ID(TBD)
应用组件
对于在应用中创建的每个应用组件,您必须在清单文件中声明相应的 XML 元素:
<activity> 用于 Activity 的每个子类。
<service> 用于 Service 的每个子类。
<receiver> 用于 BroadcastReceiver 的每个子类。
<provider> 用于 ContentProvider 的每个子类。
权限(TBD)
设备兼容性(TBD)
文件约定
此部分描述普遍适用于清单文件中所有元素和属性的约定和规则。
元素
只有 <manifest> 和 <application>元素是必需的, 二者必须且只能出现一次。同一级别的元素通常不分先后顺序。<activity-alias> 元素必须跟在别名所指的 activity 之后。<application>元素必须是<manifest>元素内的最后一个元素。
属性
严格来说,所有属性都是可选的。 但是,必须指定某些属性才可让元素实现其目的。 对于真正可选的属性,参考文档会指定默认值。
除了根 <manifest> 元素的某些属性外,所有属性名称均以 android: 前缀开头。
多个值
如果可以指定多个值,则几乎总是在重复元素,而非列出单个元素内的多个值。 例如,Intent 过滤器可以列出多个操作:
<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>
资源值(TBD)
字符串值
如果属性值为字符串,则您必须使用双反斜杠 (\) 来转义字符,例如:使用 \n 表示换行符或使用 \uxxxx 表示 Unicode 字符。
清单元素参考
下表提供 AndroidManifest.xml 文件中所有有效元素的参考文档链接。
<action> | 向 Intent 过滤器添加操作。 |
<activity> | 声明 Activity 组件。 |
… | … |
<application> | 应用的声明。 |
<action> | 向 Intent 过滤器添加操作。 |
<uses-sdk> | 您可以通过整数形式的 API 级别,表示应用与一个或多个版本的 Android 平台的兼容性。 |
清单文件示例
以下 XML 文件为 AndroidManifest.xml 的一个简单示例,该示例为应用声明两个 Activity。
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.example.myapp">
<!-- Beware that these values are overridden by the build.gradle file -->
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- This name is resolved to com.example.myapp.MainActivity
based upon the package attribute -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity" />
</application>
</manifest>