<application>

语法
<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:allowNativeHeapPointerTagging=["true" | "false"]
             android:appCategory=["accessibility" | "audio" | "game" |
             "image" | "maps" | "news" | "productivity" | "social" | "video"]
             android:backupAgent="string"
             android:backupInForeground=["true" | "false"]
             android:banner="drawable resource"
             android:dataExtractionRules="string resource"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:enableOnBackInvokedCallback=["true" | "false"]
             android:extractNativeLibs=["true" | "false"]
             android:fullBackupContent="string"
             android:fullBackupOnly=["true" | "false"]
             android:gwpAsanMode=["always" | "never"]
             android:hasCode=["true" | "false"]
             android:hasFragileUserData=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:isGame=["true" | "false"]
             android:isMonitoringTool=["parental_control" | "enterprise_management" |
             "other"]
             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:requestLegacyExternalStorage=["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>
包含于
<manifest>
可包含
<activity>
<activity-alias>
<meta-data>
<service>
<receiver>
<profileable>
<provider>
<uses-library>
<uses-native-library>
描述

应用的声明。此元素包含用于声明应用的各个子组件的子元素,并包含可影响所有组件的属性。

许多此类属性,例如 iconlabelpermissionprocesstaskAffinityallowTaskReparenting,为组件元素的相应属性设置了默认值。其他属性,例如 debuggableenableddescriptionallowClearUserData,则为整个应用设置值,并且不会被组件覆盖。

属性
android:allowTaskReparenting
应用定义的 Activity 是否可以在与 Activity 具有亲和性的任务下次被带到前台时,从启动它们的任务移动到该任务。如果可以移动,则为 "true";如果必须留在其启动时的任务中,则为 "false"。默认值为 "false"

<activity> 元素拥有自己的 allowTaskReparenting 属性,该属性可以覆盖此处设置的值。

android:allowBackup

是否允许应用参与备份和恢复基础设施。如果此属性设置为 "false",则永远不会对应用执行备份或恢复,即使是通过通常会导致所有应用数据使用 adb 保存的完整系统备份也是如此。此属性的默认值为 "true"

注意: 对于以 Android 12(API 级别 31)或更高版本为目标的应用,此行为会有所不同。在某些设备制造商的设备上,你无法禁用应用文件的设备到设备迁移。

但是,即使你的应用以 Android 12(API 级别 31)或更高版本为目标,也可以通过将此属性设置为 "false" 来禁用应用文件的基于云的备份和恢复。

有关详情,请参阅描述以 Android 12(API 级别 31)或更高版本为目标的应用的行为变更页面的备份和恢复部分。

android:allowClearUserData

是否允许应用重置用户数据。此数据包括标志(例如用户是否已看到入门工具提示)以及用户可自定义的设置和偏好。此属性的默认值为 "true"

注意:只有属于系统映像一部分的应用才能明确声明此属性。第三方应用不能在其清单文件中包含此属性。

有关详情,请参阅数据备份概览

android:allowNativeHeapPointerTagging

应用是否启用堆指针标记功能。此属性的默认值为 "true"

注意: 禁用此功能不能解决潜在的代码健康问题。未来的硬件设备可能不支持此清单标记。

有关详情,请参阅标记指针

android:appCategory

声明此应用的类别。类别用于将多个应用分组到有意义的组中,例如在汇总电池、网络或磁盘使用情况时。仅为那些非常适合特定类别的应用定义此值。

必须是以下常量值之一。

描述
accessibility主要是无障碍应用的应用,例如屏幕阅读器。
audio主要处理音频或音乐的应用,例如音乐播放器。
game主要是游戏的应用。
image主要处理图片或照片的应用,例如相机或图库应用。
maps主要是地图应用的应用,例如导航应用。
news主要是新闻应用的应用,例如报纸、杂志或体育应用。
productivity主要是效率应用的应用,例如云存储或工作场所应用。
social主要是社交应用的应用,例如消息、通信、电子邮件或社交网络应用。
video主要处理视频或电影的应用,例如流式传输视频应用。

android:backupAgent
实现应用备份代理的类的名称,该类是 BackupAgent 的子类。属性值为完全限定的类名,例如 "com.example.project.MyBackupAgent"。但是,作为一种简写方式,如果名称的第一个字符是句点(例如 ".MyBackupAgent"),则会将其附加到 <manifest> 元素中指定的软件包名称。

没有默认值。名称必须是特定的。

android:backupInForeground
指示即使应用处于前台等效状态,也可以对此应用执行自动备份操作。系统在自动备份操作期间会关闭应用,因此请谨慎使用此属性。将此标志设置为 "true" 可能会在应用处于活跃状态时影响其行为。

默认值为 "false",这意味着操作系统会在应用在前台运行时避免备份应用,例如音乐应用在使用 startForeground() 状态下的服务播放音乐。

android:banner
一个Drawable 资源,为其关联项提供一个扩展图形横幅。与 <application> 标记配合使用,为所有应用 Activity 提供默认横幅,或与 <activity> 标记配合使用,为特定 Activity 提供横幅。

系统使用此横幅在 Android TV 主屏幕中表示应用。因此,仅对具有处理 CATEGORY_LEANBACK_LAUNCHER Intent 的 Activity 的应用指定此值。

此属性设置为对包含图像的 drawable 资源的引用,例如 "@drawable/banner"。没有默认横幅。

有关详情,请参阅提供主屏幕横幅

android:dataExtractionRules

应用可以将此属性设置为 XML 资源,在该资源中指定规则,以确定哪些文件和目录可以作为备份或传输操作的一部分从设备复制。

有关 XML 文件格式的信息,请参阅备份和恢复

android:debuggable
应用是否可以调试,即使在用户模式下的设备上运行。如果可以,则为 "true";如果不能,则为 "false"。默认值为 "false"
android:description
关于应用的用户可读文本,比应用标签更长、更具描述性。此值设置为对字符串资源的引用。与标签不同,它不能是原始字符串。没有默认值。
android:enabled
Android 系统是否可以实例化应用的组件。如果可以,则为 "true";如果不能,则为 "false"。如果值为 "true",则每个组件的 enabled 属性决定该组件是否启用。如果值为 "false",则会覆盖组件特定值,并且所有组件都将被禁用。

默认值为 "true"

android:enableOnBackInvokedCallback

此标志允许你在应用级别退出预测性系统动画。

android:enableOnBackInvokedCallback=false 设置为在应用级别关闭预测性返回动画,并指示系统忽略对 OnBackInvokedCallback 平台 API 的调用。

android:extractNativeLibs

从 AGP 4.2.0 开始,DSL 选项 useLegacyPackaging 替代了 extractNativeLibs 清单属性。请在应用的 build.gradle 文件中使用 useLegacyPackaging,而不是在清单文件中使用 extractNativeLibs 来配置原生库压缩行为。有关详情,请参阅发布说明使用 DSL 打包压缩的原生库

此属性指示软件包安装程序是否将原生库从 APK 解压到文件系统。如果设置为 "false",则你的原生库会未压缩地存储在 APK 中。尽管你的 APK 可能更大,但你的应用加载速度会更快,因为库在运行时直接从 APK 加载。

extractNativeLibs 的默认值取决于 minSdkVersion 和你使用的 AGP 版本。在大多数情况下,默认行为可能就是你想要的,无需显式设置此属性。

android:fullBackupContent
此属性指向一个 XML 文件,其中包含自动备份的完整备份规则。这些规则决定了哪些文件会被备份。有关详情,请参阅自动备份的XML 配置语法

此属性是可选的。如果未指定,则默认情况下,自动备份会包含你应用的大部分文件。有关详情,请参阅被备份的文件

android:fullBackupOnly
此属性指示是否在支持自动备份的设备上使用自动备份。如果设置为 "true",则当你的应用安装在运行 Android 6.0(API 级别 23)或更高版本的设备上时,会自动执行备份。在较旧的设备上,你的应用会忽略此属性并执行键/值备份

默认值为 "false"

android:gwpAsanMode
此属性指示是否使用 GWP-ASan,这是一个原生内存分配器功能,可帮助查找释放后使用 (use-after-free) 和堆缓冲区溢出 (heap-buffer-overflow) 错误。

默认值为 "never"

android:hasCode
应用是否包含任何 DEX 代码,即使用 Kotlin 或 Java 编程语言编写的代码。如果包含,则为 "true";如果不是,则为 "false"。当值为 "false" 时,系统在启动组件时不会尝试加载任何应用代码。默认值为 "true"

如果应用包含原生 (C/C++) 代码,但不包含 DEX 代码,则应将其设置为 "false"。如果在 APK 不包含 DEX 代码时将其设置为 "true",应用可能会加载失败。

此属性必须考虑依赖项在应用中包含的代码。如果应用依赖于使用 Java/Kotlin 代码的 AAR,或直接依赖于 JAR,则 app:hasCode 必须为 "true",或省略(默认值即为 "true")。

例如,你的应用可能支持 Play 功能分发,并包含不生成任何 DEX 文件(针对 Android 平台优化的字节码)的功能模块。如果是这样,你需要在模块的清单文件中将此属性设置为 "false",以避免运行时错误。

android:hasFragileUserData
用户卸载应用时,是否向用户显示保留应用数据的提示。默认值为 "false"
android:hardwareAccelerated
此应用中所有 Activity 和视图是否启用硬件加速渲染。如果启用,则为 "true";如果禁用,则为 "false"。如果你将 minSdkVersiontargetSdkVersion 设置为 "14" 或更高版本,则默认值为 "true"。否则,默认值为 "false"

从 Android 3.0(API 级别 11)开始,应用可以使用硬件加速的 OpenGL 渲染器来提高许多常见 2D 图形操作的性能。启用硬件加速渲染器后,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数操作都会加速。

这使得动画更流畅、滚动更平滑,并且整体响应能力得到提高,即使对于未明确使用框架 OpenGL 库的应用也是如此。

并非所有 OpenGL 2D 操作都已加速。如果你启用硬件加速渲染器,请测试你的应用,以便它可以在没有错误的情况下使用该渲染器。

有关详情,请阅读硬件加速指南。

android:icon
表示整个应用的图标,也是应用各个组件的默认图标。请参阅 <activity><activity-alias><service><receiver><provider> 元素的各个 icon 属性。

此属性设置为对包含图像的 drawable 资源的引用,例如 "@drawable/icon"。没有默认图标。

android:isGame
应用是否是游戏。系统可能会将归类为游戏的应用分组在一起,或将其与其他应用分开显示。默认值为 "false"
android:isMonitoringTool

指示此应用旨在监控其他个人。

注意:如果应用在清单中声明了此属性,开发者必须遵循跟踪软件政策才能将应用发布到 Google Play。

没有默认值。开发者必须指定以下值之一:

描述
"parental_control"应用专为家长控制而设计,特别面向希望保障孩子安全的家长。
"enterprise_management"应用专为希望管理和跟踪发给员工的设备的企业而设计。
"other"应用适用于本表中未另行指定的用例。
android:killAfterRestore

应用在完整系统恢复操作期间恢复设置后是否终止。单软件包恢复操作永远不会导致应用关闭。完整系统恢复操作通常只在手机初次设置时发生一次。第三方应用通常不需要使用此属性。

默认值为 "true",这意味着应用在完整系统恢复期间完成处理数据后会终止。

android:largeHeap

应用的进程是否使用大 Dalvik 堆创建。这适用于为应用创建的所有进程。它仅适用于加载到进程中的第一个应用。如果你使用共享用户 ID 让多个应用使用一个进程,则它们都必须一致地使用此选项,以避免不可预测的结果。

大多数应用不需要此选项,而是专注于降低整体内存使用以提高性能。启用此选项也不能保证可用内存的固定增加,因为某些设备受其总可用内存的限制。

要在运行时查询可用内存大小,请使用 getMemoryClass()getLargeMemoryClass() 方法。

android:label
表示整个应用的用户可读标签,也是应用各个组件的默认标签。请参阅 <activity><activity-alias><service><receiver><provider> 元素的各个 label 属性。

此标签设置为对字符串资源的引用,因此可以像用户界面中的其他字符串一样本地化。但是,为了在开发应用时方便起见,它也可以设置为原始字符串。

android:logo
表示整个应用的徽标,也是 Activity 的默认徽标。此属性设置为对包含图像的 drawable 资源的引用,例如 "@drawable/logo"。没有默认徽标。
android:manageSpaceActivity
系统启动的 Activity 子类的完全限定名称,用于让用户管理应用在设备上占用的内存。此 Activity 也使用 <activity> 元素声明。
android:name
为应用实现的 Application 子类的完全限定名称。启动应用进程时,系统会在实例化应用的任何组件之前先实例化此类。

子类是可选的。大多数应用不需要子类。如果没有子类,Android 会使用基本 Application 类的一个实例。

android:networkSecurityConfig

指定包含应用网络安全配置的 XML 文件的名称。该值是对包含配置的 XML 资源文件的引用。

此属性是在 API 级别 24 中添加的。

android:permission
客户端与应用交互所需的权限名称。此属性是设置适用于应用所有组件的权限的便捷方式。设置单个组件的 permission 属性会覆盖此属性。

有关权限的详情,请参阅应用清单概览中的权限部分和安全提示

android:persistent
应用是否始终保持运行。如果保持运行,则为 "true";如果不是,则为 "false"。默认值为 "false"。应用通常不设置此标志。持久化模式仅适用于某些系统应用。
android:process
应用所有组件运行所在的进程名称。每个组件都可以通过设置自己的 process 属性来覆盖此默认值。

默认情况下,当应用的第一个组件需要运行时,Android 会为应用创建一个进程。所有组件都在该进程中运行。默认进程的名称与 <manifest> 元素设置的软件包名称相同。

通过将此属性设置为与另一个应用共享的进程名称,可以安排两个应用的组件在同一个进程中运行,但前提是这两个应用还共享一个用户 ID 并使用相同的证书签名。

如果分配给此属性的名称以冒号(:)开头,则在需要时会创建一个仅应用于应用的新私有进程。如果进程名称以小写字符开头,则会创建一个具有该名称的全局进程。全局进程可以与其他应用共享,从而减少资源使用。

android:restoreAnyVersion
指示应用已准备好尝试恢复任何备份的数据集,即使备份是由比当前设备上安装的应用更新的版本存储的。将此属性设置为 "true" 允许 Backup Manager
  • $1
  • 尝试恢复,即使版本不匹配表明数据不兼容。请谨慎使用!

    此属性的默认值为 "false"

    android:requestLegacyExternalStorage

    应用是否希望退出分区存储

    注意:根据与政策或应用兼容性相关的变更,系统可能不会遵守此退出请求。

    android:requiredAccountType
    指定应用正常运行所需的账号类型。如果你的应用需要 Account,则此属性的值必须与你的应用使用的账号验证器类型相对应,如 AuthenticatorDescription 定义的那样,例如 "com.google"

    默认值为 null,表示应用可以不使用任何账号即可工作。

    由于受限个人资料无法添加账号,指定此属性会导致你的应用在受限个人资料中不可用,除非你同时使用相同的值声明 android:restrictedAccountType

    注意:如果账号数据可能泄露个人身份信息,务必声明此属性并将 android:restrictedAccountType 留空,以便受限个人资料无法使用你的应用访问属于所有者用户的个人信息。

    此属性是在 API 级别 18 中添加的。

    android:resizeableActivity

    指定应用是否支持多窗口模式

    你可以在 <activity><application> 元素中设置此属性。

    如果将此属性设置为 "true",用户可以在分屏和自由模式下启动 Activity。如果将此属性设置为 "false",则无法对应用进行多窗口环境测试或优化。系统仍然可以应用兼容性模式将 Activity 置于多窗口模式。

    将此属性设置为 "true" 并不能保证屏幕上没有其他可见的多窗口模式下的应用,例如画中画或在其他显示屏上。因此,设置此标志并不意味着你的应用拥有独占资源访问权限。

    对于以 API 级别 24 或更高版本为目标的应用,默认值为 "true"

    如果你的应用以 API 级别 31 或更高版本为目标,则此属性在小屏幕和大屏幕上的工作方式有所不同:

    • 大屏幕(sw >= 600dp):所有应用都支持多窗口模式。该属性表示应用是否可以调整大小,而不是应用是否支持多窗口模式。如果 resizeableActivity="false",则在需要时会将应用置于兼容性模式以适应显示尺寸。
    • 小屏幕(sw < 600dp):如果 resizeableActivity="true" 且主 Activity 的最小宽度和最小高度在多窗口要求范围内,则应用支持多窗口模式。如果 resizeableActivity="false",则无论 Activity 的最小宽度和高度如何,应用都不支持多窗口模式。

    任务的根 Activity 值适用于在该任务中启动的所有其他 Activity。也就是说,如果任务的根 Activity 可调整大小,则系统会将该任务中的所有其他 Activity 视为可调整大小。如果根 Activity 不可调整大小,则任务中的其他 Activity 也不可调整大小。

    此属性是在 API 级别 24 中添加的。

    android:restrictedAccountType
    指定此应用所需的账号类型,并指示受限个人资料可以访问属于所有者用户的此类账号。如果你的应用需要 Account 并且受限个人资料可以访问主要用户的账号,则此属性的值必须与你的应用使用的账号验证器类型相对应,如 AuthenticatorDescription 定义的那样,例如 "com.google"

    默认值为 null,表示应用可以不使用任何账号即可工作。

    注意:指定此属性允许受限个人资料使用属于所有者用户的账号来使用你的应用,这可能会泄露个人身份信息。如果账号可能泄露个人详情,不要使用此属性。请改用声明 android:requiredAccountType 属性来使你的应用在受限个人资料中不可用。

    此属性是在 API 级别 18 中添加的。

    android:supportsRtl

    声明你的应用是否愿意支持从右到左 (RTL) 布局。

    如果此属性设置为 "true"targetSdkVersion 设置为 17 或更高版本,则系统会激活并使用各种 RTL API,以便你的应用可以显示 RTL 布局。如果此属性设置为 "false",或者 targetSdkVersion 设置为 16 或更低版本,则 RTL API 会被忽略或不起作用,并且无论用户选择的语言区域关联的布局方向如何,你的应用行为都相同。也就是说,你的布局始终是从左到右。

    此属性的默认值为 "false"

    此属性是在 API 级别 17 中添加的。

    android:taskAffinity
    一个亲和性名称,适用于应用内的所有 Activity,但通过自己的 taskAffinity 属性设置不同亲和性的 Activity 除外。有关详情,请参阅该属性。

    默认情况下,应用内的所有 Activity 共享相同的亲和性。该亲和性的名称与 <manifest> 元素设置的软件包名称相同。

    android:testOnly
    指示此应用是否仅用于测试目的。例如,它可能会暴露自身以外的功能或数据,从而造成安全漏洞,但对测试有用。此类 APK 只能通过 adb 安装。你无法将其发布到 Google Play。

    当你点击 运行 时,Android Studio 会自动添加此属性。

    android:theme
    对定义应用中所有 Activity 的默认主题的样式资源的引用。单个 Activity 可以通过设置自己的 theme 属性来覆盖默认设置。有关详情,请参阅样式和主题
    android:uiOptions
    Activity UI 的额外选项。必须是以下值之一:
    描述
    "none"没有额外的 UI 选项。这是默认值。
    "splitActionBarWhenNarrow"在屏幕底部添加一个条,以便在水平空间有限时(例如在手持设备上的纵向模式下)在应用栏(也称为操作栏)中显示操作项。应用栏不是在屏幕顶部的应用栏中显示少量操作项,而是分成顶部的导航部分和底部的操作项栏。这意味着为操作项以及顶部的导航和标题元素提供了合理的空间。菜单项不会在两个条之间拆分。它们始终一起显示。

    有关应用栏的详情,请参阅添加应用栏

    此属性是在 API 级别 14 中添加的。

    android:usesCleartextTraffic
    指示应用是否打算使用明文网络流量,例如明文 HTTP。对于以 API 级别 27 或更低版本为目标的应用,默认值为 "true"。对于以 API 级别 28 或更高版本为目标的应用,默认值为 "false"

    当属性设置为 "false" 时,平台组件(例如 HTTP 和 FTP 堆栈)、DownloadManagerMediaPlayer 会拒绝应用使用明文流量的请求。

    强烈建议第三方库也遵守此设置。避免明文流量的主要原因在于缺乏机密性、真实性以及针对篡改的保护。网络攻击者可以窃听传输的数据,并且可以在不被检测到的情况下修改数据。

    此标志是尽力而为地遵守的,因为考虑到 Android 应用被授予的访问级别,不可能阻止来自 Android 应用的所有明文流量。例如,不期望 Socket API 遵守此标志,因为它无法确定其流量是否为明文。

    但是,应用的大多数网络流量由更高级别的网络堆栈和组件处理,这些组件可以通过从 ApplicationInfo.flagsNetworkSecurityPolicy.isCleartextTrafficPermitted() 读取此标志来遵守。

    注意: WebView 对以 API 级别 26 及更高版本为目标的应用遵守此属性。

    在应用开发期间,可以使用 StrictMode 来识别应用中的任何明文流量。有关详情,请参阅 StrictMode.VmPolicy.Builder.detectCleartextNetwork()

    此属性是在 API 级别 23 中添加的。

    如果在 Android 7.0(API 级别 24)及更高版本上存在 Android 网络安全配置,则会忽略此标志。

    android:vmSafeMode
    指示应用是否希望虚拟机 (VM) 在安全模式下运行。默认值为 "false"

    此属性是在 API 级别 8 中添加的,当时值为 "true" 会禁用 Dalvik 即时 (JIT) 编译器。

    此属性在 API 级别 22 中进行了调整,当时值为 "true" 会禁用 ART 预先 (AOT) 编译器。

    引入于
    API 级别 1
    另请参阅
    <activity>
    <service>
    <receiver>
    <provider>