AndroidManifest.xml 配置速查手册

适用范围:Android 5.0(API 21)~ Android 15(API 35) 参考来源:Android 官方文档

图例约定

  • 【常用】日常开发高频使用
  • 【关键】配置错误会导致编译失败 / 运行崩溃 / 安全风险
  • 【废弃】不建议在新项目中使用
  • 【TV/VR/特殊】仅在特定设备类型才需要

使用建议


目录


一、速查模板(常用场景复制即用)

1.1 标准应用骨架

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:name=".MyApplication"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:networkSecurityConfig="@xml/network_security_config"
        android:supportsRtl="true"
        android:usesCleartextTraffic="false"
        tools:targetApi="34">
        <!-- 组件声明 -->
    </application>

</manifest>

1.2 启动器 Activity(应用入口)

xml 复制代码
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboardHidden|uiMode|density"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
xml 复制代码
<activity android:name=".DeepLinkActivity" android:exported="true">
    <!-- 自定义 scheme(如 myapp://product/123) -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" android:host="product" />
    </intent-filter>

    <!-- HTTPS App Links(autoVerify 触发系统域名校验) -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="www.example.com" />
        <data android:scheme="https" android:host="example.com" />
    </intent-filter>
</activity>

1.4 前台 Service(API 26+ 通知 / API 28+ 权限 / API 29+ type / API 34+ 强制三方一致)

xml 复制代码
<!--
  版本节点:
  - API 26+:startForegroundService() 必须 5 秒内调 startForeground 显示通知
  - API 28+:必须申请 FOREGROUND_SERVICE 权限
  - API 29+:引入 foregroundServiceType
  - API 34+:foregroundServiceType + 同名子类型权限 + startForeground(type) 三方必须一致
-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

<service
    android:name=".MusicService"
    android:exported="false"
    android:foregroundServiceType="mediaPlayback"
    android:stopWithTask="false" />

1.5 FileProvider(文件共享,替代 file://)

xml 复制代码
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

1.6 静态广播接收器(仅限系统/受保护广播)

xml 复制代码
<!-- 注意:API 26+ 已限制大量隐式广播,自定义广播请用 LocalBroadcastManager 或动态注册 -->
<receiver
    android:name=".BootReceiver"
    android:exported="true"
    android:directBootAware="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

1.7 应用可见性查询(targetSdk ≥ 30 必加,否则 PackageManager 查不到目标应用)

xml 复制代码
<queries>
    <!-- 1) 已知具体包名 -->
    <package android:name="com.tencent.mm" />

    <!-- 2) 通过 Intent 查询(如查询可分享图片的应用) -->
    <intent>
        <action android:name="android.intent.action.SEND" />
        <data android:mimeType="image/*" />
    </intent>

    <!-- 3) 通过 ContentProvider 查询 -->
    <provider android:authorities="com.example.provider" />
</queries>

二、文件结构概览

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest>

    <!-- 1. 顶层声明(顺序无强制,但建议按此组织) -->
    <uses-permission />
    <permission />
    <uses-sdk />
    <uses-feature />
    <uses-library />
    <queries />          <!-- API 30+ -->
    <attribution />      <!-- API 31+ -->

    <!-- 2. 应用本体 -->
    <application>

        <!-- 2.1 四大组件 -->
        <activity>
            <intent-filter>
                <action /> <category /> <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias />
        <service />
        <receiver />
        <provider>
            <grant-uri-permission />
            <path-permission />
        </provider>

        <!-- 2.2 应用级辅助声明 -->
        <uses-library />
        <uses-native-library />   <!-- API 30+ -->
        <profileable />            <!-- API 30+ -->
        <meta-data />

    </application>

</manifest>

三、高频核心属性详解(必读)

以下属性是日常开发"踩坑率最高"的几个,单独深入讲解。其余属性见后续章节表格。

3.1 android:exported【关键 · API 31+ 强制】

作用 :声明组件能否被其他应用启动 / 绑定 / 触发。

为什么关键 :自 Android 12(API 31)起,所有含 <intent-filter> 的 Activity / Service / Receiver 必须显式声明 exported,否则 AGP/Lint 编译报错(提示 "Apps targeting Android 12 require attribute android:exported..."),运行时安装也会以 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 失败。

取值规则

场景 推荐值 说明
启动器 Activity(含 LAUNCHER) true 否则桌面无法启动
应用内部跳转的 Activity false 防止被外部 deeplink / am start 唤起
深链接 / App Links Activity true 必须对外开放
处理系统广播的 Receiver(如 BOOT_COMPLETED) true 系统才能发送广播
应用内部 Service(如 IPC 绑定) false 防止被恶意应用绑定
FileProvider false 必须 false,通过 grantUriPermissions 临时授权

安全建议 :默认值优先选 false,确实需要对外暴露时再加 permission 限制调用方。

3.2 android:launchMode【常用 · Activity 专用】

控制 Activity 实例在任务栈中的创建方式。决策表:

模式 行为简述 典型场景
standard(默认) 每次启动都新建实例,可重复入栈 普通页面(详情页、列表项)
singleTop 栈顶已是同实例时复用,触发 onNewIntent() 通知点击页、搜索结果页
singleTask 全应用唯一实例,启动时清掉其之上所有 Activity 主页 / Tab 容器
singleInstance 独占一个任务栈,新启动的 Activity 进入其他栈 锁屏、悬浮窗、来电界面
singleInstancePerTask(API 31+) 每个任务栈一个实例,支持多任务多窗口场景 文档型 / 多窗口应用

提示:能用 Intent flag(FLAG_ACTIVITY_*)解决的,优先用 flag,避免全局锁死启动模式。

3.3 android:foregroundServiceType【关键 · API 28+ / 34+ 强制】

作用 :声明前台 Service 的用途。API 34(Android 14)起,启动前台 Service 时必须 与运行时调用 startForeground(id, notification, type) 的 type 一致,否则抛 ForegroundServiceTypeException

类型与权限对应关系

type 用途 同时需要的权限
camera 摄像头采集 CAMERA + FOREGROUND_SERVICE_CAMERA
connectedDevice 蓝牙 / USB / 投屏配件 对应连接权限 + FOREGROUND_SERVICE_CONNECTED_DEVICE
dataSync 数据上传 / 下载 / 同步 FOREGROUND_SERVICE_DATA_SYNC
location 定位(含后台) 定位权限 + FOREGROUND_SERVICE_LOCATION
mediaPlayback 音视频播放 FOREGROUND_SERVICE_MEDIA_PLAYBACK
mediaProjection 录屏 / 投影 FOREGROUND_SERVICE_MEDIA_PROJECTION
microphone 录音 RECORD_AUDIO + FOREGROUND_SERVICE_MICROPHONE
phoneCall 电话通话(VoIP) FOREGROUND_SERVICE_PHONE_CALL
health(34+) 健身 / 健康数据 FOREGROUND_SERVICE_HEALTH
remoteMessaging(34+) 即时通讯消息 FOREGROUND_SERVICE_REMOTE_MESSAGING
shortService(34+) ≤ 3 分钟短任务(无需用户感知通知) 无需额外权限
specialUse(34+) 上述都不匹配时(需在 <meta-data> 中写明原因,且 Play 审核) FOREGROUND_SERVICE_SPECIAL_USE
systemExempted(34+) 系统豁免(仅 OEM / 系统应用) ---

多类型组合android:foregroundServiceType="location|mediaPlayback"

⚠️ mediaProjection 额外要求:除声明 type 与权限外,每次启动 都必须先通过 MediaProjectionManager.createScreenCaptureIntent() 获取用户同意。API 34+ 起 token 不可复用,每次都要重新请求。

3.4 android:configChanges【常用 · Activity】

作用 :声明哪些配置变化由开发者自行处理,避免 Activity 被销毁重建。

推荐组合(覆盖屏幕旋转 / 折叠屏 / 分屏 / 字体缩放 / 深色模式切换):

xml 复制代码
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboardHidden|uiMode|density|fontScale|locale|layoutDirection"

所有可选值(按 API 版本):

引入 API 含义
orientation keyboardHidden keyboard navigation touchscreen locale fontScale mcc mnc 1 基础类型
uiMode 8 夜间模式 / 车载 / TV 模式切换
screenLayout 9 屏幕布局变化(如多屏切换)
screenSize smallestScreenSize 13 屏幕旋转必须包含 screenSize
layoutDirection 17 LTR/RTL 切换
density 24 显示密度变化(如外接屏)
colorMode 26 HDR / 广色域切换
grammaticalGender 34 语法性别(西语等语言)

注意:configChanges 是"逃生口",不是性能优化。能用 ViewModel / onSaveInstanceState 处理重建则优先用,过度依赖会让多语言/深色模式切换出 bug。

3.5 protectionLevel(自定义权限保护级别)

基础值(四选一):

授予方式 说明
normal 安装时自动授予 低风险(如修改震动、网络状态)
dangerous 运行时弹窗(API 23+) 高风险(定位、通讯录、相机)
signature 签名一致才授予 同公司多应用 IPC 首选
signatureOrSystem 签名一致或系统应用 【废弃】用 signature&#124;privileged 替代

附加标志 (用 | 与基础值组合,按需了解,多数用不到): privileged 系统特权 / development 调试 / appop AppOps / installer 安装器 / preinstalled 预装 / vendorPrivileged(27+)/ textClassifier(28+)/ companion(31+)/ knownSigner(33+)等。


四、根元素 <manifest>

xml 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"
    android:versionCode="1"
    android:versionName="1.0.0">

必需属性

属性 说明
xmlns:android 固定 http://schemas.android.com/apk/res/android
package 应用包名。AGP 7.3+ 已迁移至 build.gradlenamespace,新项目可不写

可选属性

属性 默认值 用途
android:versionCode --- 【常用】内部版本号(整型),用于版本比较 / 升级判断
android:versionName --- 【常用】用户可见版本号字符串(如 1.2.3
android:installLocation internalOnly 安装位置:internalOnly / auto / preferExternal(外置 SD 卡)
android:sharedUserId --- 【废弃 · API 29+】曾用于多应用共享 Linux UID,新项目禁用
android:sharedUserLabel --- 【废弃】配合上者使用

提示:versionCode / versionName / compileSdkVersion 均推荐在 build.gradle 中配置,由 AGP 注入。


五、<application> 应用元素

5.1 基础信息

属性 用途
android:name 【常用】自定义 Application 类(如 .MyApplication),用于全局初始化
android:label 【常用】桌面显示名称
android:icon 【常用】应用图标
android:roundIcon 圆形启动图标(API 25+,部分启动器使用)
android:theme 【常用】全局默认主题,会被 Activity 的 theme 覆盖
android:description 应用描述(用于无障碍 / 设置页面)
android:logo ActionBar 等位置使用的 Logo
android:banner 【TV】Android TV 启动器横幅图

5.2 权限 & 安全

属性 默认值 用途
android:permission --- 调用方需持有的权限(应用级默认值,可被组件覆盖)
android:process 包名 【常用】自定义进程名,: 开头表示私有进程(如 :remote
android:taskAffinity 包名 任务栈亲和性,影响 Activity 归属的任务
android:allowBackup true 【关键】是否允许 ADB / 云备份。默认值仍为 true,但含敏感数据时建议显式设为 false;API 31+ 推荐改用 dataExtractionRules 精细控制
android:fullBackupContent --- 自动备份规则 XML(API 23+)
android:dataExtractionRules --- 【常用】备份与设备迁移规则(API 31+,取代 fullBackupContent)
android:allowClearUserData true 是否允许"清除数据"
android:debuggable false 【关键】Release 包必须 false,否则可被 jdb 附加调试
android:testOnly false 仅用于测试(设置后无法通过 Play 发布)
android:vmSafeMode false 关闭 JIT,仅用于规避 JIT bug

5.3 显示与行为

属性 默认值 用途
android:hardwareAccelerated true 【常用】硬件加速;某些自绘场景需关闭后再单独开启 View
android:largeHeap false 申请更大堆内存(图片处理类应用),但不应作为内存泄漏的解决方案
android:supportsRtl false 【常用】支持 RTL(阿拉伯语等右到左布局)。国际化应用建议设为 true
android:uiOptions none none / splitActionBarWhenNarrow(旧 ActionBar 拆分)

5.4 网络与安全

属性 默认值 用途
android:networkSecurityConfig --- 【常用】网络安全配置 XML(API 24+),用于自签证书、明文白名单
android:usesCleartextTraffic API 28+ 默认 false 【关键】是否允许 HTTP 明文流量。强烈建议 false,必要时通过 networkSecurityConfig 白名单

5.5 多窗口 & 现代特性

属性 默认值 API 用途
android:resizeableActivity true 24 是否支持分屏 / 自由窗口
android:localeConfig --- 33 【新特性】指向 locales_config.xml,启用应用内语言切换
android:requestLegacyExternalStorage false 29 临时绕过分区存储(仅 targetSdk≤29 有效,应尽快迁移 MediaStore/SAF
android:preserveLegacyExternalStorage false 30 升级时一次性保留旧外部存储访问

5.6 内存安全调试(API 30+,需要时启用)

属性 用途
android:gwpAsanMode never/always,启用 GWP-ASan 检测 native 内存错误
android:memtagMode off/async/sync,ARMv9 MTE 内存标记
android:nativeHeapZeroInitialized native 堆零初始化

六、四大组件

1. <activity>

基础属性

属性 用途
android:name 【必填】Activity 类名,可用 .MyActivity 相对写法
android:label 标题栏 / 最近任务页显示名
android:icon 任务栏 / 最近任务页图标
android:theme 【常用】覆盖应用主题(如启动屏单独主题)

启动 & 任务栈

属性 默认值 用途
android:launchMode standard 【常用】见 [3.2 launchMode 详解](#属性 默认值 用途 android:launchMode standard 【常用】见 3.2 launchMode 详解 android:taskAffinity 包名 任务栈亲和性。空字符串 "" 表示无亲和(独立栈) android:allowTaskReparenting false 任务重归属(同 affinity 的应用启动时夺回该 Activity) android:clearTaskOnLaunch false 从启动器重新进入时清空栈中其上 Activity android:alwaysRetainTaskState false 长时间不用也不重置任务状态 android:finishOnTaskLaunch false 用户离开任务后下次返回时销毁 android:noHistory false 离开即销毁(不在回退栈中保留) android:excludeFromRecents false 不显示在"最近任务" android:autoRemoveFromRecents false finish 后自动从最近任务移除(API 21+) android:documentLaunchMode none 文档型应用启动模式:intoExisting / always / never / none android:maxRecents 16 同任务在最近列表的最大条目数(API 21+) android:relinquishTaskIdentity false 让出任务身份给上层 Activity "#32-androidlaunchmode%E5%B8%B8%E7%94%A8--activity-%E4%B8%93%E7%94%A8")
android:taskAffinity 包名 任务栈亲和性。空字符串 "" 表示无亲和(独立栈)
android:allowTaskReparenting false 任务重归属(同 affinity 的应用启动时夺回该 Activity)
android:clearTaskOnLaunch false 从启动器重新进入时清空栈中其上 Activity
android:alwaysRetainTaskState false 长时间不用也不重置任务状态
android:finishOnTaskLaunch false 用户离开任务后下次返回时销毁
android:noHistory false 离开即销毁(不在回退栈中保留)
android:excludeFromRecents false 不显示在"最近任务"
android:autoRemoveFromRecents false finish 后自动从最近任务移除(API 21+)
android:documentLaunchMode none 文档型应用启动模式:intoExisting / always / never / none
android:maxRecents 16 同任务在最近列表的最大条目数(API 21+)
android:relinquishTaskIdentity false 让出任务身份给上层 Activity

屏幕方向 screenOrientation

常用值 说明
unspecified(默认) 系统决定
portrait / landscape 锁定竖屏 / 横屏
sensor / sensorPortrait / sensorLandscape 由传感器决定(含反向)
user / fullUser 跟随用户首选方向(推荐用于不强制方向的页面)
locked 锁定当前方向
nosensor 忽略传感器

其他值(behind / reverseLandscape / reversePortrait / fullSensor 等)按需查阅,使用较少。

配置变更 configChanges

详见 [3.4 configChanges 详解](#3.4 configChanges 详解 "#34-androidconfigchanges%E5%B8%B8%E7%94%A8--activity")。

安全 & 权限

属性 默认值 用途
android:exported 有 intent-filter 则 true 【关键】见 [3.1 exported 详解](#属性 默认值 用途 android:exported 有 intent-filter 则 true 【关键】见 3.1 exported 详解 android:permission 继承 application 启动该 Activity 所需权限 "#31-androidexported%E5%85%B3%E9%94%AE--api-31-%E5%BC%BA%E5%88%B6")
android:permission 继承 application 启动该 Activity 所需权限

窗口与软键盘 windowSoftInputMode

state(键盘状态) + adjust(窗口调整方式) 各取一个组合:

state 含义
stateUnspecified(默认) 系统决定
stateUnchanged 进入时保持当前状态
stateHidden / stateAlwaysHidden 进入时隐藏 / 始终隐藏
stateVisible / stateAlwaysVisible 进入时显示 / 始终显示
adjust 含义
adjustUnspecified 系统决定
adjustResize 【推荐】调整窗口大小避免遮挡(聊天 / 评论页)
adjustPan 平移窗口使焦点可见(不改变布局)
adjustNothing 不调整(API 21+)

多窗口 & 画中画

属性 默认值 API 用途
android:resizeableActivity 继承 24 支持分屏 / 自由窗口
android:supportsPictureInPicture false 24 【常用】支持画中画(视频应用)
android:maxAspectRatio / android:minAspectRatio --- 26/29 最大 / 最小宽高比
android:preferMinimalPostProcessing false 30 请求最小后处理(低延迟,游戏/云游戏)
android:allowEmbedded false 21 允许作为嵌入容器的子 Activity(如 Slice)

锁屏与现代特性

属性 默认值 API 用途
android:showWhenLocked false 27 锁屏上显示(来电、闹钟)
android:turnScreenOn false 27 启动时点亮屏幕(配合上者)
android:inheritShowWhenLocked false 29 继承启动方的 showWhenLocked
android:lockTaskMode normal 21 锁定任务模式(Kiosk / MDM 场景)
android:colorMode default 26 default / hdr / wideColorGamut
android:enableOnBackInvokedCallback false 33 【新特性】启用预测返回手势(Android 14 默认行为变更)
android:requireContentUriPermissionFromCaller --- 35 调用方必须持有 Content URI 权限
android:immersive false 18 沉浸模式(已较少使用,推荐 WindowInsetsController)

其他

属性 默认值 用途
android:process 应用进程名 自定义运行进程
android:multiprocess false 允许在多进程实例化(少见)
android:enabled true 是否可被实例化(动态禁用入口)

2. <activity-alias>

为同一个 Activity 创建多个入口(如多语言图标、可切换的 App 图标)。

xml 复制代码
<activity-alias
    android:name=".MainActivityChinese"
    android:targetActivity=".MainActivity"
    android:label="@string/app_name_zh"
    android:icon="@mipmap/ic_launcher_zh"
    android:enabled="false"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
属性 必填 用途
android:name 别名名称(在系统中作为入口标识)
android:targetActivity 真正承担逻辑的目标 Activity
android:enabled 默认 true通过 PackageManager.setComponentEnabledSetting() 切换可换图标
android:exported 同 Activity 规则
android:label / android:icon / android:roundIcon 别名独立的显示属性
android:permission 调用所需权限

3. <service>

属性 默认值 API 用途
android:name --- --- 【必填】Service 类名
android:exported 有 intent-filter 则 true --- 【关键】见 [3.1](#属性 默认值 API 用途 android:name — — 【必填】Service 类名 android:exported 有 intent-filter 则 true — 【关键】见 3.1 android:enabled true — 是否可被实例化 android:permission 继承 — 绑定 / 启动所需权限 android:process 应用进程 — 自定义运行进程(:remote 等) android:isolatedProcess false 16 隔离进程(无任何应用数据权限,用于沙箱化) android:foregroundServiceType — 29 【关键】见 3.3 android:stopWithTask false — 任务被移除时是否停止 android:directBootAware false 24 直接启动(首次解锁前)可用,用于闹钟、来电等核心服务 "#31-androidexported%E5%85%B3%E9%94%AE--api-31-%E5%BC%BA%E5%88%B6")
android:enabled true --- 是否可被实例化
android:permission 继承 --- 绑定 / 启动所需权限
android:process 应用进程 --- 自定义运行进程(:remote 等)
android:isolatedProcess false 16 隔离进程(无任何应用数据权限,用于沙箱化)
android:foregroundServiceType --- 29 【关键】见 [3.3](#属性 默认值 API 用途 android:name — — 【必填】Service 类名 android:exported 有 intent-filter 则 true — 【关键】见 3.1 android:enabled true — 是否可被实例化 android:permission 继承 — 绑定 / 启动所需权限 android:process 应用进程 — 自定义运行进程(:remote 等) android:isolatedProcess false 16 隔离进程(无任何应用数据权限,用于沙箱化) android:foregroundServiceType — 29 【关键】见 3.3 android:stopWithTask false — 任务被移除时是否停止 android:directBootAware false 24 直接启动(首次解锁前)可用,用于闹钟、来电等核心服务 "#33-androidforegroundservicetype%E5%85%B3%E9%94%AE--api-28--34-%E5%BC%BA%E5%88%B6")
android:stopWithTask false --- 任务被移除时是否停止
android:directBootAware false 24 直接启动(首次解锁前)可用,用于闹钟、来电等核心服务

4. <receiver>

⚠️ API 26+ 已禁止大部分隐式广播静态注册。保留可静态注册的主要是:开机完成、时区/日期变化、相机拍摄、连接性变化(部分)等"受保护广播"。

属性 用途
android:name 【必填】Receiver 类名
android:exported 【关键】系统广播需要 true,应用内部建议 false 或动态注册
android:enabled 是否启用
android:permission 发送方需要持有的权限
android:process 自定义进程
android:directBootAware 直接启动场景(API 24+)

5. <provider>

属性 默认值 用途
android:name --- 【必填】Provider 类名
android:authorities --- 【必填】URI authority(多个用 ; 分隔),推荐 ${applicationId}.xxx
android:exported 【关键】API 17+ 默认 false FileProvider 必须 false
android:enabled true 是否启用
android:permission --- 读写所需权限
android:readPermission / android:writePermission --- 分别覆盖读 / 写权限
android:grantUriPermissions false 【常用】允许通过 Intent 临时授权(FileProvider 必须 true)
android:multiprocess false 允许在调用方进程中创建实例
android:initOrder --- 同进程中初始化顺序,值大先初始化
android:directBootAware false 直接启动可用(API 24+)
android:visibleToInstantApps false 对 Instant App 可见(API 26+)
android:forceUriPermissions false 强制使用 URI 权限(API 33+)
android:syncable false 【废弃】是否同步数据,现已少用

<provider> 的子元素

<grant-uri-permission> --- 允许临时授权的 URI 路径白名单:

属性 说明
android:path 精确路径
android:pathPrefix 前缀匹配
android:pathPattern 通配模式(* 任意字符,. 任意单字符)

<path-permission> --- 针对特定路径设置独立权限:

属性 说明
android:path / android:pathPrefix / android:pathPattern 路径匹配(三选一)
android:permission / android:readPermission / android:writePermission 权限

七、意图过滤器与系统常量

7.1 <intent-filter>

属性 用途
android:label / android:icon 在选择器(Chooser)中显示的标签和图标
android:priority 优先级(-999 ~ 999,越大越优先)。仅对广播和 Chooser 排序有效
android:order 同上但用于 Receiver 多注册排序(API 28+)
android:autoVerify App Links 域名自动验证(API 23+),需配合 assetlinks.json

7.2 <action> 常用系统 Action

Action 用途
android.intent.action.MAIN 主入口(配合 LAUNCHER 类别)
android.intent.action.VIEW 查看数据(深链接 / URL / 文件)
android.intent.action.SEND 分享数据
android.intent.action.SENDTO 发送到指定目标(如 mailto: / smsto:
android.intent.action.EDIT 编辑数据
android.intent.action.PICK 选取数据
android.intent.action.SEARCH 搜索
android.intent.action.DIAL / CALL 打开拨号界面 / 直接拨号
android.intent.action.DELETE 删除数据
android.intent.action.BOOT_COMPLETED 开机完成(广播)
android.intent.action.PACKAGE_REPLACED 应用升级广播

7.3 <category> 常用 Category

Category 用途
android.intent.category.DEFAULT 【常用】隐式 Intent 必须包含
android.intent.category.LAUNCHER 【常用】出现在桌面启动器
android.intent.category.BROWSABLE 【常用】可从浏览器 / 链接调起(深链接必备)
android.intent.category.LEANBACK_LAUNCHER 【TV】Android TV 启动器入口
android.intent.category.APP_* 应用类型分类(BROWSER / EMAIL / GALLERY / MAPS / MUSIC)

7.4 <data>

属性 用途
android:scheme URI scheme(http / https / content / 自定义)
android:host 域名 / 主机
android:port 端口
android:path / android:pathPrefix / android:pathPattern 路径匹配
android:pathAdvancedPattern 高级正则路径(API 31+)
android:mimeType MIME 类型(如 image/*
android:mimeGroup 动态 MIME 类型组(API 31+)

匹配规则 :scheme → host → port → path → mimeType,从上到下逐级生效。仅有 mimeType 没有 scheme 时默认匹配 content:file:


八、权限相关

8.1 <uses-permission> 声明权限

xml 复制代码
<uses-permission android:name="android.permission.INTERNET" />
<!-- 仅在 API ≤ 28 时申请(如旧版本读外部存储) -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28" />
属性 用途
android:name 【必填】权限名称
android:maxSdkVersion 【常用】仅在指定 API 及以下版本申请,用于规避新版本不再需要的权限

8.2 <uses-permission-sdk-23>

仅在 API 23+ 申请。用于支持库向后兼容旧 SDK 的场景,普通业务代码用不到

8.3 <permission> 自定义权限

xml 复制代码
<permission
    android:name="com.example.permission.MY_API"
    android:label="@string/perm_label"
    android:description="@string/perm_desc"
    android:protectionLevel="signature" />
属性 用途
android:name 【必填】权限唯一名
android:label 用户可见名称
android:description 用户可见描述(必须是字符串资源)
android:permissionGroup 所属权限组
android:protectionLevel 【关键】见 [3.5 protectionLevel 详解](#属性 用途 android:name 【必填】权限唯一名 android:label 用户可见名称 android:description 用户可见描述(必须是字符串资源) android:permissionGroup 所属权限组 android:protectionLevel 【关键】见 3.5 protectionLevel 详解 "#35-protectionlevel%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9D%83%E9%99%90%E4%BF%9D%E6%8A%A4%E7%BA%A7%E5%88%AB")

8.4 <permission-group> 权限分组

xml 复制代码
<permission-group
    android:name="com.example.permission-group.MEDIA"
    android:label="@string/group_label"
    android:icon="@drawable/group_icon" />

仅在自定义大量权限并希望分组显示时使用,普通应用一般不需要。

8.5 <permission-tree>(极少用)

声明权限树根,配合 PackageManager.addPermission() 动态添加子权限。绝大多数应用用不到。


九、功能与 SDK 声明

9.1 <uses-feature> 硬件 / 软件功能依赖

xml 复制代码
<!-- 必需相机 -->
<uses-feature android:name="android.hardware.camera" android:required="true" />
<!-- 可选 NFC -->
<uses-feature android:name="android.hardware.nfc" android:required="false" />
<!-- OpenGL ES 3.0 -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
属性 用途
android:name Feature 名称
android:required 【关键】true 时 Play 商店会过滤不支持此功能的设备;可选功能必须显式设为 false
android:glEsVersion OpenGL ES 版本(如 0x00020000 = 2.0)

常用 Feature 速查

类别 典型 Feature
摄像头 android.hardware.camera / .front / .flash / .autofocus / .any / .level.full
定位 android.hardware.location / .gps / .network
蓝牙 android.hardware.bluetooth / .bluetooth_le(18+)
网络 android.hardware.wifi / .wifi.direct(14+)
NFC android.hardware.nfc / .nfc.hce(19+)
传感器 android.hardware.sensor.accelerometer / .gyroscope / .compass / .barometer / .heartrate(20+) / .fingerprint(23+)
触屏 android.hardware.touchscreen / .multitouch / .faketouch
电话 android.hardware.telephony / .gsm / .cdma / .euicc(28+ eSIM)
USB android.hardware.usb.host(12+) / .usb.accessory(12+)
屏幕 android.hardware.screen.landscape / .portrait
软件特性 android.software.webview / .print(19+) / .autofill(26+) / .picture_in_picture(26+)
TV / VR android.software.leanback(21+ TV)/ .vr.mode(24+)/ android.hardware.vr.headtracking(26+)
游戏 android.hardware.gamepad(21+)
音频 android.hardware.microphone / android.software.midi(23+)

9.2 <uses-library> 共享库依赖

xml 复制代码
<uses-library android:name="org.apache.http.legacy" android:required="false" />
属性 用途
android:name 【必填】共享库名
android:required 默认 true,false 时即使设备无此库仍可安装

9.3 <uses-sdk> SDK 版本范围

属性 默认值 用途
android:minSdkVersion 1 最低支持 API
android:targetSdkVersion minSdk 【关键】目标 API,决定行为兼容性
android:maxSdkVersion --- 【不推荐】最高支持 API

推荐写法 :不在 Manifest 写,全部在 build.gradle 中通过 minSdk / targetSdk 配置。

9.4 <uses-native-library>(API 30+)

声明依赖的厂商专属原生库(如 libOpenCL.so)。仅 NDK 开发涉及。


十、辅助元素

10.1 <meta-data> 元数据

为组件 / 应用挂载任意键值对,被大量 SDK 用作配置载体。

xml 复制代码
<!-- 应用级(如 Firebase / 推送 SDK) -->
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="default" />

<!-- 引用资源 -->
<meta-data android:name="android.app.shortcuts"
    android:resource="@xml/shortcuts" />
属性 用途
android:name
android:value 直接值(字符串 / 整数 / 布尔等)
android:resource 资源引用(与 value 二选一)

10.2 <queries>(API 30+)

声明本应用需要查询的其他应用,详见 [1.7 模板](#1.7 模板 "#17-%E5%BA%94%E7%94%A8%E5%8F%AF%E8%A7%81%E6%80%A7%E6%9F%A5%E8%AF%A2api-30-%E5%BF%85%E5%8A%A0%E5%90%A6%E5%88%99-packagemanager-%E6%9F%A5%E4%B8%8D%E5%88%B0%E7%9B%AE%E6%A0%87%E5%BA%94%E7%94%A8")。

子元素 用途
<package android:name="..."/> 按包名声明
<intent>...</intent> 按能响应的 Intent 声明(含 action/category/data)
<provider android:authorities="..."/> 按 ContentProvider authority 声明

也可以申请 QUERY_ALL_PACKAGES 权限,但 Google Play 会审核用途 ,能用 <queries> 就不要用全包查询。

10.3 <profileable>(API 30+)

xml 复制代码
<profileable android:shell="true" />

允许性能分析工具(Android Studio Profiler / simpleperf)分析 release 包。shell="true" 表示允许从 adb shell 分析。

10.4 <attribution>(API 31+)

为隐私审计日志打标,标记某次权限使用来自应用的哪个功能。

xml 复制代码
<attribution android:tag="sharePhotos" android:label="@string/share_photos_label" />

代码端配合 Context.createAttributionContext("sharePhotos") 使用。

10.5 <overlay>(API 28+,仅 RRO 资源覆盖包使用)

声明该 APK 是运行时资源覆盖(Runtime Resource Overlay)包。仅 OEM / 系统定制开发涉及

属性 说明
android:targetPackage 目标应用包名
android:targetName 目标覆盖组(API 30+)
android:isStatic 是否静态覆盖(需预装)
android:priority 优先级

10.6 <instrumentation>(测试用)

声明测试仪器类,常被 AGP 自动生成。手写 Manifest 一般不接触。

属性 说明
android:name Instrumentation 子类名
android:targetPackage 被测应用包名
android:targetProcesses 目标进程(逗号分隔,* 全部,API 26+)
android:handleProfiling / android:functionalTest 测试配置

十一、屏幕兼容(简化)

现代项目通过资源限定符(-sw600dp / -w820dp 等)适配屏幕,以下元素基本已废弃,仅在维护老项目时关注

<supports-screens>【大部分废弃】

历史用于声明支持的屏幕尺寸(small / normal / large / xlarge)和密度。API 13 起已被 <uses-sdk minSdkVersion="..."/> 与资源限定符取代,新项目不要写。

<compatible-screens>【已废弃】

精确白名单式声明兼容屏幕配置,会严重限制 Play 商店可见设备,不推荐使用。

<supports-gl-texture>

xml 复制代码
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />

声明支持的 OpenGL 纹理压缩格式,仅游戏 / 图形应用需要,Play 商店据此过滤设备。


十二、版本里程碑速查

Android 版本 API 关键 Manifest 变化
5.0 Lollipop 21 documentLaunchModeautoRemoveFromRecentslockTaskModeallowEmbedded
6.0 Marshmallow 23 【里程碑】运行时权限体系;usesCleartextTraffic;自动备份 fullBackupContent
7.0 Nougat 24 resizeableActivitysupportsPictureInPicturedirectBootAwarenetworkSecurityConfig;FileProvider 必须用(不再允许 file://
7.1 Nougat 25 roundIcon;静态快捷方式 <shortcuts>
8.0 Oreo 26 【里程碑】禁止大部分隐式广播静态注册;通知渠道;startForegroundService() 必须显示通知colorModemaxAspectRatiovisibleToInstantApps
8.1 Oreo 27 showWhenLockedturnScreenOn
9.0 Pie 28 usesCleartextTraffic 默认 false;<overlay>前台 Service 必须申请 FOREGROUND_SERVICE 权限autoVerify 增强
10 Q 29 【里程碑】分区存储;foregroundServiceType 引入;minAspectRatiorequestLegacyExternalStoragesharedUserId 废弃
11 R 30 【里程碑】Package Visibility(<queries> 必加);<profileable><uses-native-library>preserveLegacyExternalStorage
12 S 31 【里程碑】exported 必填;<attribution>singleInstancePerTask;启动画面 API;pathAdvancedPattern
12L 32 大屏 / 折叠屏增强
13 Tiramisu 33 localeConfig 应用内语言;enableOnBackInvokedCallback 预测返回;POST_NOTIFICATIONS 运行时权限
14 UDC 34 【里程碑】foregroundServiceType 必填 + 子权限拆分;新增 health/remoteMessaging/shortService/specialUse/systemExemptedgrammaticalGender
15 35 requireContentUriPermissionFromCallertaskCloseBehavior;边到边显示默认开启

十三、避坑指南与最佳实践

13.1 编译期高频报错

  1. Apps targeting Android 12 require attribute android:exported<intent-filter> 的组件必须显式声明 exported。见 3.1

  2. Permission denied (FOREGROUND_SERVICE_xxx) API 34+ 启动前台 Service 时,foregroundServiceType + 同名 FOREGROUND_SERVICE_* 权限 + startForeground 的 type 必须三方一致。见 3.3

  3. SecurityException: Permission Denial: opening provider Provider 没设 exported="false" + grantUriPermissions="true",或调用方未通过 Intent.FLAG_GRANT_READ_URI_PERMISSION 拿到临时权限。

13.2 安全最佳实践

  • android:debuggable 永远不写(让 AGP 自动管理,release 包自动为 false)
  • android:allowBackup :含敏感数据时设为 false,或通过 dataExtractionRules 精细控制
  • android:usesCleartextTraffic="false" :默认禁用明文,必要时通过 networkSecurityConfig 白名单
  • 自定义权限默认用 signature :避免 normal 被任意应用获取
  • 对外组件最小暴露exported="true" 必加 permission 约束调用方

13.3 性能与体验

  • configChanges 不要滥用 :能用 ViewModel / onSaveInstanceState 处理重建则优先
  • largeHeap 慎用:不是内存泄漏的解决方案,会延缓 GC
  • 避免使用 singleInstance:除非真的需要独立任务栈(锁屏、悬浮窗)
  • 入口 Activity 用 singleTask:避免重复创建主页实例

13.4 迁移与兼容

  • package 属性 :AGP 7.3+ 已迁至 build.gradlenamespace,新项目可移除
  • minSdk / targetSdk :写在 build.gradle,不要写在 Manifest
  • 分区存储 :targetSdk≥30 必须迁移,requestLegacyExternalStorage 是临时方案
  • 包可见性 :targetSdk≥30 必须用 <queries>,否则 getInstalledApplications() 等 API 返回空
  • 通知权限 :targetSdk≥33 需运行时申请 POST_NOTIFICATIONS
  • 预测返回:targetSdk≥34 默认开启,未适配会出现返回手势异常

13.5 调试小技巧

xml 复制代码
<!--
  tools:* 命名空间仅供 AGP 合并 Manifest 时使用,
  打包发布前会被自动清理,不会出现在最终 APK 中。
-->
<application
    xmlns:tools="http://schemas.android.com/tools"
    android:allowBackup="false"
    tools:replace="android:allowBackup"
    tools:ignore="GoogleAppIndexingWarning">
    <!-- 移除某 SDK 注入的 Provider -->
    <provider
        android:name="com.thirdparty.sdk.InitProvider"
        android:authorities="${applicationId}.thirdparty-init"
        tools:node="remove" />
</application>
  • tools:replace="xxx" 用于覆盖被库 Manifest 强加的属性,解决合并冲突
  • tools:node="remove" 可移除被依赖库注入的元素(如某 SDK 强加的 Provider / Service)
  • tools:node="merge" / "replace" / "removeAll" 等还有更多策略,详见 Manifest 合并指南
  • 执行 ./gradlew :app:processDebugManifest 后查看 app/build/intermediates/merged_manifests/ 可看到最终合并产物

附录 A:属性字母序索引

android:xxx 首字母排序。§ 后为正文所在小节。同一属性在多元素下出现时只列主要章节。

A

属性 章节 简述
allowBackup §5.2 是否允许 ADB / 云备份
allowClearUserData §5.2 是否允许"清除数据"
allowEmbedded §6.1 Activity 可作为嵌入容器子项
allowTaskReparenting §6.1 任务重归属
alwaysRetainTaskState §6.1 长时间不重置任务状态
authorities §6.5 Provider 的 URI authority
autoRemoveFromRecents §6.1 finish 后自动从最近任务移除
autoVerify §7.1 App Links 域名自动验证

B--C

属性 章节 简述
banner §5.1 Android TV 启动器横幅
clearTaskOnLaunch §6.1 重新进入时清空栈中其上 Activity
colorMode §6.1 / §3.4 HDR / 广色域
configChanges §3.4 / §6.1 自行处理的配置变化

D

属性 章节 简述
dataExtractionRules §5.2 备份与设备迁移规则(API 31+)
debuggable §5.2 是否可调试(Release 必须 false)
description §5.1 / §8.3 应用 / 权限描述
directBootAware §6.3 / §6.4 / §6.5 直接启动可用
documentLaunchMode §6.1 文档型应用启动模式

E--F

属性 章节 简述
enabled §6 各组件 是否可被实例化
enableOnBackInvokedCallback §6.1 预测返回手势(API 33+)
excludeFromRecents §6.1 不显示在最近任务
exported §3.1 **【关键】**组件是否可被外部启动
finishOnTaskLaunch §6.1 用户离开任务后销毁
forceUriPermissions §6.5 强制使用 URI 权限(API 33+)
foregroundServiceType §3.3 / §6.3 **【关键】**前台 Service 用途
fullBackupContent §5.2 自动备份规则(API 23+)

G--I

属性 章节 简述
glEsVersion §9.1 OpenGL ES 版本
grammaticalGender §3.4 语法性别(API 34+)
grantUriPermissions §6.5 允许通过 Intent 临时授权
gwpAsanMode §5.6 GWP-ASan 内存检测
hardwareAccelerated §5.3 硬件加速
host §7.4 URI 主机
icon §5.1 / §6 图标
immersive §6.1 沉浸模式(已少用)
inheritShowWhenLocked §6.1 继承启动方的 showWhenLocked
initOrder §6.5 Provider 初始化顺序
installLocation §四 安装位置
isolatedProcess §6.3 隔离进程

L

属性 章节 简述
label §5.1 / §6 / §7.1 显示名
largeHeap §5.3 申请更大堆内存
launchMode §3.2 / §6.1 启动模式
localeConfig §5.5 应用内语言切换(API 33+)
lockTaskMode §6.1 锁定任务(Kiosk)
logo §5.1 ActionBar Logo

M

属性 章节 简述
maxAspectRatio / minAspectRatio §6.1 宽高比
maxRecents §6.1 最近任务最大条目
maxSdkVersion §8.1 / §9.3 最高支持 API
memtagMode §5.6 MTE 内存标记
mimeType / mimeGroup §7.4 MIME 类型
minSdkVersion §9.3 最低 API(建议放 gradle)
multiprocess §6.1 / §6.5 多进程实例化

N--P

属性 章节 简述
name §五~§九 类名 / 资源名
nativeHeapZeroInitialized §5.6 native 堆零初始化
networkSecurityConfig §5.4 网络安全配置
noHistory §6.1 离开即销毁
path / pathPrefix / pathPattern / pathAdvancedPattern §6.5 / §7.4 路径匹配
permission §5.2 / §6 / §8.3 权限要求
permissionGroup §8.3 所属权限组
port §7.4 URI 端口
preferMinimalPostProcessing §6.1 低延迟显示
preserveLegacyExternalStorage §5.5 保留旧外部存储访问
priority §7.1 意图过滤器优先级
process §5.2 / §6 自定义进程
protectionLevel §3.5 / §8.3 权限保护级别

R

属性 章节 简述
readPermission / writePermission §6.5 读 / 写权限
relinquishTaskIdentity §6.1 让出任务身份
required §9.1 / §9.2 是否必需
requestLegacyExternalStorage §5.5 绕过分区存储(临时)
requireContentUriPermissionFromCaller §6.1 调用方需持 URI 权限(API 35+)
resizeableActivity §5.5 / §6.1 支持分屏
resource §10.1 meta-data 资源引用
roundIcon §5.1 圆形启动图标(API 25+)

S

属性 章节 简述
scheme §7.4 URI scheme
screenOrientation §6.1 屏幕方向
sharedUserId / sharedUserLabel §四 【废弃】共享 UID
showWhenLocked §6.1 锁屏上显示(API 27+)
stopWithTask §6.3 任务移除时停止
supportsPictureInPicture §6.1 支持画中画
supportsRtl §5.3 支持 RTL 布局
syncable §6.5 【废弃】同步数据

T

属性 章节 简述
targetActivity §6.2 activity-alias 目标
targetPackage §10.5 / §10.6 覆盖 / 测试目标包
targetSdkVersion §9.3 **【关键】**目标 API(建议放 gradle)
taskAffinity §5.2 / §6.1 任务栈亲和性
testOnly §5.2 仅用于测试
theme §5.1 / §6.1 主题
turnScreenOn §6.1 启动时点亮屏幕(API 27+)

U--W

属性 章节 简述
uiOptions §5.3 ActionBar 选项
usesCleartextTraffic §5.4 是否允许 HTTP 明文
value §10.1 meta-data 直接值
versionCode / versionName §四 版本号(建议放 gradle)
visibleToInstantApps §6.5 对 Instant App 可见
vmSafeMode §5.2 关闭 JIT
windowSoftInputMode §6.1 软键盘窗口模式
相关推荐
七牛云行业应用9 小时前
OpenAI Codex手机版上线实战:iOS/Android 5步配置远程控制指南(2026)
android·ios·智能手机
背包客(wyq)9 小时前
YOLO手势检测识别模型Android端部署测试
android·yolo
peakmain99 小时前
基于 Hilt 实现 Android 网络库可插拔替换 Skill
android·架构·ai编程
黄林晴9 小时前
Google I/O 2026 Android开发者速览
android·android studio
DogDaoDao10 小时前
Android 播放器开发:从零构建全功能视频播放器
android·ffmpeg·音视频·播放器·mediacodec·编解码
真鬼12311 小时前
【Unity安卓】Unity 嵌入 Android Studio 完整流程
android·unity·android studio
星间都市山脉11 小时前
Windows 环境 Android 系统 APK 签名操作文档
android·windows
shuaiqinke11 小时前
【分享】OrbitV工具箱| 手表手环全能适配 |表盘应用一键装
android·智能手机