<application>

语法
<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:allowCrossUidActivitySwitchFromBelow=["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: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
应用程序定义的活动是否可以从启动它们的 Task 移动到它们具有关联性的 Task(当该 Task 下次被调到前台时)。如果可以移动,则为 "true";如果必须保留在启动它们的 Task 中,则为 "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:allowCrossUidActivitySwitchFromBelow

指定此任务中此活动下方的活动是否也可以启动其他活动或结束任务。

从目标 SDK 级别Build.VERSION_CODES.VANILLA_ICE_CREAM开始,出于安全原因,应用可能无法启动新活动或结束其任务,除非该任务的顶部活动属于相同的 UID。

将此标志设置为true将允许启动应用忽略此限制(如果此活动位于顶部)。与此活动 UID 匹配的应用始终不受此限制。

更多信息,请参阅安全的后台活动启动

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意图的活动的应用程序指定此属性。

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

更多信息,请参阅提供主屏幕横幅

android:dataExtractionRules

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

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

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

默认值为"true"

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,这是一种原生内存分配器功能,有助于查找使用后释放和堆缓冲区溢出错误。

默认值为"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 文件的功能模块(DEX 文件是针对 Android 平台优化的字节码)。如果是这样,您需要在模块的清单文件中将此属性设置为"false",以避免运行时错误。

android:hasFragileUserData
是否在用户卸载应用时向用户显示提示,以保留应用数据。默认值为"false"
android:hardwareAccelerated
是否为此应用程序中的所有活动和视图启用硬件加速渲染。如果启用,则为"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
整个应用程序的徽标以及活动的默认徽标。此属性设置为对包含图像的可绘制资源的引用,例如"@drawable/logo"。没有默认徽标。
android:manageSpaceActivity
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"允许备份管理器即使在版本不匹配表明数据不兼容的情况下也尝试还原。谨慎使用!

此属性的默认值为"false"

android:requestLegacyExternalStorage

应用程序是否要选择退出作用域存储

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

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

默认值为 null,表示应用程序可以在无需任何帐户的情况下运行。

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

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

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

android:resizeableActivity

指定应用是否支持多窗口模式。您可以在<activity><application>元素中设置此属性。

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

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

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

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

  • 大型屏幕 (sw >= 600dp):所有应用都支持多窗口模式。此属性指示应用是否可以调整大小,而不是应用是否支持多窗口模式。如果resizeableActivity="false",则在必要时将应用置于兼容性模式以符合显示尺寸。
  • 小型屏幕 (sw < 600dp):如果resizeableActivity="true"并且主活动的最小宽度和最小高度符合多窗口要求,则应用支持多窗口模式。如果resizeableActivity="false",则无论活动的最小宽度和高度如何,应用都不支持多窗口模式。

注意:设备制造商可以覆盖 API 级别 31 的行为。

此属性在 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
应用于应用程序中所有活动的亲和性名称,但不包括使用其自己的taskAffinity属性设置不同亲和性的活动。有关更多信息,请参阅该属性。

默认情况下,应用程序中的所有活动共享相同的亲和性。该亲和性的名称与由<manifest>元素设置的包名称相同。

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

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

android:theme
对定义应用程序中所有活动的默认主题的样式资源的引用。各个活动可以通过设置其自己的theme属性来覆盖默认值。有关更多信息,请参阅样式和主题
android:uiOptions
活动的 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()读取它来遵守此标志。

注意:对于目标 API 级别为 26 或更高的应用程序,WebView会遵守此属性。

在应用开发过程中,可以使用 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>