AndroidManifest.xml 是 Android 应用强制存在的核心配置文件,声明包名、组件、权限、设备特性等,系统依赖其校验与调度;缺失或配置错误将导致安装失败、闪退、功能异常等问题。
AndroidManifest.xml 是每个 Android 应用的“身份证”和“总调度表”,它声明了应用的基本信息、组件(Activity、Service、BroadcastReceiver、ContentProvider)、权限需求、支持的设备特性等,系统在安装和运行时都依赖它做校验和调度。
核心作用:告诉系统“你是谁、能做什么、需要什么”
它不是可选配置,而是强制存在的 XML 文件,位于模块根目录(如
app/src/main/AndroidManifest.xml
)。没有它,APK 无法安装;配错它,可能造成闪退、权限失效、页面打不开、后台服务不启动等问题。
基本结构与关键标签说明
一个最小可用的清单文件包含
根节点,并至少声明
package
(应用唯一包名)和一个带
LAUNCHER
的 Activity:
常用配置项与注意事项
android:exported
:Android 12+ 强制要求。值为
true
表示组件可被其他应用调用(如 Launcher Activity、公开 Service),
false
则仅限本应用内访问。漏配或误配会导致启动失败或安全警告
权限声明
:用 声明运行时或安装时需要的权限,例如:
注意:危险权限(如定位、存储、相机)还需在代码中动态申请
适配属性
:比如
android:targetSdkVersion
在 build.gradle 中定义,但清单中可通过
(已弃用)或间接影响行为;
android:hardwareAccelerated
、
android:supportsRtl
等可在 或 中设置
Intent Filter 配置
:决定组件如何被隐式 Intent 触发。除了 LAUNCHER,还可配置自定义 Scheme(如
)或响应特定文件类型(如打开 PDF)
多模块/动态功能场景下的清单合并
使用 Android Gradle 插件后,清单文件支持自动合并。主 module 的 AndroidManifest.xml 是基础,library module 和 dynamic feature module 可各自提供清单片段,AGP 会按优先级(main > flavor > buildType > library)合并。冲突时可通过
tools:replace
、
tools:remove
、
tools:node
等属性控制(需在 manifest 根节点声明
)。
例如合并时避免重复声明权限,或覆盖某个 activity 的 label:
基本上就这些。它不复杂,但容易忽略细节——尤其是 exported、权限、intent-filter 和合并逻辑。改完记得 clean + rebuild,再真机验证是否能正常启动和跳转。
myapp://open?param=1xmlns:tools="http://schemas.android.com/tools"