前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AndroidManifest.xml详解

AndroidManifest.xml详解

作者头像
清风穆云
发布2021-08-09 11:38:55
3.5K0
发布2021-08-09 11:38:55
举报
文章被收录于专栏:QA一隅

AndroidManifest官方解释是应用清单(Manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须一模一样。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。

AndroidManifest.xml样例

以下 XML 文件为 AndroidManifest.xml 的一个简单示例,该示例为应用声明两个Activity

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="com.example.myapp">

    <!-- Beware that these values are overridden by the build.gradle file -->
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- This name is resolved to com.example.myapp.MainActivity
             based upon the package attribute -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity" />
    </application>
</manifest>

AndroidManifest.xml元素

<manifest>元素

首先,所有的xml都必须包含<manifest>元素。这是文件的根节点。它必须要包含<application>元素,并且指明xmlns:androidpackage属性。

代码语言:javascript
复制
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="com.example.myapp">
xmlns:android

这个属性定义了Android命名空间。必须设置成"http://schemas.android.com/apk/res/android"。不要手动修改。

package

包名也代表着唯一的application ID,用来发布应用。包名由英文字母(大小写均可)、数字和下划线组成。每个独立的名字必须以字母开头。

android:versionCode

内部的版本号。用来表明哪个版本更新。这个数字不会显示给用户。显示给用户的是versionName。这个数字必须是整数。不能用16进制,也就是说不接受0x1这种参数

android:versionName

显示给用户看的版本号。

<application>

代码语言:javascript
复制
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

应用的声明。此元素包含用于声明每个应用组件的子元素,并且具有会影响所有组件的属性。其中许多属性(如 icon、label、permission、process、taskAffinityallowTaskReparenting)会为组件元素的相应属性设置默认值。其他属性(如 debuggable、enabled、descriptionallowClearUserData)则为整个应用设置值,并且不能被组件替换。

android:allowBackup

是否允许应用参与备份和恢复基础架构。如果将此属性设为 false,则永远不会为该应用执行备份或恢复,即使是采用全系统备份方法也不例外(这种备份方法通常会通过 adb 保存所有应用数据)。此属性的默认值为 true

<permission>

声明可用于限制对此应用或其他应用的特定组件或功能的访问权限的安全权限。

android:name

权限的名称

android:protectionLevel

说明权限中隐含的潜在风险,并指示系统在确定是否将权限授予请求授权的应用时应遵循的流程。

每个保护级别都包含基本权限类型以及零个或多个标记。例如,dangerous 保护级别没有标记。相反,保护级别 signature|privilegedsignature 基本权限类型和 privileged 标记的组合。

<uses-permission>

指定用户必须授予的系统权限,以便应用正常运行。当(在运行 Android 5.1 和更低版本的设备上)安装应用或(在运行 Android 6.0 和更高版本的设备上)运行应用时,用户会授予权限。

代码语言:javascript
复制
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

android:name

权限的名称。可以是应用通过<permission>元素定义的权限、另一个应用定义的权限,或者一个标准系统权限(例如 "android.permission.CAMERA""android.permission.READ_CONTACTS")。如这些示例所示,权限名称通常以软件包名称为前缀。

android:maxSdkVersion

此权限应授予应用的最高 API 级别。如果从某个API 级别开始不再需要应用所需的权限,则设置此属性非常有用。

例如,从 Android 4.4(API 级别 19)开始,应用在外部存储空间写入其特定目录(getExternalFilesDir() 提供的目录)时不再需要请求 WRITE_EXTERNAL_STORAGE 权限。但 API 级别 18 和更低版本需要此权限。因此,您可以使用如下声明,声明只有 API 级别 18 及以前版本才需要此权限:

代码语言:javascript
复制
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />

这样,从 API 级别 19 开始,系统将不再向您的应用授予WRITE_EXTERNAL_STORAGE 权限。

<activity>

声明实现应用部分可视化界面的 Activity(一个 Activity 子类)。必须用清单文件中的 <activity>元素表示所有 Activity。系统不会识别和运行任何未进行声明的 Activity

android:name

实现Activity 的类的名称,是 Activity 的子类。此属性值应为完全限定类名称(例如,“com.example.project.ExtracurricularActivity)。不过,为简便起见,如果名称的第一个字符是句点(例如,.ExtracurricularActivity),则名称将追加至<manifest> 元素中指定的软件包名称。一旦发布应用,即不应更改该名称(除非您设置了 android:exported="false")。该属性没有默认值。必须指定该名称。

android:configChanges

列出Activity 将自行处理的配置变更。在运行时发生配置变更时,默认情况下会关闭 Activity 并将其重启,但使用该属性声明配置将阻止 Activity 重启。相反,Activity会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。

android:launchMode

有关应如何启动 Activity 的指令。共有四种模式可与 Intent 对象中的Activity 标记(FLAG_ACTIVITY_* 常量)协同工作,以确定在调用 Activity 处理 Intent 时应执行的操作。这些模式是:

  • standard
  • singleTop
  • singleTask
  • singleInstance

默认模式是standard

android:theme

对定义 Activity 总体主题的样式资源的引用。此属性会自动将Activity的场景设置为使用该主题(请参阅 setTheme()),并且还可引发 Activity启动前的“启动”动画(以更加符合 Activity 的实际外观)。

如果未设置该属性,则 Activity会继承通过<application>元素的 theme 属性为应用所整体设置的主题。如果同样未设置该属性,则使用默认系统主题。

android:screenOrientation

Activity 在设备上的显示方向。如果Activity 是在多窗口模式下运行,则系统会忽略该属性。一般为portrait 屏幕方向为纵向(显示的高度大于宽度)。

<intent-filter>

代码语言:javascript
复制
<intent-filter>
     <data android:scheme="tencent101042978"/>
     <action android:name="android.intent.action.VIEW"/>
     <category android:name="android.intent.category.BROWSABLE"/>
     <category android:name="android.intent.category.DEFAULT"/>
 </intent-filter>

指定 Activity、服务或广播接收器可以响应的 Intent 类型。Intent 过滤器声明其父组件的功能 Activity 或服务可执行哪些操作,以及接收器可处理哪些类型的广播。它让组件可以接收所通告类型的 Intent,同时过滤掉对组件没有意义的 Intent

过滤器的大部分内容由它的<action><category><data> 子元素进行描述。

<receiver>

将广播接收器(BroadcastReceiver 子类)声明为应用的组件之一。广播接收器允许应用接收由系统或其他应用广播的 Intent,即使应用的其他组件并没有运行也是如此。让系统知道广播接收器有两种方法:一种方法是使用此元素在清单文件中声明广播接收器。另一种方法是在代码中动态创建接收器,并使用 Context.registerReceiver() 方法注册接收器。

android:exported

广播接收器是否可以接收来自其应用外部来源的消息 。如果可以,则为true,如果不可以,则为false。如果为false,则广播接收器只能接收由同一应用或具有相同用户 ID 的应用的组件发送的消息。

<provider>

声明内容提供程序组件。内容提供程序是 ContentProvider 的子类,可提供对由应用管理的数据的结构化访问机制。应用中的所有内容提供程序都必须在清单文件的 <provider> 元素中定义;否则,系统将不知道它们,也不会运行它们。

android:enabled

系统是否可以实例化内容提供程序。如果可以,则设为true;如果不能,则设为false。默认值为true<application>元素具有自己的 enabled 属性,该属性适用于所有应用组件,包括内容提供程序。<application><provider> 属性必须都为true(这正是它们两者的默认设置),才会启用内容提供程序。如果其中任一属性为false,就会停用提供程序;无法将其实例化。

<service>

将服务(Service 子类)声明为应用的一个组件。与 Activity 不同,服务缺少可视化界面。服务用于实现长时间运行的后台操作,或可由其他应用调用的富通信 API。必须用清单文件中的 <service>元素表示所有服务。系统不会识别和运行任何未进行声明的服务。

android:enabled

系统是否可实例化服务 true表示可以,false表示不可以。默认值为true<application> 元素拥有自己的 enabled 属性,该属性适用于所有应用组件,包括服务。只有在 <application><service> 属性都为true(因为它们都默认使用该值)时,系统才能启用服务。任何一项为“false”都会造成服务停用,从而使系统无法将其实例化。

android:name

为应用实现的 Application 子类的完全限定名称。应用进程启动后,此类会在应用的所有组件之前进行实例化。该子类是可选的;大多数应用都不需要它。在没有子类的情况下,Android会使用 Application基类的实例。

android:icon

整个应用的图标,以及每个应用组件的默认图标。

android:label

整个应用的用户可读标签,以及每个应用组件的默认标签。

android:supportsRtl

声明您的应用是否愿意支持从右到左 (RTL) 布局。如果设为 true 并且 targetSdkVersion 设为 17 或更高版本,则系统会激活和使用各种 RTL API,以便您的应用可以显示 RTL布局。

如果设为false或者如果 targetSdkVersion设为 16或更低版本,则 RTL API 将被忽略或不起作用,无论与用户所选语言区域关联的布局方向为何(布局始终是从左到右),应用的行为都相同。此属性的默认值为false

android:theme

对样式资源的引用,用于为应用中的所有Activity定义默认主题背景。各个Activity可以通过设置自己的 theme 属性来替换默认值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AndroidManifest.xml样例
  • AndroidManifest.xml元素
    • <manifest>元素
      • xmlns:android
      • package
      • android:versionCode
      • android:versionName
    • <application>
      • android:allowBackup
    • <permission>
      • android:name
      • android:protectionLevel
    • <uses-permission>
      • android:name
      • android:maxSdkVersion
    • <activity>
      • android:name
      • android:configChanges
      • android:launchMode
      • android:theme
      • android:screenOrientation
    • <intent-filter>
      • <receiver>
        • android:exported
      • <provider>
        • android:enabled
      • <service>
        • android:enabled
        • android:name
        • android:icon
        • android:label
        • android:supportsRtl
        • android:theme
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档