<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 是否可以在下次将其 Affinity 的任务带到前台时,从启动它们的任务移动到具有 Affinity 的任务。如果可以移动,则为 "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
提供与其关联项的扩展图形横幅的可绘制资源。与 <application> 标记一起使用以提供所有应用程序活动的默认横幅,或与 <activity> 标记一起使用以提供特定活动的横幅。

系统使用横幅在 Android TV 主屏幕中表示应用。因此,仅为具有处理 CATEGORY_LEANBACK_LAUNCHER intent 的 Activity 的应用程序指定此项。

此属性设置为对包含图像的可绘制资源的引用,例如 "@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 文件格式的更多信息,请参阅自动备份的XML 配置语法

此属性是可选的。如果未指定,默认情况下,自动备份将包含您应用的大部分文件。有关更多信息,请参阅备份的文件

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

默认值为 "false"

android:gwpAsanMode
此属性指示是否使用GWP-ASan,这是一种原生内存分配器功能,有助于查找使用后释放和堆缓冲区溢出错误。

默认值为 "never"

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

如果应用程序包含原生 (C/C++) 代码,但没有 DEX 代码,则应将此属性设置为 "false"。如果 APK 不包含 DEX 代码但设置为 "true",则应用可能无法加载。

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

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

android:hasFragileUserData
当用户卸载应用时,是否向用户显示提示以保留应用数据。默认值为 "false"
android:hardwareAccelerated
是否为本应用中的所有 Activity 和 View 启用硬件加速渲染。如果启用,则为 "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/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/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" 允许备份管理器
  • $1
  • 即使版本不匹配表明数据不兼容,也要尝试恢复。请谨慎使用!

    此属性的默认值为 "false"

    android:requestLegacyExternalStorage

    应用程序是否希望选择退出分区存储

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

    android:requiredAccountType
    指定应用程序正常运行所需的帐户类型。如果您的应用需要一个 Account,则此属性的值必须与您的应用使用的帐户验证器类型相对应,如 AuthenticatorDescription 所定义,例如 "com.google"

    默认值为 null,表示应用程序可以不带任何帐户工作。

    由于受限配置文件无法添加帐户,因此指定此属性会使您的应用无法从受限配置文件访问,除非您还声明了具有相同值的 android:restrictedAccountType

    注意:如果帐户数据可能泄露个人身份信息,则务必声明此属性并将 android:restrictedAccountType 设置为 null,以便受限配置文件无法使用您的应用访问属于所有者用户的个人信息。

    此属性是在 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 的 affinity 名称,但那些通过自己的 taskAffinity 属性设置不同 affinity 的 Activity 除外。有关更多信息,请参阅该属性。

    默认情况下,应用程序中的所有 Activity 都共享相同的 affinity。该 affinity 的名称与 <manifest> 元素设置的包名称相同。

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

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

    android:theme
    对定义应用程序中所有 Activity 的默认主题的样式资源的引用。各个 Activity 可以通过设置自己的 theme 属性来覆盖默认值。有关更多信息,请参阅样式和主题
    android:uiOptions
    Activity 界面的额外选项。必须是以下值之一
    描述
    "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 网络安全配置,则此标志在 Android 7.0 (API 级别 24) 及更高版本上将被忽略。

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

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

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

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