AndroidManifest.xml

AndroidManifest.xml是应用清单文件,manifest翻译是货单的意思。每个应用得根目录中都必须包含一个AnroidManifest.xml文件,其中包含APP得配置信息,系统需要根据配置内容运行APP代码并显示界面。

AndroidManifest.xml文件是Android应用程序的全局配置文件,是每个Android应用程序中必备的文件。位于开发应用程序的个呢目录下,描述了package包中的全局参数,包括package中暴露的组件,以及各自的实现类,各种能被处理的数据和启动位置等重要信息。因此,该文件提供了Android系统所需的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。

AndroidManifest.xml文件的具体作用是什么呢?

  • 为应用的Java软件包命名,软件包名称充当应用的唯一标识符。
  • 描述应用各个组件,包括构成应用的活动、服务、广播接收器、内容提供者。为实现每个组件的类命名并发布其功能。
  • 确定托管应用组件的进程
  • 声明应用必须具备的权限才能访问API受保护部分并于其他应用交互
  • 声明其他应用与该应用组件交互所需的权限
  • 列出Instrumentation类,在应用运行时提供分析和其他信息。此声明只会在应用处于开发阶段时出现在清单中,在应用发布之前会将其移除。
  • 声明应用所需的最低AndroidAPI级别
  • 列出应用必须链接到的库

AndroidManifest.xml 标记分析

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.weihuagu.receiptnotice">
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <application
                android:name=".MainApplication"
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:roundIcon="@mipmap/ic_launcher_round"
                android:supportsRtl="true"
                android:theme="@style/Theme.AppCompat.Light.NoActionBar">
                <activity android:name=".MainActivity">
                        <intent-filter>
                                <action android:name="android.intent.action.MAIN" />
                                <action android:name="android.intent.action.VIEW" />
                                <category android:name="android.intent.category.LAUNCHER" />
                        </intent-filter>
                </activity>
                <activity android:name=".FileLogActivity" android:label="@string/filelog_title">
                         <intent-filter >
                                <action android:name="com.weihuagu.receiptnotice.showfilelog"/>
                        </intent-filter>
                </activity>
                <activity android:name=".IllustrateDecryptActivity" android:label="@string/illustratedecrypt_title">
                        <intent-filter>
                                    <action android:name="com.weihuagu.receiptnotice.illustratedecryptmethod"/>
                                    <category android:name="android.intent.category.DEFAULT"/>
                         </intent-filter>  
                </activity>
                <activity android:name="com.github.pedrovgs.lynx.LynxActivity"/>
                <activity android:name=".PreferenceActivity"/>
                <service android:name=".NLService" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
                        <intent-filter>
                                <action android:name="android.service.notification.NotificationListenerService" />
                        </intent-filter>
                </service>
                <service android:name=".NotificationCollectorMonitorService"/>
        </application>
</manifest>

<manifest> 元素

<manifest 
          xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sample.test"
          android:versionCode="1"
          android:versionName="1.0.0.1" >
</manifest>

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

<manifest> 属性

  • xmlns:androrid 用于定义Android命名空间,必须设置成 http://schemas.android.com/apk/res/android 无需手动修改。

  • package 定义完整的Java语言风格包名,包名由英文字母(大小写均可)、数字、下划线组成,每个独立的名字必须以字母开通头。

在构建APK时构建系统使用xmls:androidpackage两个属性来做两件事儿:

  1. 使用package名字作为生成R.java类时的命名空间,用于访问APP的资源。
    比如package:com.sample.test生成的R类为com.sample.test.R
  2. 使用package生成在manifest文件中定义的类的完整类名
    比如package:com.sample.testactivity元素被声明为<activity android:name=".MainActivity">,此时完整的类名就时com.sample.test.MainActivity

package包名代表了唯一的application ID,可以 用来发布应用。需要注意的是在APK构建过程的最后一步,package包名会被build.gradle文件中的applicationId属性取待。如果这两个属性值一样就表示构建成功。

  • android:versionCode 用于设置Android内部版本号,用来表明哪个版本更新,此数字不会显示给用户,显示给用户的是versionName,此是数字必须是整数不能使用十六进制。
  • anroid:versionName 用于设置显示给用户的版本号

<users-feature> 元素

<uses-feature android:glEsVersion="0x00020000"></uses-feature>

Google Play会利用<uses-feature>元素的值从不符合应用需要的设备上将应用过滤,<uses-feature>元素的作用是将APP所依赖的硬件或软件告诉别人,用来说明APP的那些功能可以随设备的变化而变化。

使用<uses-feature>需要注意的是必须在单独的<uses-feature>元素中指定每个功能,如果要多个功能,就需要多个<uses-feature>元素。

比如要求设备同时具有蓝牙和相机功能

<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.camera" />

<users-feature> 属性

  • android:name 以字符串形式在指定APP所要是使用的硬件或软件功能
  • android:required 表示是否功能是否是应用必须的,为true表示必须具有否则应用无法工作,为false表示应用在没有此功能时也能工作。
  • android:glEsVersion 指定应用所需的OpenGL ES版本,其中高16位表示主版本号,低16位表示次版本号。若定义多个则会自动启动最高配置。

<application> 元素

 <application
      android:allowBackup="false"
      android:fullBackupContent="false"
      android:supportsRtl="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"
      android:name="com.sample.test.TestApplication"
></application>

<application> 元素描述了应用的配置,是一个必备元素,包含很多子元素用来描述应用的组件,其属性影响到所有子组件。

<application> 属性

  • android:allowBackup 表示是否允许APP加入到备份还原的结构中,若设置为false则应用不会备份还原,默认为true
  • android:fullBackupContent 属性会指向一个XML文件,XML文件中包含了进行自动备份时的完全备份规则,规则定了哪些文件需要备份。此属性是一个可选属性,默认情况下自动备份包含了大部分APP文件。
  • android:supportsRtl 声明APP是否支持RTL(Right To Left)布局,若设置为truetargetSdkVersion被设置为17或更高,很多RTL API会被激活,这样APP就可以以显示RTL布局。若设置为falsetargetSdkVersion设置为16或更低则RTL布局就无法生效。默认值为false
  • android:icon 用于指定APP的图标以及每个组件的默认图标。可以在组件中进行自定义,该属性必须设置成一个引用,执行一个可绘制的资源,资源必须包含图片。
  • android:label 用于指定用户可读的标签以及所有组件的默认组件,子组件可以使用它定义自己的标签,若没有定义则使用它。标签必须设置为一个字符串资源的引用,这样就能和其他东西一样被定位。为了开发方便也可以定义为一个原始字符串。
  • android:theme 用于定义APP使用的主题,是一个指向style资源的引用。各个activity也可以设置自己的theme属性。
  • android:name 用于设置Application子类的全名,当APP启动时这个类会被第一个创建。

<activity> 元素

<activity 
  android:name="com.sample.test.TeapotNativeActivity"
  android:label="@string/app_name"
  android:configChanges="orientation|keyboardHidden"
>

<activity>元素用于声明一个实现APP可视化界面的Activity类子类,是<application>元素中必备的子元素。所有Activity都必须由AndroidManifest.xml清单文件中的<activity>元素表示,任何未在该处声明的Activity对系统都不可见,而且永远不会被执行。

<activity> 属性

  • android:name 用于指定Activity类的名称,是Activity类的子类,为完全限定类名称。为方便起见,若第一个字符是点.在需要加上<manifest>元素中的package包名。APP一旦发布不应该更改此名称。注意的是它是没有默认值的,必须指定该名称。
  • android:label 用于指定Activity标签,可以被用户读取。标签会在Activity
    激活时显示在屏幕上,如果没有设置会使用<application>中的label属性,设置要求和<application>保持一致。
  • android:configChanges 用于列出Activity将自行处理的配置更新消息,在运行时发生配置更改时,默认会关闭Activity然后将其重新启动,但使用该属性声明配置将会阻止Activity重新启动。Activity反而会保持运行状态,并且系统会调用其onConfigurationChanged()方法。需要注意的是,应该避免使用此配置,只有在万不得已的情况下年使用。
  • android:theme 用于设定主题格式,与<application>中的theme类似。

<meta-data> 元素

<meta-data android:name="android.app.lib_name" android:value="TestNativeActivity" />

<meta-data>元素 用于指定额外的数据项,该数据项是一个name-value的键值对,提供给父组件。键值对数据会组成一个Bundle对象,由PackageItemInfo.metaData字段使用。虽然可以使用多个<meta-data>元素标签,但并不推荐。如果有多个数据项需要指定,推荐的做法是将 多个数据项合并成有一个资源,然后使用一个<meta-data>包含进去。

<meta-data> 属性

  • android:name 用于指定数据项名称,是一个唯一值。
  • android:resource 用于指定资源的引用
  • android:value 用于指定数据项的值

<intent-filter> 元素

<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>元素 用于指定Activity可以以什么样的意图(intent)启动

<intent-filter> 子元素

<action> 元素

表示Activity作为一个什么动作启动,android.intent.action.MAIN表示作为主Activity启动。

<category> 元素

表示Activity元素的额外类别信息,android.intent.categoryr.LAUNCHER表示Activity为当前应用程序优先级最高的Activity。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值