<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 intent 的活动的应用程序指定此项。

此属性设置为对包含图像的可绘制资源的引用,例如"@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 文件的功能模块,这些模块是针对 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()读取此标志来遵循此标志。

注意: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>