- 语法:
<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>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
- 说明:
- AndroidManifest.xml 文件的根元素。它必须包含
<application>
元素并指定xmlns:android
和package
属性。 - 属性:
-
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 中发布应用。不过,在构建流程快要结束时,构建工具会使用
build.gradle
文件(Android Studio 项目使用的文件)中的applicationId
属性替换package
名称。您只要确保清单的package
名称与构建文件的applicationId
保持一致,就无需担心。但如果这两个值不同,您应该阅读如何设置应用 ID,了解“软件包名称”和“应用 ID”之间的区别。为避免与其他开发者发生冲突,您应将互联网域名所有者(反过来)用作软件包名称的前缀。例如,由 Google 发布的应用以
com.google
开头。注意:Google Play 禁止使用
com.example
和com.android
命名空间。如果您想在发布应用后更改软件包名称,可以这样做,但您必须保持
applicationId
不变。applicationId
定义了应用在 Google Play 上的唯一身份。因此,如果您对其进行更改,则这个新应用就会被视为其他应用,而且使用之前版本的用户将不会收到更新。如需了解详情,请参阅如何设置应用 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 级沙盒:
- 网络安全配置中的
usesCleartextTraffic
的默认值为 false。 - 不允许共享 uid。
对于以 Android 8.0(API 级别 26)或更高版本为目标平台的 Android 免安装应用,此属性必须设置为 2。您可以在应用的已安装版本中将沙盒级别设置为限制比较宽松的级别 1,但如果这样做,您的应用就不会将免安装应用中的应用数据保留到应用的已安装版本。您必须将已安装应用的沙盒值设置为 2,才能将免安装应用中的数据保留到已安装版本。
应用安装后,您只能将其目标沙盒值更新为更高的值。 若要对目标沙盒值进行降级,您必须卸载该应用,并将其替换为其清单包含此属性的更低值的版本。
- 网络安全配置中的
android:sharedUserLabel
-
API 级别 29 中已弃用此常量。
共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它,并且我们在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和 Content Provider),在共享组件之间实现互操作性。请注意,现有应用无法移除此值,因为不支持迁移共享用户 ID。共享用户 ID 的用户可读标签。此标签必须设置为对字符串资源的引用;它不能是原始字符串。
此属性在 API 级别 3 中引入。仅当同时设置了
sharedUserId
属性时,此属性才有意义。 android:versionCode
- 内部版本号。此数字仅用于确定某个版本是否比另一个版本更新:数字越大表示版本越新。这不是向用户显示的版本号;此数字由
versionName
属性设置。该值必须设置为大于 0 的正整数。您可以根据需要定义该值,只要每个连续版本的数字都比较大。例如,它可以是版本号。或者,您可以通过分别以较低和较高的 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>