在Android系统能够启动一个程序组件之前, 系统必须通过读取程序的AndroidManifest.xml 文件 ("配置"文件)来知道这个组件是否存在。 你的程序必须在这个文件中声明它所有的组件。这文件必须放在程序项目的根目录中。
除了声明程序组件外,这个配置文件还做一些其它的工作,例如:
确定程序需要哪些用户权限,例如网络访问或者读取用户的联系人。
声明程序需要的最小的 API Level 这个要参照程序都使用了哪些API。
声明程序使用或要求的硬件和软件特性,例如相机,蓝牙服务,或者多点触屏。
程序需要链接的API类库(除Android framework API之外的类库),例如 Google Map类库。
其它
如何声明组件:
配置文件的主要任务是通知系统,该应用程序都使用了哪些组件。 例如,一个配置文件可以这样声明一个activity:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:icon="@drawable/app_icon.png" ... >
<activity android:name="com.example.project.ExampleActivity" android:label="@string/example_label" ... >
</activity>
...
</application>
</manifest>
在 <application>
元素中, android:icon
属性指定了应用程序的图标资源。
在 <activity>
元素中, android:name
属性指定了 Activity
子类的完整正确类名, 而 android:label
属性 指定了一个用于显示activity的用户可见标签的字符串。
你必须像这样声明所有的组件:
<activity>
activity的元素<service>
service的元素<receiver>
broadcast receiver的元素<provider>
content provider的元素
程序中的Activitie, service, 和 content provider如果不在配置文件中声明, 是不会被系统识别的,因此,也无法运行。但是, broadcast receiver既可以在配置文件中声明,也可以在代码中被动态创建(作为BroadcastReceiver
对象) 并且通过调用 registerReceiver()
注册于系统中。
如何让组件响应其他程序:
你在程序的配置文件中声明组件的时候,你就可以选择性地包含intent过滤器来声明组件的功能,这样它就能响应由其它程序发起的intent。 你可以通过添加一个<intent-filter>
作为你组件的子元素 来为你的组件声明一个intent过滤器。
例如,一个包含编辑新邮件页面的邮件程序可能要在配置文件中声明一个intent过滤器,以此作为入口来响应“发送”intent(为了发送邮件)。 你程序中的一个Activity就要创建一个包含"发送"动作(ACTION_SEND
) 的intent,这样系统在你通过startActivity()
调用了这个intent时就去比较邮件程序的“发送”页面然后启动它。
声明程序的配置要求s
Android设备多种多样,并不是所有的都提供了相同的特性和能力。 为了避免不满足你程序要求的设备去安装,你有必要清楚地在配置文件中声明设备和软件要求以定义哪些设备是你的程序支持的。 这些声明多数只是参考信息,系统并不去读取他们。但是额外的程序例如google play会为了筛选用户对应用程序的搜索。
例如,如果你的程序需要相机,并且使用了Andriod 2.1介绍的api (API Level 7), 你就应该在配置文件中声明这些要求。这样的话,没有相机且Android版本低于2.1的就不能从Google Play中安装你的程序。
尽管如此,你也可以声明你的程序使用相机,但是不是硬性 要求 。这种情况下,你的程序必须在运行时执行一个校验,判断设备是否有相机功能,并且在没有相机的设备上禁用一切使用相机的特性。
下面有一些当你在设计和开发应用时需要考虑的设备特征:
设备尺寸和像素密度
为了根据屏幕类型给设备分类,Android定义了两个设备特性:屏幕尺寸(屏幕的物理尺寸)和屏幕像素密度(屏幕像素的物理密度,或者叫dpi—每英寸的点数)。 为了简化屏幕配置的不同类型,Android系统把他们概括为可选择的分组,以便于他们容易被适配。
屏幕尺寸包括: small, normal, large, 和 extra large.
屏幕像素密度包括: low density, medium density, high density, 和 extra high density.默认地,你的应用程序可以适配所有尺寸和像素密度的屏幕,因为Android系统会对你的ui布局和图像资源做合适的调整。 尽管如此,你应该为特定的屏幕尺寸创建专门的布局,为特定的像素密度提供专门的图像资源。你要使用可选的布局资源,还要用
<supports-screens>
元素在配置文件中精确声明你的程序所支持的屏幕尺寸。更多信息,请查阅 支持多屏幕 文档。
输入设置
许多设备提供了不同的用户输入形式。例如硬键盘,轨迹球,或者一个五向导航板。如果你的程序需要一个特殊类型的输入硬件。 那么你需要在配置文件中使用
<uses-configuration>
元素来声明。 尽管如此,很少由程序需要声明一个特定的输入配置。设备特性
可能有很多硬件和软件特性并不一定都被一个已有的Android设备支持。例如相机,光感应器,蓝牙,一个特定版本的OpenGL,或者 一个精确的触摸屏。你可能永远不能断定某个特定的特性是被所有的Android设备支持的。(除非是是Android的标准类库), 所以你应该用
<uses-feature>
元素 来为你的程序使用到的特性加以声明。平台版本
不同的Android设备经常运行了不同版本的Android平台,例如Android 1.6或者Android 2.3.每一个连续的版本 通常包含上个版本不支持的额外api。为了指明哪些api是可用的,么一个平台都指定了一个API Level。 (例如,Android 1.0是api 1,Android 2.3是api 9)。如果你使用了1.0版本以后加入的api,你应该声明这些API所在 的最小api level,需要使用
<uses-sdk>
元素来声明。
你为你的应用声明这些需求是很有必要的,因为当你在Google Play上发布应用时,它会根据这些声明来过滤出哪些应用时适用于这些设备的。 因此,你的程序也应该仅仅适用于满足于你程序的需求的设备。
参考资料:http://www.android-doc.com/guide/components/fundamentals.html#Manifest