<manifest>

语法
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:sharedUserMaxSdkVersion="integer"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    ...
</manifest>

包含在

必须包含
<application>
可以包含
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>

描述
AndroidManifest.xml 文件的根元素。它必须包含一个 <application> 元素,并指定 xmlns:androidpackage 属性。
属性
xmlns:android
定义 Android 命名空间。此属性始终设置为 "http://schemas.android.com/apk/res/android"
package
APK 清单文件中的 package 属性的值表示您应用的全局唯一应用 ID。它的格式与 Android 应用的完整 Java 语言风格包名相同。名称可以包含大写或小写字母、数字和下划线 ('_')。但是,单个包名部分只能以字母开头。

小心不要更改 package 值,因为这实际上会创建一个新应用。先前应用版本的用户不会收到更新,也无法在旧版本和新版本之间传输其数据。

在基于 Gradle 的构建系统中,从 AGP 7.3 开始,不要直接在源清单文件中设置 package 值。有关更多信息,请参阅 设置应用 ID

android:sharedUserId

此常量从 API 级别 29 开始已弃用。
共享用户 ID 会导致包管理器内部出现非确定性行为。因此,强烈建议不要使用它们,它们可能会在 Android 的未来版本中被删除。相反,使用适当的通信机制(例如服务和内容提供程序)来促进共享组件之间的互操作性。现有应用无法删除此值,因为不支持从共享用户 ID 迁移。在这些应用中,添加 android:sharedUserMaxSdkVersion="32" 以避免在新的用户安装上使用共享用户 ID。

Linux 用户 ID 的名称,它与其他应用共享。默认情况下,Android 为每个应用分配其唯一的用户 ID。但是,如果此属性对两个或多个应用设置为相同的值,则它们将共享相同的 ID,前提是它们的证书集相同。具有相同用户 ID 的应用可以访问彼此的数据,并且如果需要,可以在同一个进程中运行。

android:targetSandboxVersion
此应用使用的目标沙盒。沙盒版本号越高,安全级别越高。其默认值为 1;您也可以将其设置为 2。将此属性设置为 2 会将应用程序切换到不同的 SELinux 沙盒。

以下限制适用于级别 2 沙盒

对于以 Android 8.0(API 级别 26)或更高版本为目标的 Android Instant Apps,此属性设置为 2。您可以在已安装的应用程序版本中将沙盒级别设置为较不严格的级别 1。但是,如果您这样做,您的应用程序不会将即时应用程序的应用程序数据保留到已安装的应用程序版本。您必须将已安装应用程序的沙盒值设置为 2,才能使数据从即时应用程序保留到已安装的版本。

安装应用程序后,您只能将其目标沙盒值更新为更高的值。要降级目标沙盒值,请卸载应用程序,并将其替换为清单中此属性具有较低值的版本。

android:sharedUserLabel

此常量从 API 级别 29 开始已弃用。
共享用户 ID 会导致包管理器内的非确定性行为。因此,强烈建议不要使用它们,并且可能会在 Android 的未来版本中删除。相反,请使用适当的通信机制(例如服务和内容提供者)来促进共享组件之间的互操作性。现有应用程序无法删除此值,因为不支持从共享用户 ID 迁移。

共享用户 ID 的用户可读标签。该标签设置为对字符串资源的引用。它不能是原始字符串。

此属性在 API 级别 3 中引入。仅当 sharedUserId 属性也设置时,它才有意义。

android:sharedUserMaxSdkVersion

共享用户 ID 会导致包管理器内的非确定性行为。因此,强烈建议不要使用它们,并且可能会在 Android 的未来版本中删除。相反,请使用适当的通信机制(例如服务和内容提供者)来促进共享组件之间的互操作性。

系统仍使用 android:sharedUserId 的最大 SDK 版本。如果您的应用程序在新设备上安装在运行高于指定值的 SDK 版本的设备上,您的应用程序的行为就好像您从未定义过 android:sharedUserId 一样。

此属性在 API 级别 33 中引入。仅当 sharedUserId 属性也设置时,它才有意义。

android:versionCode
内部版本号。此数字仅用于确定一个版本是否比另一个版本更新,数字越大表示版本越新。这不是向用户显示的版本号,该版本号由 versionName 属性设置。

该值设置为大于 0 的正整数。您可以根据需要定义它,只要每个后续版本都有一个更高的数字即可。例如,它可以是构建号,或者您可以将 “x.y” 格式的版本号转换为整数,方法是将 “x” 和 “y” 分别编码到低 16 位和高 16 位中。或者,您可以在每次发布新版本时将数字增加 1。

android:versionName
向用户显示的版本号。此属性设置为原始字符串或对字符串资源的引用。该字符串除了向用户显示外没有其他用途。 versionCode 属性保存内部使用的重要版本号。
android:installLocation
应用程序的默认安装位置。接受以下关键字字符串

描述
"internalOnly" 应用程序仅安装在内部设备存储上。如果设置了此项,应用程序绝不会安装在外部存储上,例如 SD 卡。如果内部存储已满,则系统不会安装应用程序。如果您没有定义 android:installLocation,这是默认行为。
"auto" 应用程序可以安装在外部存储上,但系统默认情况下会在内部存储上安装应用程序。如果内部存储已满,则系统会将其安装在外部存储上。安装后,用户可以通过系统设置将应用程序移动到内部存储或外部存储。
"preferExternal" 应用程序希望安装在外部存储上。系统无法保证会满足此请求。如果外部媒体不可用或已满,应用程序可能会安装在内部存储上。安装后,用户可以通过系统设置将应用程序移动到内部存储或外部存储。

注意: 默认情况下,您的应用程序安装在内部存储上,并且无法安装在外部存储上,除非您将此属性定义为 "auto""preferExternal"

当应用程序安装在外部存储上时

  • APK 文件将保存到外部存储,但任何应用程序数据(例如数据库)仍将保存到内部设备内存。
  • 保存 APK 文件的容器使用密钥进行加密,该密钥允许应用程序仅在安装它的设备上运行。用户无法将 SD 卡传输到另一台设备并使用安装在卡上的应用程序。同一台设备可以使用多个 SD 卡。
  • 根据用户的请求,应用程序可以移动到内部存储。

用户也可能要求将应用程序从内部存储移动到外部存储。但是,如果此属性设置为 "internalOnly"(这是默认设置),则系统不允许用户将应用程序移动到外部存储。

有关使用此属性的更多信息,包括如何维护向后兼容性,请参阅 应用程序安装位置

在以下版本中引入:API 级别 8。

在以下版本中引入
所有属性的 API 级别 1,除非属性描述中另有说明。

另请参阅
<application>