<清单>

语法:
<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 版本中可能会移除它们。相反,请使用适当的通信机制(例如服务和 Content Provider),在共享组件之间实现互操作性。现有应用无法移除此值,因为不支持迁移共享用户 ID。在这些应用中,请添加 android:sharedUserMaxSdkVersion="32" 以免在新用户安装时使用共享用户 ID。

与其他应用共享的 Linux 用户 ID 的名称。 默认情况下,Android 会为每个应用分配其唯一用户 ID。 不过,如果针对两个或两个以上的应用将此属性设置为相同的值,只要这些应用的证书集完全相同,它们就会共享相同的 ID。具有相同用户 ID 的应用可以访问彼此的数据,如果需要的话,还可以在同一进程中运行。

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

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

对于以 Android 8.0(API 级别 26)或更高版本为目标平台的 Android 免安装应用,此属性必须设置为 2。您可以在应用的已安装版本中将沙盒级别设置为限制比较宽松的级别 1。但如果这样做,您的应用就不会将免安装应用中的应用数据保留到应用的已安装版本。您必须将已安装应用的沙盒值设置为 2,才能将免安装应用中的数据保留到已安装版本。

应用安装后,您只能将其目标沙盒值更新为更高的值。 若要对目标沙盒值进行降级,请卸载该应用,并将其替换为其清单包含此属性的更低值的版本。

android:sharedUserLabel

此常量自 API 级别 29 起已废弃。
共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它们,并且我们在未来的 Android 版本中可能会移除它们。相反,请使用适当的通信机制(例如服务和 Content Provider),在共享组件之间实现互操作性。现有应用无法移除此值,因为不支持迁移共享用户 ID。

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

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

android:sharedUserMaxSdkVersion

共享用户 ID 会在软件包管理系统中导致具有不确定性的行为。因此,强烈建议您不要使用它们,并且我们在未来的 Android 版本中可能会移除它们。相反,请使用适当的通信机制(例如服务和 Content Provider),在共享组件之间实现互操作性。

系统仍使用 android:sharedUserId 的最高 SDK 版本。如果您的应用是首次安装在搭载比指定值更高的 SDK 版本的设备上,您应用的行为就像您从未定义过 android:sharedUserId 一样。

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

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

该值设置为大于 0 的正整数。您可以根据需要定义该值,只要保证每个后续版本的数字更大。例如,它可以是 build 号,或者您可以通过分别以较低和较高的 16 位对“x”和“y”进行编码,将“x.y”格式的版本号转换为整数。或者,您可以在每次发布新版本时将该数字增加 1 即可。

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

说明
"internalOnly" 应用仅安装在设备内部存储空间中。如果设置此值,则应用一定不会安装在诸如 SD 卡等外部存储空间中。如果内部存储空间已满,系统不会安装应用。如果您没有定义 android:installLocation,这会是默认行为。
"auto" 应用可以安装在外部存储空间中,但默认情况下,系统会将应用安装在内部存储空间中。如果内部存储空间已满,系统会将应用安装在外部存储空间中。安装后,用户可以通过系统设置将应用移至内部或外部存储空间。
"preferExternal" 应用更倾向于安装在外部存储空间中。无法保证系统会遵循该请求。如果外部媒体不可用或已满,则应用可能会安装在内部存储空间中。安装后,用户可以通过系统设置将应用移至内部或外部存储空间。

注意:默认情况下,您的应用将安装在内部存储空间中,除非您将此属性定义为 "auto""preferExternal",否则应用不会安装在外部存储空间中。

如果应用安装在外部存储空间中:

  • APK 文件保存到外部存储空间,但所有应用数据(如数据库)仍保存在设备内存中。
  • 用于保存 APK 文件的容器使用密钥进行加密,该密钥可让应用仅在安装它的设备上运行。用户无法将 SD 卡转移到其他设备并使用该卡上安装的应用。 同一设备可以使用多个 SD 卡。
  • 根据用户的请求,应用可以移至内部存储空间。

用户还可以请求将应用从内部存储空间移至外部存储空间。但是,如果此属性设置为 "internalOnly"(这是默认设置),则系统不允许用户将应用移至外部存储空间。

如需详细了解如何使用此属性,包括如何保持向后兼容性,请参阅应用安装位置

引入至:API 级别 8。

引入至:
对所有属性使用 API 级别 1(除非在属性说明中另行说明)。

另请参阅:
<application>