Android系统启动一个应用组件之前,系统必须通过应用的AndroidManifest.xml文件(清单文件manifest)知道组件是否存在。你的应用必须在这个文件中声明所有的组件,该文件必须放在应用工程的根目录下。
除了声明应用组件,manifest还完成很多功能,如:
-
确定应用需要的用户权限,如互联网访问或访问用户联系人。 -
声明应用需要最低API级别(API Level),以此确定用户可以使用哪些APIs。
-
声明应用使用或需要的硬件和软件特征,如照相机,蓝牙设备或多点触控屏。
-
其他更多信息。
声明组件
manifest的主要任务是通知系统关于应用的组件情况。例如,一个manifest文件能够用下面方式声明一个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的用户可是标签(label)。
你必须用下面的方式声明所有的应用组件:
lActivity用<activity>元素
。
l
Service用<service>元素。
l
Broadcast Receiver用<receiver>元素。
lContent Provider用<provider>元素
对象
)并通过调用registerReceiver().在系统中注册。
声明组件功能
系统通过收到的intent与设备上其他应用的manifest文件中提供的intent filter(意图过滤器)之间的对比,识别能够响应Intent的组件。
当你在应用manifest文件中声明组件时,你可以随意地包含声明组件功能的intent filter,因此它可以响应来自其他应用的intent。你可以通过添加<intent-filter>
元素为组件声明一个intent filter,作为组件声明元素的子集。
例如,Email App的撰写新邮件的activity可能在manifest中声明一个intent filter,来响应“发送”intent(为了发送email)。你应用中activity能够创建一个“发送”动作(ACTION_SEND)的intent,系统会把这个intent和Email App中的“发送”activity相匹配,当你用startActivity()调用intent时,启动它(activity)。
更多关于创建intent filter的信息,参加Intents and Intent Filters文档。
声明应用需求
屏幕尺寸和密度(density)
<supports-screens>
元素精确的声明应用支持哪些屏幕尺寸。
输入配置
<uses-configuration>
元素声明。然而,应用需要特定输入配置是很少的。
设备特征
在支持Android的设备上,可能存在或不存在很多硬件和软件特征,如照相机,光传感器,蓝牙,特定版本的OpenGL,或者触摸屏精度。你从不能假设某一特征在所有Android设备上都可用(除了Android标准库的可用性),因此你应该用<uses-feature>
元素声明应用使用的所有特征。
平台版本
<uses-sdk>
元素中声明最小API级别。
为应用声明这些需求是很重要的,因为,当你在Google Play上发布应用时,商店使用这些声明来过来每个设备上哪些应用可用。正因如此,满足你应用需求的设备才能使用你的应用。
关于Google Play如何基于这些需求过滤应用,更多信息参加Filters on Google Play文档。
五、应用资源一个Android应该并不仅有代码组成——它需要与代码分离的资源,如图像,音频文件,以及任何关于应该的视觉图像。例如,你应该用XML文件定义动画,菜单(menu),样式(style),颜色(color)以及UI Activity的布局(layout)。使用应用资源可以让你很容易更新程序特性,无需修改代码,只要提供供选择的资源——确保能够针对不同配置的设备优化应用。(不同语言和屏幕尺寸)。
Android工程中包含的每个资源,SDK定义了一个唯一的整数ID,从应用代码或者其他XML中定义的资源中可以通过ID引用资源。例如,如果你的应用有一个名叫logo.png(保存在/res/drawable/目录中),SDK产生一个叫做R.drawable.logo
的
资源ID,你可以用它引用资源并插入到UI中。
把资源和代码分开的一个最重要的方面是可以为不同配置的设备选择不同的资源。例如,通过在XML中定义UI字符串(string),你可以翻译这些字符串为其他语言并在各自文件中保存这些字符串。然后,你可以附加一个语言限定符(qualifier)到资源目录(如res/values-fr/存储法语字符串值),基于这个目录和用户语言设置,Android系统在UI上使用合适的字符串。
Android为可选择的资源支持多种不同的限定符。限定符是一个包含资源目录短的字符串,是为了明确不同配置的设备应该使用哪种资源。同样的,你应该根据设备屏幕方向和尺寸为activity创建不同的布局。例如,当设备屏幕是竖放时(高),你应该需要带有垂直对齐的按钮布局,但是当屏幕横放时(宽),按钮应该水平对齐。为了根据方向改变布局,你应该定义两个不同的布局,并给每个布局目录名运用合适的限定符。然后,系统依据当前设备自动运用合适的布局。
关于应用中可以包含的不同资源以及如何为不同配置的设备创建可选择资源,更多线性参见Application Resources开发文档。
2012/9/15 朱锋
原文参加