main.xml
这个示例应用程序包含一个活动和一个视图。应用程序包含一个名为 main.xml 的文件,它代表活动的主 UI 的视觉方面。注意,在 main.xml 中没有指定在哪里使用这个布局。这意味着,如果需要的话,可以在多个活动中使用它。清单 5 给出布局文件的内容。
清单 5. 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, SaySomething"
/>
</LinearLayout>
|
这是最简单的布局,其中只有一个垂直的线性布局,这意味着所有元素排成一列。这里有一个 TextView 元素,它与其他开发环境中的标签类似。TextView 代表不可编辑的静态文本。
注意,每个视图元素(比如这个示例中的 LinearLayout 和 TextView )都有属于 Android 名称空间的属性。一些属性是所有视图元素都有的,比如 android:layout_width 和 android:layout_height 。这些属性可以采用的值是:
-
fill_parent
-
使视图元素占满可用的空间。也可以认为这就是 “拉伸”。
-
wrap_content
-
这个值让 Android 把元素一个接一个地排列,不进行拉伸。
在构建期间,对所有资源进行编译。编译过程的输出之一是 R.java 文件,这个文件向应用程序的其余部分提供资源。下面讨论 R.java 文件。
R.java
R.java 文件是在构建时自动创建的,所以不要手工修改它,因为所有修改都会丢失。清单 6 给出这个示例应用程序的 R.java 文件。
清单 6. R.java 文件
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.msi.ibmtutorial;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040000;
}
}
|
R 类包含一些匿名子类,每个子类包含前面描述的各种资源的标识符。注意,这些类都是静态的。
请注意 R.layout.main 代表的元素。这个标识符代表由 main.xml 定义的布局。在活动的 onCreate 方法中使用过这个值:setContentView(R.layout.main); 。这就是在运行时把特定的活动(在这个示例中是 SayAnything )和特定的布局(主布局)联系在一起的方法。
构建应用程序
在默认情况下,每次保存文件时,都将对它们进行编译。
图 5. 错误面板
我们在源代码中引入了一个错误,即在 setContent 和 View 之间加了一个空格。在保存这个文件时,它被编译并在屏幕底部的 Problems 面板中显示错误。在源代码中纠正这个错误之后,应用程序就能够成功编译,并从问题列表中删除错误。
AndroidManifest.xml
AndroidManifest.xml 文件是 Android 应用程序的部署描述符。这个文件列出应用程序中包含的所有活动、服务、内容提供器和接收器,以及应用程序支持的 IntentFilter 。下面是这个示例应用程序的完整的 AndroidManifest.xml 文件。
清单 7. AndroidManifest.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.msi.ibmtutorial">
<application android:icon="@drawable/icon">
<activity class=".SaySomething" android:label="@string/app_name">
<intent-filter>
<action android:value="android.intent.action.MAIN" />
<category android:value="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
|
请注意以下情况:
-
这里指定了源文件中的包名。这里采用与 Java 源文件和导入语句相似的模式。
<manifest> 标记的实际作用是 “导入” 这个包中的类。在这个文件中,所有非完全限定的类都属于 package 属性指定的包。
-
<application> 标记的一个属性引用了应用程序的一个资源。请注意 drawable 标识符前面的 @ 符号。这里的意思是,在应用程序资源的 drawable 文件夹中寻找名为 “icon” 的资源。
-
<activity> 标记包含以下属性和值:
-
class 属性表示实现这个活动的 Java 类。
-
android:label 是应用程序的名称。注意,它来自一个字符串资源。string.xml 文件包含应用程序的本地化字符串。
-
<intent-filter> 表示应用程序中可用的 IntentFilter 。这是 Android 应用程序中最常见的 IntentFilter 。这个过滤器的实际意思是,它实现 “主” 操作(也就是入口点),而且它位于 OS 的启动器中。这意味着可以在 Android 设备上像启动其他应用程序一样,从应用程序主列表中启动它。
下一节讨论如何在 Eclipse 中的 Android 模拟器上启动应用程序。
运行应用程序
应用程序已经成功地编译了,现在该运行这个示例应用程序了。在 Eclipse 中选择 Open Run Dialog 或工具栏上的快捷按钮。这会打开一个对话框,可以在这里创建启动配置。选择 Android Application 选项并单击 New 的图标。
图 6 显示本教程示例所用的值。
图 6. Run 对话框
指定配置名称。本教程使用的名称是 Tutorial Configuration。在可用项目列表中选择 ibmtutorial 项目(单击 Browse 可以看到可用项目)。在下拉列表中选择启动活动。现在选择 Emulator 选项卡,根据需要指定模拟器设置。可以保持默认设置。有两个设置需要注意,见图 7。
图 7. Run 对话框,Emulator 选项卡
有几种可供选择的屏幕大小和方向,还有网络选择。如果运行应用程序的移动设备的因特网连接速度不同,网络选择就很重要了。在构造应用程序原型时,选择完整网络速度而且没有延迟。开发了主要功能之后,最好在比较真实的网络环境中进行测试,看看应用程序的响应速度如何。
选择 Run 运行示例应用程序。
图 8. 模拟器
应用程序已经在模拟器上运行了,现在看看幕后发生的情况。Dalvik Debug Monitor Service(DDMS)将会帮助检查应用程序的运行情况。
调试应用程序
要想检查正在运行的应用程序中发生了什么情况,就需要查看正在运行的 Dalvik VM。在 Eclipse 中,选择 Window > Open Perspective > Other。在出现的对话框中选择 DDMS。这会在 Eclipse 中打开一个新的透视图,其中有许多有趣的窗口。下面简要介绍一下 DDMS 透视图中提供的资源:
LogCat 是一个日志文件,它记录 VM 中发生的活动。应用程序可以通过 Log.i(tag,message); 在这个日志文件中添加自己的日志项,其中的 tag 和 message 都是 Java 字符串。Log 类属于 android.util.Log 包。
图 9 显示 LogCat 。
图 9. LogCat
DDMS 中的另一个方便的工具是文件管理器,可以用它访问模拟器的文件系统。图 10 显示在模拟器上部署本教程示例应用程序的位置。
图 10. 在模拟器上部署的示例应用程序
用户应用程序部署在 /data/app 目录中,而 Android 内置的应用程序部署在 /system/app 目录中。
在 DDMS 中还可以查看正在运行的进程。
图 11. 正在运行的进程列表
全面讨论 Android 应用程序的调试超出了本教程的范围,更多信息请参见 参考资料。
|