咱们在进行APP开发的时候都会遇到一个文件:AndroidManifest.xml。从刚开始进行Android开发,到如今已通过去了几个月,仍是对这个文件只知其一;不知其二,只知道它是配置用的。可是这文件里的东西具体有什么用,该怎么用一直都没有理解。借着作项目的机会,仔细研究一下这个文件。java
研究AndroidManifest.xml最好的方式天然就是对照着官方文档详细理解项目中每一个字段的做用,而且作出一些修改来验证。android
AndroidManifest官方解释是应用清单(manifest意思是货单),每一个应用的根目录中都必须包含一个,而且文件名必须如出一辙。这个文件中包含了APP的配置信息,系统须要根据里面的内容运行APP的代码,显示界面。并发
上述的功能是很是笼统的解释,具体到细节就是:app
上面是官方的解释。不少东西笔者如今还不能理解,也没有用到,先挑笔者理解的进行解释。布局
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample.teapot" android:versionCode="1" android:versionName="1.0.0.1" > <uses-feature android:glEsVersion="0x00020000"></uses-feature> <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.teapot.TeapotApplication" > <!-- Our activity is the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.sample.teapot.TeapotNativeActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="TeapotNativeActivity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
这是Google官方示例中的teapots项目中的一个文件,咱们就针对这份文件来分析字段的意义。字段的意义参考的是官方文档。gradle
首先,全部的xml都必须包含
xmlns:androidcode
这个属性定义了Android命名空间。必须设置成"http://schemas.android.com/apk/res/android"。不要手动修改。xml
package对象
这是一个完整的Java语言风格包名。包名由英文字母(大小写都可)、数字和下划线组成。每一个独立的名字必须以字母开头。
构建APK的时候,构建系统使用这个属性来作两件事:
好比:package被设置成com.sample.teapot,那么生成的R类就是:com.sample.teapot.R
包名也表明着惟一的application ID,用来发布应用。可是,要注意的一点是:在APK构建过程的最后一步,package名会被build.gradle文件中的applicationId属性取代。若是这两个属性值同样,那么万事大吉,若是不同,那就要当心了。
android:versionCode
内部的版本号。用来代表哪一个版本更新。这个数字不会显示给用户。显示给用户的是versionName。这个数字必须是整数。不能用16进制,也就是说不接受"0x1"这种参数
android:versionName
显示给用户看的版本号。
Google Play利用这个元素的值从不符合应用须要的设备上将应用过滤。
这东西的做用是将APP所依赖的硬件或者软件条件告诉别人。它说明了APP的哪些功能能够随设备的变化而变化。
使用的时候要注意,必须在单独的
<uses-feature android:name="android.hardware.bluetooth" /> <uses-feature android:name="android.hardware.camera" />
android:name
该属性以字符串形式指定了APP要用的硬件或软件功能。
android:required
这项属性若是值为true表示须要这项功可否则应用没法工做,若是为false表示应用在必要时会使用该功能,可是若是没有此功能应用也能工做。
android:glEsVersion
指明应用须要的Opengl ES版本。高16位表示主版本号,低16位表示次版本号。例如,若是是要3.2的版本,就是0x00030002。若是定义多个glEsVersion,应用会自动启用最高的设置。
此元素描述了应用的配置。这是一个必备的元素,它包含了不少子元素来描述应用的组件,它的属性影响到全部的子组件。许多属性(例如icon、label、permission、process、taskAffinity和allowTaskReparenting)均可以设置成默认值。
android:allowBackup
表示是否容许APP加入到备份还原的结构中。若是设置成false,那么应用就不会备份还原。默认值为true。
android:fullBackupContent
这个属性指向了一个xml文件,该文件中包含了在进行自动备份时的彻底备份规则。这些规则定义了哪些文件须要备份。此属性是一个可选属性。默认状况下,自动备份包含了大部分app文件。
android:supportsRtl
声明你的APP是否支持RTL(Right To Left)布局。若是设置成true,而且targetSdkVersion被设置成17或更高。不少RTL API会被集火,这样你的应用就能够显示RTL布局了。若是设置成false或者targetSdkVersion被设置成16或更低。哪些RTL API就不起做用了。
该属性的默认的值是false。
android:icon
APP的图标,以及每一个组件的默认图标。能够在组价中自定义图标。这个属性必须设置成一个引用,指向一个可绘制的资源,这个资源必须包含图片。系统不设置默认图标。例如mipmap/ic_launcher引用的就是下面的资源
android:label
一个用户可读的标签,以及全部组件的默认标签。子组件能够用他们的label属性定义本身的标签,若是没有定义,那么就用这个标签。
标签必须设置成一个字符串资源的引用。这样它们就能和其余东西同样被定位,好比@string/app_name。固然,为了开发方便,你也能够定义一个原始字符串。
android:theme
该属性定义了应用使用的主题的,它是一个指向style资源的引用。各个activity也能够用本身的theme属性设置本身的主题。
android:name
Application子类的全名。包括前面的路径。例如com.sample.teapot.TeapotApplication。当应用启动时,这个类的实例被第一个建立。这个属性是可选的,大多数APP都不须要这个属性。在没有这个属性的时候,Android会启动一个Application类的实例。
该元素声明一个实现应用可视化界面的Activity(Activity类子类)。这是
android:name
Activity类的名称,是Activity类的子类。该属性值为彻底限定类名称,例如com.sample.teapot.TeapotNativeActivity。为了方便起见,若是第一个字符是点('.'),就须要加上
没有默认值,必须指定该名称。
android:label
Activity标签,能够被用户读取。该标签会在Activity激活时显示在屏幕上。若是未设置,用
android:configChanges
列出 Activity 将自行处理的配置更改消息。在运行时发生配置更改时,默认状况下会关闭 Activity 而后将其从新启动,但使用该属性声明配置将阻止 Activity 从新启动。 Activity 反而会保持运行状态,而且系统会调用其 onConfigurationChanged()方法。
注:应避免使用该属性,而且只应在万不得已的状况下使用。 如需了解有关如何正确处理配置更改所致从新启动的详细信息,请阅读处理运行时变动。
这属性能够设置的项不少,这里列出经常使用的项:
orientation
屏幕放心啊发生了变化,好比用户旋转了设备
keyboardHidden
键盘无障碍功能发生了变化,好比用户显示了硬件键盘
android:launchMode
关于如何启动Activity的指令。一共有四种指令:
指定额外的数据项,该数据项是一个name-value对,提供给其父组件。这些数据会组成一个Bundle对象,能够由PackageItemInfo.metaData字段使用。虽然可使用多个
该元素有三个属性:
android:name
数据项名称,这是一个惟一值。
android:resource
一个资源的引用。
android:value
数据项的值。
指明这个activity能够以什么样的意图(intent)启动。该元素有几个子元素能够包含。咱们先介绍遇到的这两个:
表示activity做为一个什么动做启动,android.intent.action.MAIN表示做为主activity启动。
这是action元素的额外类别信息,android.intent.category.LAUNCHER表示这个activity为当前应用程序优先级最高的Activity。
至此,全部的元素信息已经分析完毕,若有错误,欢迎各位读者指正。后面再遇到什么元素会继续往里面添加。