Android:AndroidManifest.xml配置文件详解
AndroidManifest.xml 是Android应用的核心配置文件,它向Android系统描述了应用的基本信息、组件、权限、硬件要求等。
一、概述
AndroidManifest.xml 是每个 Android 应用都必须包含的核心配置文件,它位于应用的根目录下。该文件向 Android 系统提供了关于应用的基本信息,是 Android 系统与应用程序之间进行通信的桥梁。
用途:
- 定义应用组件:定义应用包含的Activity、Service、BroadcastReceiver和ContentProvider。
- 定义应用权限:定义应用自身需要的权限,以及声明其他应用访问该应用组件所需的权限。
- 定义硬件和软件要求:指定应用所需的API级别、硬件配置(如摄像头、蓝牙)等。
- 定义应用兼容性:指定应用支持的不同屏幕尺寸、输入方式等。
- 其他元数据:如应用图标、主题、进程名称等。
二、主要用途
1. 应用基本信息
- 定义应用的包名(唯一标识)
- 版本号(versionCode 和 versionName)
- 应用图标和名称
- 安装位置设置
2. 声明应用组件
- Activity(活动)
- Service(服务)
- BroadcastReceiver(广播接收器)
- ContentProvider(内容提供者)
3. 权限管理
- 申请应用需要的权限
- 声明其他应用访问本应用组件所需的权限
4. 硬件和软件要求
- 指定应用所需的最小 SDK 版本
- 声明需要的硬件特性
- 定义支持的屏幕尺寸和密度
5. Intent 过滤器
- 定义应用可以响应的 Intent
- 指定默认启动 Activity
三、主要配置项详解
配置示例:
1 |
|
1. <manifest> - 根元素
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
属性:
package:应用的唯一包名versionCode:内部版本号,用于版本比较(整数)versionName:用户可见的版本号(字符串)installLocation:auto:由系统决定internalOnly:只安装到内部存储preferExternal:优先外部存储
2. <uses-sdk> - SDK 版本要求
1 | <uses-sdk |
注意: maxSdkVersion 从 API 30 开始不推荐使用
3. <uses-permission> - 权限声明
1 | <uses-permission android:name="android.permission.INTERNET" /> |
4. <permission> - 自定义权限
声明自定义权限,用于保护应用组件。必须在 <application> 外部声明。
1 | <permission |
protectionLevel 取值:
normal:低风险权限dangerous:高风险权限signature:相同签名应用可获取signatureOrSystem:系统应用或相同签名
5. <application> - 应用配置
1 | <application |
重要属性:
icon:应用图标。label:应用名称。theme:应用主题。allowBackup:是否允许备份(默认为 true)supportsRtl:是否支持从右到左布局usesCleartextTraffic:是否允许明文传输(HTTP)
6. <activity> - 活动组件
声明Activity,可以包含<intent-filter>定义启动条件。<activity> 必须在<application>应用配置里面。
1 | <activity |
关键属性:
android:name: 指定Activity对应的类名(相对、绝对路径),关联 XML 配置与具体的 Java/Kotlin 实现类- 相对路径形式:.MainActivity(相对于 manifest 标签中的 package 属性)
- 绝对路径形式:com.bytedance.speech.speechdemo.MainActivity(完整的类路径)
- 两种写法功能相同,都会指向同一个 MainActivity 类
android:theme: 指定 Activity 使用的主题样式,定义界面外观、动画等视觉效果android:label: 设置Activity的显示标签,定义在 Launcher 或任务管理器中显示的名称exported:是否允许其他应用启动(Android 12+ 重要安全特性)android:launchMode: 定义 Activity 的启动模式,控制 Activity 实例的创建和复用策略standard:标准模式(默认)singleTop:栈顶复用singleTask:栈内复用singleInstance:独立栈
android:screenOrientation: 用于控制Activity的屏幕显示方向,常用取值包括:portrait: 竖屏模式landscape: 横屏模式unspecified: 默认值,由系统决定方向sensor: 根据设备传感器自动旋转nosensor: 不响应传感器变化,保持初始方向user: 用户当前首选的方向behind: 与前一个Activity方向保持一致reversePortrait: 反向竖屏(倒置)reverseLandscape: 反向横屏(倒置)sensorPortrait: 仅支持竖屏但可感应正反向sensorLandscape: 仅支持横屏但可感应正反向fullSensor: 支持所有四个方向的自由旋转
android:windowSoftInputMode: 控制软键盘与窗口的交互模式,管理键盘弹出时的窗口调整行为- 示例:
stateHidden表示默认隐藏输入法
- 示例:
android:configChanges: 指定当设备配置发生改变时,Activity是否自己处理这些变化,而不是让系统重新创建Activity。- 示例:
orientation|screenSize表示自行处理屏幕旋转
- 示例:
<intent-filter>: 定义 Activity 能够响应的 Intent 类型android.intent.action.MAIN: 声明该 Activity 是应用程序的主入口点android.intent.category.LAUNCHER: 指定该 Activity在应用启动器中显示(即桌面图标)
7. <service> - 服务组件
声明Service,类似Activity,也有name、exported等属性。
1 | <service |
8. <receiver> - 广播接收器
声明BroadcastReceiver,同样可以包含<intent-filter>。
1 | <receiver |
9. <provider> - 内容提供者
声明ContentProvider
authorities:内容提供者的唯一标识readPermission、writePermission:读写权限
1 | <provider |
10. <uses-feature> - 硬件特性要求
- 声明应用需要的硬件特性(如摄像头、蓝牙),Google Play会根据此过滤设备。
1 | <uses-feature |
11. <queries> - 包可见性(Android 11+)
1 | <queries> |
四、配置项优先顺序
1. 合并规则优先级
当多个模块或库的 AndroidManifest.xml 合并时,优先级顺序如下:
1 | 最高优先级:主模块的 manifest |
2. 属性优先级冲突处理
使用 tools:replace、tools:remove、tools:keep 处理冲突:
1 | <!-- 在主模块中覆盖库中的属性 --> |
3. 组件启动优先级
多个应用声明相同的 Intent-filter 时,系统按以下顺序选择:
1 | 1. 用户明确选择的默认应用 |
4. 权限声明顺序
- 权限必须在使用前声明
- 自定义权限必须在
<application>外部声明 - 同一权限多次声明不会产生重复
五、最佳实践
1. 安全配置
1 | <!-- 显式设置 exported 属性 --> |
2. 权限分组
1 | <!-- 按功能分组声明权限 --> |
3. 组件配置示例
1 | <!-- 完整的 Activity 配置示例 --> |
六、调试和验证
1. 使用 Manifest Merger 工具
1 | # 查看合并结果 |
2. 验证配置
1 | // 在代码中检查权限 |
七、常见问题
1. Android 12+ 的 exported 要求
- 所有组件必须显式设置
exported属性 - 如果组件包含 Intent-filter,默认
exported="true"
2. 包可见性问题
- Android 11+ 需要使用
<queries>声明要交互的其他应用 - 某些隐式 Intent 需要声明包名
3. 权限升级策略
1 | <!-- 使用权限组 --> |
八、总结
AndroidManifest.xml 是 Android 应用的配置中心,合理配置可以:
- 确保应用安全性和稳定性
- 优化应用性能和兼容性
- 提供良好的用户体验
- 符合 Google Play 的要求和审核规范
在实际开发中,建议:
- 定期审查 Manifest 配置
- 遵循最小权限原则
- 及时适配新的 Android 版本要求
- 使用最新的 Android Gradle Plugin 进行构建和合并
Android:AndroidManifest.xml配置文件详解
http://blog.gxitsky.com/2025/12/12/Android-05-AndroidManifest-xml/

