每个Android App需要一个配置文件告诉它初始化的一些基本信息,这个文件就是AndroidManifest.xml文件。作为一名合格的Android新手程序猿,有必要对它有一个基础的认识。
首先这是一个xml文件,xml是一个描述数据或者属性的语言,比如下面一段代码
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to> Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我们就可以认为这个xml记录了一个叫note的东西,我们这里就称这种东西为节点吧。note有四种属性,“to"这个属性的值是”Tove", “from”这个属性的值是“Jani", 后面也是这样来看。编译器到时候就会一项一项地读取这个文件都记录了哪些节点,每个节点又有那些属性,然后它们的值又是什么,来做相应的操作。在android app中,很多前端界面的设计,比如layout 和 style等都是用xml文件来写的。这个后面我们再详细说。
那么在这个AndroidManifest.xml文件中,都有哪些节点和哪些属性需要设定呢?这个可以参考google给的官方doc,我们只需要先了解其中的几种最基本的就好了,后面的我们用到了再讲。我们先看一个例子,下面是一个简单典型的AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lecture"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<application
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
只要搞懂这个文件,我们就可以应付大部分app的manifest文件了。我们来一行一行的看,首先是一个大节点,叫”manifest“,这个节点在每个manifest文件都是存在且唯一存在的,后面那句"xmlns:anrdoid"是定义了android namespace, 意思是,以后出现“android:"的时候,就用后面那个网址代替,比如下面有一个 android:versionName="1.0", 实际xml会转换成 http://schemas.android.com/apk/res/android:versionName="1.0" 。一般来说,这个网址编译器不会去访问,只是用来标识这个namaspace的唯一性,自己定义的namespace网址可以自己写,但android的这个网址不能更改。
这个大节点下又有两个小节点,像树形结构一样。在两个小节点之前还有一个叫“package"的属性,这个就是这个app的package name,也是app的唯一标识码了,以后发布app的时候也是用这个。versionName是定义版本号。第一个小节点是“uses-sdk",它是说本app需要手机安装哪个版本的sdk,这个节点不是must但一般要注明。它的第一个属性minSdkVersion是说本app支持的最低sdk,targetSdkVersion是说本app就是在这个sdk环境下开发的,系统不用对它作任何的兼容性优化。
第二个小节点是application,这个节点也是一定要有的,可以看到它紧接着的三个属性分别定义了它的图标(就是这个app的图标),标签(这个app的名字)和theme(app的主题,类似于style,定义了比如背景颜色等信息,我们后面会讲到)。至于它们的值为什么是“@xxx/xxx”的格式,我们下一节讲。
然后application又有一个子节点叫activity,activity就像是一个某个界面和用户之间的一个controller,控制着某个界面的创建以及界面和用户之间的交互等一切和这个界面相关的活动。这里只是定义了一个叫”com.example.MainActivity"的activity的基本信息,注意这个名字,说明在app的workspace下,一定要有一个叫"MainActivity.java"的文件在com.example这个package下,否则找不到。screenOrientation是定义了这个app是横屏展示还是竖屏展示,如果想知道都有哪些值可以选择,可以参考google的anrdoid文档。下面是一个intent-filter,简单说它定义了什么时候该运行这个activity,具体intent-filter的用法我们也放在单独的一节来讲。
这样我们就简单的了解了一下manifest文件的基本组成,我们后面会进一步来具体来讲。