速读原著-Android应用开发入门教程(HelloActivity程序的运行)
第 4 章 Android应用程序示例
在软件开发的最初阶段,通常使用一个 Hello World 程序作为最简单的示例,本部分介绍一个 Android 中最简单应用程序,通过这部分内容可以了解到 Android 程序的文件结构和编译后的结构。
4.1 HelloActivity程序的运行
HelloActivity 是一个简单的 Android 应用程序,其工程文件名称为 HelloActivity,在 Android 的源代码和SDK 中,都包含了这个包。
HelloActivity 的图标和运行情况如图所示。
这个程序有一个简单的活动(Activity),用于启动一个新的界面,并在界面上显示 “Hello,World!”字符串。
4.2 HelloActivity的源文件结构
HelloActivity 工程的源文件的结构按照目录树的方式如下所示:
HelloActivity/
|-- Android.mk (工程管理文件)
|-- AndroidManifest.xml (工程描述文件)
|-- res (资源文件)
| |-- layout
| | -- hello_activity.xml (布局文件) |
– values
| -- strings.xml (字串资源文件) |-- src (Java 源代码文件)
– com-- example
– android-- helloactivity
– HelloActivity.java
HelloActivity 工程中另有一个 tests 目录,其中也具有自己的 Android.mk 和 AndroidManifest.xml 文件,这
是另一个工程,是 HelloActivity 工程的测试程序。
4.2.1.Android.mk文件
Android.mk 文件是 Android 的工程管理文件,这个文件只在源代码开发的时候使用,在 SDK 的开发中不需要使用,它包含在工程的根目录中,其内容如下所示:
Android.mk 文件是 Android 编译过程中通用的工程管理文件,本地程序、本地库和 Java 程序包都使用这个文件。这个文件仅仅在基于源代码开发的情况中使用,在 Java 应用程序工程的管理中,该文件不用定义过多的内容,其中关键的内容是使用 include $(BUILD_PACKAGE)表示从当前目录编译 Java 应用程序包。
LOCAL_PACKAGE_ NAME定义的是这个程序的APK包的名称。LOCAL_MODULE_TAGS表示这个包的类型。这个包的 LOCAL_MODULE_TAGS 定义成了 samples,这将编译 APK 包,但是不安装在系统中。使用不同的值,可以决定是否编译和安装,例如使用 eng,将安装到目标系统中。
最后一行的 include $(call all-makefiles-under,$(LOCAL_PATH))
,表示包含本目录的子目录中的 Android.mk文件,本例中也就是 tests 目录中的内容。
4.2.2.AndroidManifest.xml文件
AndroidManifest.xml
文件是这个 Android 应用程序的工程描述文件,包含了宏观上的内容,如下所示:
application(表示应用程序)标签中包含了一个 activity(表示活动)。活动是应用程序中的一个组件,一个应用程序中也可以包含若干个组件。包名定义为 com.example. android.helloactivity
,表示将从 src 目录的com/example/android/helloactivity
中寻找程序中的 Java 源代码。活动名称将被定义为 HelloActivity,表示活动的代码是上述源代码目录中的 HelloActivity.java 文件。intent-filter
中的内容指定了程序的启动方式,这里 category中的 android.intent.category.LAUNCHER
表示活动将在 Android 的桌面(Android 默认的桌面程序名称也是LAUNCHER)上出现。
这里指定 application 的 android:label 为"Hello,Activity!",这和桌面图标下面的文字以及活动启动后上面的标题文字是一致的。本例没有指定图标,所以桌面上的图标使用的是默认图标。在 AndroidManifest.xml 文件中为一个活动指定 label(标签)和 icon(图标)的方法 如下所示:android:label
指定为字符串、android:icon 指定为图标后,将使用 res/drawable 中对应名称的图片文件作为图标(本例中将使用 icon_name.png)。
activity 和 application 都具有 android:label
和 android:icon
等属性,由于活动是程序的单元,且应用可以包含多个活动,因此程序首先将使用 activity 中的这些标签,如果没有则使用上一级的 application 中标签的定义
4.2.3.源代码文件
HelloActivity 工程只有一个源代码文件 HelloActivity.java ,位于这个工程 src 目录下的com/example/android/helloactivity
中,内容如下所示:
这里的类 HelloActivity 继承实现了 Android 系 统 API 提供的活动类( Activity ),使用setContentView(R.layout.hello_activity
) 指定了当前活动的布局,这里表示将从 res/layout 目录中找到hello_activity.xml 文件作为本例的布局文件使用。
4.2.4.布局文件
hello_activity.xml 是本程序中的布局文件,在 Java 源文件中使用了此文件。本文件在 res/layout 目录中,其内容如下所示:
在这个布局文件中,只定义了一个 UI 元素——EditText,就是在界面上出现的占据全屏的可编辑文本框。在这里定义了这个可编辑文本框的初始化字符串为"@string/hello_activity_text_text
",这个值在另外的资源文件中被定义,本例就是 string.xml
。
4.2.5.其他资源文件
string.xml
是本例中的一个资源文件,其内容如下所示:
这里定义了名称为“hello_activity_text_text”的字符串的内容为 Hello,World!,这就是出现在屏幕上的字符串。