欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

<manifest>

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

包含于:

必须包含:
<application>
可包含:
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<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
Android 应用的 Java 语言样式的完整软件包名称。此名称可以包含大写或小写字母(从“A”到“Z”)、数字和下划线(“_”)。不过,各个软件包名称部分只能以字母开头。

将应用构建为应用软件包 (APK) 时,构建系统使用 package 属性执行以下两个操作:

  • 它将此名称用作应用生成的 R.java 类(用于访问应用资源)的命名空间。

    例如,如果将 package 设置为 "com.example.myapp",则 R 类在 com.example.myapp.R 处创建。

  • 它使用此名称解析清单文件中声明的任何相关类名称。

    例如,如果将 package 设置为 "com.example.myapp",则声明为 <activity android:name=".MainActivity"> 的 Activity 会解析为 com.example.myapp.MainActivity

此名称不仅是应用进程的默认名称(请参阅 <application> 元素的 process 属性),还是您的 Activity 的默认任务相关性(请参阅 <activity> 元素的 taskAffinity 属性)。

此名称还表示应用 ID,该 ID 必须是通用唯一 ID,您才能在 Google Play 中发布应用。不过,在 APK 构建流程快要结束时,构建工具会使用 build.gradle 文件(Android Studio 项目使用的文件)中的 applicationId 属性替换 package 名称。您只要确保清单的 package 名称与构建文件的 applicationId 保持一致,就无需担心。但如果这两个值不同,您应该阅读如何设置应用 ID,了解“软件包名称”和“应用 ID”之间的区别。

为避免与其他开发者发生冲突,您应将互联网域名所有者(反过来)用作软件包名称的前缀。例如,由 Google 发布的应用以 com.google 开头。

注意:Google Play 禁止使用 com.examplecom.android 命名空间。

如果您想在发布应用后更改软件包名称,可以这样做,但您必须保持 applicationId 不变applicationId 定义了应用在 Google Play 上的唯一身份。因此,如果您对其进行更改,则该 APK 就会被视为其他应用,而且使用之前版本的用户将不会收到更新。如需了解详情,请参阅如何设置应用 ID

android:sharedUserId

API 级别 29 中已弃用此常量。
共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它,并且我们在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和内容提供程序),在共享组件之间实现互操作性。

与其他应用共享的 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 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和内容提供程序),在共享组件之间实现互操作性。

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

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

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

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

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

接受以下关键字字符串:

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

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

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

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

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

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

引入于:API 级别 8。

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

另请参阅:
<application>