<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>
可以包含
<attribution>
<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 的正整数。您可以根据需要定义它,只要每个后续版本都具有更高的数字即可。例如,它可以是构建号,或者您可以通过分别在低 16 位和高 16 位中编码“x”和“y”,将“x.y”格式的版本号转换为整数。或者,您可以在每次发布新版本时将数字加一。

android:versionName
显示给用户的版本号。此属性设置为原始字符串或对字符串资源的引用。此字符串除了显示给用户外没有其他用途。versionCode 属性包含内部使用的重要版本号。
android:installLocation
应用的默认安装位置。接受以下关键字字符串:
说明
"internalOnly" 应用仅安装到设备内部存储。如果设置了此项,应用绝不会安装到外部存储,例如 SD 卡。如果内部存储已满,系统将不会安装应用。如果您未定义 android:installLocation,则这是默认行为。
"auto" 应用可以安装到外部存储,但系统默认将应用安装到内部存储。如果内部存储已满,系统则会将其安装到外部存储。安装后,用户可以通过系统设置将应用移动到内部或外部存储。
"preferExternal" 应用倾向于安装到外部存储。系统不保证会遵守此请求。如果外部媒体不可用或已满,应用可能会安装到内部存储。安装后,用户可以通过系统设置将应用移动到内部或外部存储。

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

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

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

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

如需了解有关使用此属性的更多信息,包括如何保持向后兼容性,请参阅应用安装位置

引入于:API 级别 8。

引入于
所有属性均在 API 级别 1 中引入,除非属性说明中另有说明。
另请参阅
<application>