<应用>

语法:
<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
确定应用定义的 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:allowCrossUidActivitySwitchFromBelow

指定任务中此优先级以下的 activity 是否也可启动其他 activity 或完成相应任务。

从目标 SDK 级别 Build.VERSION_CODES.VANILLA_ICE_CREAM 开始,应用 可能被阻止启动新 activity 或完成其任务,除非顶层 activity 出于安全考虑,属于同一个 UID。

将此标志设为 true 可让启动的应用在以下情况下忽略该限制: 这个活动位于顶部与此 activity 的 UID 匹配的应用始终豁免。

如需了解详情,请参阅安全的后台 activity 启动

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 提供默认横幅;也可以与 <activity> 标记一起使用,为特定 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: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;GWP-ASan 是一种原生内存分配器功能,可帮助查找释放后使用和堆缓冲区溢出 bug。

默认值为 "never"

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

如果应用包含原生 (C/C++) 代码,但没有 DEX 代码,这应该 设为 "false"。如果设为 "true",在 APK 加载 不包含 DEX 代码,则应用可能无法加载。

此属性必须能够解释应用中包含的代码, 依赖项。如果应用依赖于采用 对于 Java/Kotlin 代码或直接在 JAR 中进行的代码,app:hasCode 必须为 "true" 或省略,因为这是默认值。

例如,您的应用可能支持 Play Feature Delivery,并且包含不会生成任何 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/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" 可让备份管理器尝试恢复,即使版本不匹配表明数据不兼容也是如此。使用时应格外小心!

此属性的默认值为 "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 的最小宽度和高度是多少,应用都不支持多窗口模式。

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

该属性是 API 级别 24 中的新增属性。

注意:任务的根 activity 值会应用于任务中启动的所有其他 activity。也就是说,如果任务的根 activity 可调整大小,系统会视为任务中的所有其他 activity 均可调整大小。如果根 activity 不可调整大小,则任务中的其他 activity 也不可调整大小。

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。

当您点击 Run 图标 时,Android Studio 会自动添加此属性。

android:theme
对样式资源的引用,用于为应用中的所有 activity 定义默认主题。各个 activity 可以通过设置自己的 theme 属性来替换默认值。如需了解详情,请参阅样式和主题
android:uiOptions
有关 activity 界面的额外选项。必须是以下某个值:
说明
"none"没有额外的界面选项。这是默认值。
"splitActionBarWhenNarrow"当水平空间受限时(比如手机处于竖屏模式时),在屏幕底部添加一个栏,以显示应用栏(也称为操作栏)中的操作项。系统会将应用栏分成顶部导航区和底部操作项栏,而不会在屏幕顶部的应用栏中显示少量操作项。这意味着操作项以及顶部的导航和标题元素均能获得适量空间。系统不会将菜单项拆分到两个栏中。它们始终一起出现。

如需详细了解应用栏,请参阅添加应用栏

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

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

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

强烈建议第三方库也遵循此设置。避免使用明文流量的主要原因是缺乏机密性、真实性和防止篡改的保护措施。网络攻击者可以窃听传输的数据,还可以在不被检测到的情况下修改数据。

此标志的遵循只能尽力而为,因为鉴于提供给 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>