<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

指定此 task 下方的活动是否也可以启动其他活动或完成 task。

从目标 SDK 级别 Build.VERSION_CODES.VANILLA_ICE_CREAM 开始,应用可能会被阻止启动新活动或完成其 task,除非此类 task 的顶部活动属于相同的 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 文件的功能模块,该模块是针对 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>