我的第一个Android应用BMI-深入浅出Android

深入浅出 Android

1入门 .... 4

初探 Android .. 4

2008 年末最大的冲击 .... 4

Android 是什么 .... 4

从创意开始 .... 5

安装 Android 开发工具 .... 7

InstallAndroid . 7

安装流程 .... 8

开启现有工程 .... 11

开启工程 .... 11

导入工程 .... 11

修复工程 .... 11

操作 Android 模拟器 .... 12

使用 Android 模拟器 .... 12

列出模拟器类型 .... 12

建立模拟器 .... 13

列出已建立的模拟器 .... 14

移除模拟器场景 .... 16

移除模拟器 .... 17

建立一个 Android 程序 .... 18

建立新工程 .... 18

初识 GUI 界面 .... 21

描述使用者 界面 .... 21

设计 GUI 界面 .... 25

视图(View) .. 25

查阅文件 .... 25

离线文件 .... 25

视觉化的 界面 开发工具 .... 28

获取标识 ID .. 29

存取识别符号 .... 29

新增 XML 文件 .... 33

解读程序流程 .... 35

解读程序流程 .... 35

完成 BMI 程序 .... 39

完成 BMI 程序 .... 39

初级 .... 43

重构程序 .... 43

什么是重构 .... 43

MVC .. 43

初识 Inten .. 53

初识 Intent 53

加入菜单 .... 57

加入菜单 (Menu) 57

定义 Android 清单 .... 60

加入新的 Activity .. 64

独立的 Activity . 64

传送数据到新的 Activity .. 69

传送数据到新 Activity . 69

活动的生命周期 .... 77

生命周期 .... 77

Active ( 活动) .. 78

Paused ( 暂停) .. 78

Stopped ( 停止) .. 78

Dead ( 已回收或未启动) .. 78

存储信息 .... 83

发布到市集 (Market) 87

Android Market 87

Android Market 的运作方式 .... 87

 


深入浅出 Android

1 入门

初探 Android

2008 年末最大的冲击

目前有 15 亿使用者可以透过电脑,在网路上看到 Google 广告。

若手机使用者也能上网,其潜在使用者则可以达到 30 亿。

 

2007 11 5 日, Google 与其他 33 家手机制造商 ( 包含摩托罗拉、宏达电、三星、 LG) 、手机晶片供应商、软硬件供应商、电信业者所联合组成的开放手持装置联盟 (Open Handset Alliance) ,发布了名为「 Android 的开放手机软硬件平台。参与开放手持装置联盟的这些厂商,都会基于 Android 平台,来开发新的手机业务。

 

紧接着,在 Android 平台公布的一周之后 (11 12 ) Google 随即发布了可以免费自由下载,能在 Windows Mac OS X Linux 多平台上使用的 Android 软件开发工具 (Software Development Kit, SDK) 与相关文件。间隔数天,又再次发布操作系统核心 (kernel) ,与部分驱动程序的源代码。 一项展示 Google 欲将手机这个现代人的随身工具推往开放平台, 让人们可以自由修改创作出符合自己需求的手机应用的决心。

身为 Google 公司创办人之一的 Sergey Brin ,也在 Android 软件开发工具 (SDK) 发布的同时,现身于视讯广告影片中,为大众介绍 Android 平台。 Sergey Brin 也同时宣佈举办总奖金高达 1000 万美元 (3 亿多台币 ) 的开发者大奖赛, 鼓励程序开发者去深入探究 Android 平台的能力。写出具创意、实用性十足、能提供使用者更好的手机使用经验的应用程序。

 

2008 9 24 日, T- Mobile 首度公布第一台 Android 手机 (G1) 的细节,同日 Google 也释出了 Andorid SDK 1.0 rc1 。对应用程序开发者而言, 1.0 代表了开发者可以放心地使用 API ,而不必再担心 API 有太大的变动。 G1 在同年 10 20 正式发售。在发售前仅针对原 T-Mobile 用户的预购活动中,已经被预购了 150 万台。在 10/21 日, Open Handset Alliance 公开了全部 Android 的源代码。从此,开发者拥有了一个完全开放的手机平台。

Android 是什么

在可见的将来,基于 Android 平台的手机程序设计,将像今日的 PC 程序设计一样普及。

 

Android 」是一个基于 Linux 核心 (kernel) 的开放手机平台操作系统。与 Windows Mobile Symbian 等手机操作系统处在同一级别。

 

对于设备制造商来说,「 Android 」是一个免费的平台。「 Android 」操作系统让设备制造商免除「每出一台手机,就得被手机操作系统厂商 ( MicroSoft) 收取费用」的情况。对硬体开发厂商来说,「 Android 」也是个开放的平台。只要厂商有能力,可以在这个平台上自由加入特有的装置或功能,不受手机操作系统厂商的限制。

 

对于手持装置的开发者来说,「 Android 」是个先进的平台。平台上的应用程序可相容于各种型号的 Android 手机,免去为各种不同手机机型开发的困扰。「 Android 」平台支援各种先进的网路、绘图、 3D 处理能力,可以用来提供更好的使用者体验。

 

对于使用者来说,「 Android 」是一个用于手机的操作系统。使用者只要先申请一个免费的 Google 帐户,当使用者想换一台手机时,就可以在不同厂牌,同样使用「 Android 」操作系统平台的手机之间选择,并且很容易地将如联络簿等个人资料转换到新手机上。

 

Android Linux 核心的基础上,提供了各种合用的函式库,和一个完整的应用程序框架。并采用较符合商用限制的 Apache 版权。在 Linux 核心的基础上提供 Google 自制的应用程序运行环境 ( 称作 Dalvik ,与 Sun J2ME 不同 ) ,并提供基于 Eclipse 整合开发环境 (IDE) 的免费、跨平台 (Windows Mac OS X Linux) 开发工具 (SDK) ,便于应用程序开发者学习、使用。

 

免费、熟悉的跨平台开发工具,让具备一些物件导向观念,或视窗程序开发经验的开发者,能在一定时间内上手。 1000 万美元的大奖赛则提供了足够的诱因,让第一支 Android 手机正式面市前,就拥有了各式各样的应用程序可供使用。

 

从不同角度来说, Android 代表着

 

l  一个崭新的开放源代码操作系统平台、

l  一个友善的免费应用程序开发环境、

l  一个与世界各地的程序开发者,站在相同起跑点上的公平竞争机会。

 

 

 


从创意开始

预测未来的最好的方式,就是去创造未来

你是否曾经思考过,当我们拥有了一台能够上网,能够依照自己的期望自由修改、调试功能的手机,我们会用它来施展什么创意 ? Android 大奖赛首页上提供了一些方向。

 

你的心里可能已经有了关于手机程序的绝好创意,你想在 Android 开放手机平台上,实现因为其他封闭平台的种种限制,而无法在手机上达成的需求;无论你以何种目的来看待「 Android 」平台,都需要为了达成你的创意, 所需的一些基本协助。 本书所提供的内容,将可以协助你快速地理解 Android 平台的概念。 提供你初次开发手机程序界面的注意事项、 Android 资料应用程序的运作过程, 与详细的 Android 应用程序实例解说。

 

要开发 Android 应用程序,你甚至不需要拥有实机。 Google 已经为我们提供了各个主要平台 (Windows Mac Linux) 上可用的开发工具包。开发工具包中,也包含了 Android 手机模拟器,好让我们在电脑上就能完成所有的手机应用程序开发工作。接着,我们就先来安装 Android 开发工具吧。

 

参考资料

 

* Android 官方网站 http://www.android.com/

* 开放手持装置联盟 (Open Handset Alliance) http://www.openhandsetalliance.com/

* Google Android 开发者部落格 http://android-developers.blogspot.com/

* Android 开发者大赛网站 http://code.google.com/android/adc.html

* Android 文件 http://developer.android.com/

* http://www.onlamp.com/pub/a/onlamp/2007 ... e-sdk.html

* CNet 专访: Google 手机平台背后的原创者

http://www.zdnet.com.tw/news/comm/0,200 ... 898,00.htm

* Android 源代码网站 http://source.android.com


安装 Android 开发工具

InstallAndroid

安装 Android 开发工具

 

Android 提供免费而且跨平台的整合开发环境,只要电脑能连接上网路,我们随时都能下载相关工具下来,并开始开发 Android 应用程序。 有了轻便易用的开发工具,我们可以把心力专注于如何将想法实现到应用程序上。

系统需求

 

撰写 Android 的应用程序,需要一套个人电脑系统。至于操作系统的部份,几个主流操作系统都有支援。

 

支援的操作系统如下:

* Windows XP Vista

* Mac OS X 10.4.8 或之后版本 ( 适用 x86 架构的 Intel Mac)

* Linux ( 官方于 Ubuntu 6.10 Dapper Drake 上测试 )

我们需要安装一些 Android 开发环境所需的程序工具,这些工具都是可以免费上网取得的:

* JDK 5 JDK 6

 

你需要安装 Java 开发工具 (JDK 5 JDK 6) 只安装 Java 运行环境 (JRE) 是不够的,你需要安装 Java 开发环境 (JDK)

你可以在命令行上输入 java -version 来查看目前系统上已安装的 java 版本 (java 版本需 >1.5)

要注意的是 Android Java Gnu 编译器 (gcj) 还不相容。

 

* Eclipse IDE ,一个多用途的开发工具平台。

 

你可以下载安装 Eclipse 3.3 ( 代号 Europa) 3.4 ( 代号 Ganymede) 版。

请注意你选择的版本需包含 Eclipse Java 开发工具扩充套件 (Java Development Tool Plugin, JDT)

大多数 Eclipse IDE 包中都已含有 JDT 扩充套件。若对 Eclipse 平台不熟悉的话,建议直接选择 for Java Developers 」版本来下载。

 

* ADT ,基于 Eclipse Android 开发工具扩充套件 (Android Development Tools plugin)

* Android SDK Android 程序开发套件,包含 Android 手机模拟器 (Emulator)

* 其他开发环境工具(非必要安装)

 

o Linux Mac 环境上需要自动编译的话可以自行安装 Apache Ant 1.6.5 或之后版本, Windows 环境上则需要 Apache Ant 1.7 或之后版本。

  o NetBeans IDEA 等开发平台亦有推出自己的 Android 开发工具,但本书中还是以讨论官方基于 Eclipse 平台的开发工具为准,其他平台不予涉及。

安装流程

假设读者已先安装了 JDK 5 JDK 6 那麽 Android 的安装流程可以分为以下五个步骤

1. 下载 Eclipse

2. 安装 Eclipse

3. 安装 ADT 扩充套件

4. 下载 Android SDK

5. 设定 Android SDK


详细的安装流程如下:

1. 下载 Eclipse

首先我们需要下载 Android 开发时会用到的整合开发环境 Eclipse

目前 Android 应用程序只支援使用「 Java 」程序语言来编写 Android 应用程序。所以开发前必须先安装 Java 开发套件 (Java Development Kit, JDK) 各平台的 JDK 可至 http://java.sun.com 下载。

Mac OS X 操作系统则已内建 JDK 安装好 JDK 后,我们可以前往 Eclipse 网站下载 Eclipse 这个方便的整合开发环境。

下载 Eclipse 时请选「 Eclipse IDE for Java Developers 」或「 Eclipse IDE for Java EE Developers 」这两种版本,只有这两种版本才会预装 Eclipse JDT 扩充套件。 范例中所选择的是「 Eclipse IDE for Java Developers 」版本。下载完同样先解压缩到适当目录下。

2. 安装 Eclipse

 

Eclipse 不需要安装,只要确认你的系统上有安装 Java ,即可直接开启 Eclipse 文件夹,
点击 Eclipse 开始执行 Eclipse 整合开发环境。

第一次启动 Eclipse 时会弹出视窗让你决定预设的工作目录。一般使用 Eclipse 预设的工作目录即可。进入到 Eclipse IDE 后,不必急着四处观望。我们先来安装 Android 开发工具扩充套件。

 

3. 安装 ADT 扩充套件

 

我们将在 Eclipse 安装 Android 开发工具 (ADT)

Eclipse 3.4

找到屏幕上方的选单列, 选择 Help->Software Updates 选项,这选项会带出一个新视窗。

选择「 Available Software 」标题,选择右方的 Add Site... ( 新增网站 ) 按钮,会弹出一个输入框。

在输入框中的 "Location" 栏位中输入网址 (URL)

  https://dl-ssl.google.com/android/eclipse/site.xml

按下 "OK" 按钮离开。 Eclipse 会花一点时间寻找合适的版本。如果不行的话可以尝试使用 http://dl-ssl.google.com/android/eclipse/, 有时候 https 是无法访问的。

 

在视窗中全选「 https://dl-ssl.google.com/android/eclipse/site.xml 」项目「 Developer Tools
中的的选项后,按下右方的「 Install 」按钮。

按下 Next ( 下一步 ) 键。照着步骤就安装完成。安装完会提示需重新启动 Eclipse ,按下 Yes 重新启动。

Eclipse 3.3

 

找到萤幕上方的选单列, 选择 Help->Software Updates->Find and Install 选项,这选项会带出一个新视窗。

选择 Search for new features to install ( 搜寻新功能供安装 ) 选项,按下 Next ( 下一步 ) 键。出现设定画面。

选择右上角的 New Remote Site ( 新增远端网站 ) 按钮,会弹出一个 New Update Site ( 新增更新网站 ) 输入框。

在输入框中输入扩充套件的名称 (Name) ADT 跟网址 (URL) http://dl-ssl.google.com/android/eclipse/site.xml 」,按下 OK 按钮离开。

按下 Finish 按纽继续下一步。 Eclipse 会花一点时间寻找合适的版本。

接着我们要做的,就是等 Eclipse 显示出选项时,勾选合适的版本安装。

安装完会提示需重新启动 Eclipse ,按下 OK 重新启动。

离线安装

已经安装成功的读者可以跳过这段。有些读者因为网路环境的关係,无法顺利地直接线上安装 Android 开发工具。

这时我们可以先前往 http://developer.android.com/sdk/adt_download.html ,手动下载最新的开发工具版本来离线安装。

下载完最新的 ADT 扩充套件后,打开 Eclipse 开发环境,找到萤幕上方的选单列, 选择 Help->Software Updates 选项,

这选项会带出一个新视窗。选择「 Available Software 」标籤,选择右方的 Add Site... ( 新增网站 ) 按钮,会弹出一个输入框。

 

选择右上角的「 Local... 」按钮,并选取刚下载的 Android 最新开发工具档桉,选到之后按下 "OK" 按钮离开。

在视窗中全选新出现项目的所有选项后,按下右方的「 Install 」按钮。 Eclipse 会花一点时间开始安装 ADT 扩充套件。

4. 下载 Android SDK

 

接着我们要从 http://developer.android.com/ Android 官方网站下载 Android 软件开发套件」 (Software Development Kit, SDK) 下载下来的 SDK 档桉需要先解压缩。 Windows 平台需要先另行安装解压缩程序,如免费的 7-zip 解压缩工具。

解压缩后会出现一个资料夹。为了之后描述方便,我们将解压缩后的 Android SDK 档桉夹命名为「 android_sdk 」。

5. 设定 Android SDK

 

打开偏好设定页面 (Preference) ,选择 Android 标签 ( 请确认您已安装好 ADT 扩充套件, Android 标志才会出现在偏好设定页面中 ) ,在 SDK Location 栏位按下 " Browse..." 键,选择刚刚解压缩完的「 android_sdk 」档桉夹所在地,然后按下视窗右下角的套用 (Apply) 按钮。这样一来, Android SDK 就算是设定好啦。

注解:若您安装过 SDK 1.5 版之前的版本,请先移除后再重新安装一次 ADT 扩充套件,才能顺利设定新版的 Android SDK

方法是在萤幕上方的选单列,选择「 Help > Software Updates 」选项,在弹出的视窗上方点选「 Installed Software 」页面,选择「 Android 」开头的选项,点选右侧的「 Uninstall.. 」按钮移除这些相关的插件。

下一步

设定好 Android SDK 后,我们就拥有了一个完整的 Android 开发环境。 我们先来看看 Android SDK 中提供的一些范例,

好了解 Android 到底能做些什麽。

参考资料

 

Eclipse 网站 http://www.eclipse.org/downloads/

安装扩充套件 http://developer.android.com/guide/deve ... s/adt.html


开启现有工程

开启工程

 

我们回到 Eclipse 环境来。在屏幕上方的选单列上,选择「 File->New->Project 」,会弹出「 New Project 」对话视窗。 Eclipse 是通用的编辑环境,可根据你所安装的不同扩充套件而支援许多种类的工程。 点击 Android 」资料夹下的「 Android Project 」,会开启「 New Android Project 」对话视窗。

 

我们将 开启 Android SDK 中提供的 ApiDemos 范例。在「 New Android Project 」对话视窗中,点选 "Browse..." 按钮以选择「开启已经存在的工程」 (Create project from existing source) 。我们在此选择位于「 android_sdk/platforms/android-1.5/samples 」目录中的 Android 应用程序工程 (android_sdk/platforms/android-1.5/samples/ApiDemos)

 

当我们选择了现存的范例程序工程时,「 New Android Project 」对话视窗中的诸如工程名称( Project Name )与属性等内容都将被自动填写好。这时我们可以按下 Finish 」按钮,完成从现存工程新增工程到 Eclipse 环境的动作。

导入工程

 

如果你的程序工程已位于工作环境 (WorkSpace) 资料夹下,想使用上述方法开启工程时,会得到欲开启的资料夹已在工作目录下的警告。因此我们得用另一个方法:导入工程。

 

屏幕上方的选单列上,选择「 File->Import 」选项,会跳出「 Import 」视窗。选择「 General->Existing Projects into WorkSpace 」项目,然后按下「 Next 」按钮带到新一个画面。在「 Select Root Directory 」栏位旁,按下右方的「 Browse... 」按钮,选择对应的工程。选择好后,按下「 Finish 」按钮完成从现存在工作环境 (WorkSpace) 资料夹下的工程汇入到 Eclipse 环境的动作。

修复工程

 

完成新增程序工程到 Eclipse 后,我们可以在左侧的「 Package Explorer 」中找到我们新增的工程。

 

如果发现开启后的资料夹图示上有个小小的黄色惊叹号,表示这个工程汇入后还有些问题,我们可以使用 ADT 内建的功能来试着修复。 在「 Package Explorer 」的 ApiDemos 工程档桉夹图示上点选右键,从「 Android Tools 」选单中选择「修复工程属性」 (Fix Project Properties) (Android Tools->Fix Project Properties)
参考资料

 

* 如何开启 Hello World 程序 http://developer.android.com/guide/tuto ... world.html


操作 Android 模拟器

使用 Android 模拟器

我们已经透过「 Eclipse 」开发环境,开启了「 ApiDemos 」源代码。本章将讲解如何设定和操作 Android 模拟器。

设定 Android 模拟器

 

现在我们还不忙着开始写程序,先花点时间,来看看怎么在开发环境中,通过「 Android 模拟器」来执行应用程序吧。

Android 软件开发套件」( SDK 1.5 以上的版本提供了支援不同版本模拟器的功能,在使用模拟器之前,必须先建立一个模拟器后才可在 Eclipse 开发环境中使用。

SDK 中提供了一个「 android 」命令行工具(在 android-sdk/tools 中),可以用来建立新专桉或是管理模拟器。在此我们使用「 android 」命令行工具来新建立一个模拟器。

在新的 Android 文件中,一律把 Android 模拟器称作「 Android 虚拟机器」( Android Virtual Device ),简写为「 AVD 」以作区别。

列出模拟器类型

首先,把「 android-sdk/tools 」目录加入系统路径,我们以后就可以在任何地方使用「 android-sdk/tools 」目录下的各种命令。

Windows 2000 XP 2003 这些操作系统里,点选「我的电脑右键 > 属性 > 高级 > 环境变数」。在「系统变数 (S) 」栏中,选取「 PATH 」变数名称后,再点选「编辑 (I) 」按钮。

再此假设您安装 Android SDK 的路径是「 C:/android-sdk/tools 」,接着在弹出的视窗中将「 ;C:/android-sdk/tools 」(注意要以分号隔开)这字串添在原本的字串之后,按下确定后重新启动操作系统。

重开系统后选择「开始 > 执行」,在弹出的输入框中输入「 cmd 」,即可开启命令行工具并继续以下的动作。

或是您也可以直接打开命令行,进入「 android-sdk/tools 」目录,输入以下命令:

代码 :

$ android list targets

 

在没有将 Android SDK 加入路径的情况下,在 Linux Mac 环境中要输入

代码 :

$ ./android list targets

萤幕上会列出所有支援的模拟器类型

代码 :

$ android list targets

Available Android targets:

id: 1

     Name: Android 1.1

     Type: Platform

     API level: 2

     Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

id: 2

     Name: Android 1.5

     Type: Platform

     API level: 3

     Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

id: 3

     Name: Google APIs

     Type: Add-On

     Vendor: Google Inc.

     Description: Android + Google APIs

     Based on Android 1.5 (API level 3)

     Libraries:

com.google.android.maps (maps.jar)

        API for Google Maps

Skins: HVGA (default), HVGA-L, QVGA-P, HVGA-P, QVGA-L

在这边列出了三种模拟器类型。分别是编号 (id) 1 2 Android 1.1 1.5 模拟器,与编号 (id) 3 的「 Google APIs 」, Google 把自己提供的应用程序(如 Google Map )放在「 Google APIs 」这个模拟器类型中,因此要开发 Google Map Google 专属应用程序时,就必须先建立编号 3 这类型的模拟器,稍后才能在适当的模拟器上作验证。

建立模拟器

我们现在来建立一个基本的 Android SDK 1.5 模拟器。

在命令行中输入以下命令:

代码 :

$ android create avd --target 2 --name cupcake

这段命令的意思是:使用「 android create avd 」命令来建立一个新的模拟器,「 --target 2 」参数的意思是这个模拟器使用 id 2 的模拟器类型( Android 1.5 ),「 --name cupcake 」参数的意思是将这个建立的模拟器命名为「 cupcake 」。

产生的结果如下

代码 :

$ android create avd --target 2 --name cupcake

Android 1.5 is a basic Android platform.

Do you wish to create a custom hardware profile [no]

Created AVD 'cupcake' based on Android 1.5

 

列出已建立的模拟器

 

我们可以使用 Android 」命令行工具提供的「 list avd 」命令,来列出所有我们已经建立的模拟器。

 

在命令行中输入以下命令:

代码 :

$ android list avd

产生的结果如下:

代码 :

$ android list avd

Available Android Virtual Devices:

Name: cupcake

Path: /Users/mac/.android/avd/cupcake.avd

Target: Android 1.5 (API level 3)

    Skin: HVGA

使用「 android list avd 」命令看到有输出,即表示已成功建立模拟器,可以回到 Eclipse 环境来,设定执行应用程序所需的环境参数了。

设定环境参数

要执行 ApiDemos 程序前,我们得在开发环境中,事先设定好一些用来执行 ApiDemos 程序的环境参数。 以后使用其他程序专桉时,我们也能用同样的方式,让这些程序在我们的开发环境中运行。

首先,我们透过选单列上的「 Run ( 执行 ) 选单,选择「开启执行参数设定」 (Run-> Debug Configurations...) 进入运行环境参数设定画面。

进入设定画面后,在视窗左侧会有一整排 Eclipse 支援的运行设定,我们从中找到 "Android Application"(Android 应用程序 ) 项目,按下滑鼠右键,点选 "New"( 新增 ) 选项。

选择 New 选项后,在「 Android Application 」项目下方会多出一列执行项目。

我们可以在 Name 栏位上输入一个代表这个环境参数的名称,在此我们输入与专桉名称相同的「 ApiDemos 」。

在「 Project 」栏位右方,点选「 Browse... 」按钮,开启「选择」( Project Selection )视窗,选择「 ApiDemos 」专桉并点选「 OK 」按钮,以选择要执行的工程。

Launch Action 选单中,确认预设选择的是「 Launch Default Activity 」。

至此我们就完成了模拟器环境参数的设定。 点选右下角的「 Debug 」按钮, Eclipse 就会启动 Android 模拟器。

小技巧 :

在选单列中,也可以选择设定「 Run Configuration... 」选项。这时我们得到的是一个几乎完全相同的环境参数设定画面,只是右下角的「 Debug 」按钮变成了「 Run 」按钮。 Debug 」与「 Run 」模式的环境参数设定可以共用,差别在于「 Debug 」模式下可以使用在之后章节中会介绍的 logd ,来显示一些开发时所需的额外讯息。

再次启动 Android 模拟器

当我们设定好之后,以后碰到要再次启动模拟器的情况时,只要在萤幕左上角的「 Debug 」或「 Run 」图示右侧小箭头上按一下,从弹出的选单中选择刚刚设定的环境参数名称,模拟器即开始执行,并安装好我们所指定的专桉应用程序。
操作 Android 模拟器

切换模拟器场景

在命令列上执行「 android list targets 」命令后,我们可以看到萤幕上列出所有支援的模拟器类型。举我们刚才建立过的第二种类型( id 2 )模拟器为例,列出讯息如下:

代码 :

id: 2

     Name: Android 1.5

     Type: Platform

     API level: 3

     Skins: G1, HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

 

其中 Skins 栏位中会列出所有支援的模拟器场景。

预设有「 HVGA 」与「 QVGA 」两种画面配置选项可选择,「 HVGA 」与「 QVGA 」又可以再各自分为「 -L (landscape, 横式 ) 与「 -P (portrait 直式 )

要建立「 QVGA 」模式的模拟器,则在前一节「 android create avd 」命令后,附加上「 --skin QVGA 」选项即可。要将预设的「 HVGA 直式」显示改为横式,则可以透过使用快速键,直接切换萤幕来达成。

切换萤幕

Windows 操作系统上按下 Ctrl 」和「 F12 」键 ,或是在 Mac OS X 操作系统上同时按下「 fn 和「 7 」键,萤幕就会从预设的直式显示改成横式显示,再按一次则切换回原来的直式显示。

新增模拟器外观设定

Android 模拟器的用途,就是协助我们在电脑上也能模拟真实手机的动作。不禁会想,如果模拟器除了所模拟的动作之外,模拟器的外观也能跟实机长的一样,那不是整个更拟真,开发起来更有感觉吗?

没错,所以 Android 模拟器也允许使用者自行製作模拟器外观!

除了预设的模拟器外观之外,以世界第一台发售的 Android 手机「 T-Mobile G1 」为例,有人已经作好了「 T-Mobile G1 」的模拟器外观。可以前往 http://www.jsharkey.org/downloads/G1.zip 下载。

要新增模拟器外观时,只需把下载后的模拟器外观档桉解开成一个资料夹,再将资料夹放到「 android_sdk/platforms/android- 1.5/skins 」目录下。做完后在命令列中输入「 android list targets 」命令,即可发现 id 2 (Android 1.5 ) 列表中的「 Skins 」项目新增加了「 G1 」一项 ( 可透过更改目录名称来自行命名 )

代码 :

id: 2

     Name: Android 1.5

     Type: Platform

     API level: 3

     Skins: G1, HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

要建立使用新模拟器外观的模拟器,可以在之前命令后加入「 --skin 」选项。命令如下:

代码 :

$ android create avd --target 2 --name devphone –skin G1

 

我们也可以偷懒不用参数的全名,将参数用简写表示。即用「 -t 」表示「 --target 」,用「 -n 」表示「 --name 」,用「 -s 」表示「 --skin 」。改输入如下:

代码 :

$ android create avd -t 2 -n devphone –s G1

 

移除模拟器场景

要移除一个模拟器场景,直接删除在「 android_sdk/platforms/android-1.5/skins 」中的对应目录即可。

移除程序

我们已经顺利地启动了模拟器,那麽,该怎麽移除安装到模拟器上的程序

Android SDK 中提供一个 adb (Android Debugger) 命令行工具 ( android-sdk/tools ) ,我们可以用裡面的 shell 工具连上模拟器来移除应用程序。在某些平台上,这些动作可能需要拥有 root 权限才能执行。

首先打开命令列,启动 adb shell

代码 :

$ adb shell

 

接着切换到 data/app 目录中

代码 :

    $ cd data/app/

使用 ls 命令 ( 等同 windows 上命令行的 dir 命令 ) 来检视档桉列表

代码 :

# ls

  -rw-r--r-- system   system    1325833 2007-11-11 20:59 ApiDemos.apk

接着使用 rm 命令来删除 ApiDemos 应用程序

代码 :

   # rm ApiDemos.apk
    # ls

移除模拟器

我们可以使用「 android list avd 」命令来列出所有的模拟器

代码 :

$ android list avd

Available Android Virtual Devices:

Name: cupcake

Path: /Users/mac/.android/avd/cupcake.avd

  Target: Android 1.5 (API level 3)

Skin: HVGA

 

表示现在系统中有一个名为 cupcake 的模拟器。 我们可以使用「 android delete avd --name cupcake 」命令来删除名称为「 cupcake 」的模拟器。

代码 :

$ android delete avd --name cupcake

AVD 'cupcake' deleted.

 

删除后再次执行「 android list avd 」命令,得到的结果为

代码 :

$ android list avd

Available Android Virtual Devices:

表示系统中已经不存在任何模拟器,我们真的已经将模拟器删除了。

阅读参考

* 模拟器操作细节 http://developer.android.com/guide/deve ... lator.html
*
模拟器外观下载 http://www.android.encke.net/


建立一个 Android 程序

在前几章我们已经学到怎麽开启现有的专桉,也导览过了整个模拟器的设定流程。 现在我们从设计一个简单实用的身高体重指数计算 (BMI) 应用程序开始,学习设计一个 Android 应用程序所需的基础。

 

维基百科上这么介绍 BMI 身高体重指数:

 

身高体重指数(又称身体质量指数,英文为 Body Mass Index ,简称 BMI )是一个计算值。

... 当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,
BMI
值是一个中立而可靠的指标。

简而言之,我们要设计的程序就是允许输入身高体重,按下「计算 BMI 」键后就在萤幕上显示 BMI 值,并弹出「你应该节食」、或「你应该多吃点」 ... 等健康建议。健康建议的判断 : 只要 BMI 值超过 25 时就算偏胖、 BMI 值低于「 20 就算偏瘦。 判断写得很简单。毕竟我们要学习的关键知识,不是在于 BMI 值的算法或健康建议的内容,而是在于 Android 程序的运作方式。

参考资源 http://zh.wikipedia.org/wiki/ 身高体重指数

我们这就先从建立一个新的程序开始吧。

建立新工程

 

首先,我们照前面章节的教学,建立一个新的程序工程。并将新工程名称命名为 BMI 。在「内容」栏里,我们选择「在工作区域中建立新专桉」 (Create new project in workspace) 。这时,如果在 " 选择栏 " 取消掉勾选「使用预设目录」 (Use default location) 选项,我们就可以切换储存专桉的资料夹。大部分的时候我们并不需去改动这个选项,而是直接使用预设的资料夹。

前面章节中都是开启现有的专桉,因此那些专桉属性 (Properties) 等内容都被自动填写好了。这章中要从无到有新建一个专桉,因此我们必须自行填写专桉相关的属性。

在此对 "New Android Project" 对话框中出现的这些栏位作些简单的说明:

名称 描述

Project Name 包含这个项目的资料夹的名称

Application Name 显示在应用程序上的标题

Package Name (Package) 名称, JAVA 的习惯是用套件名称来区分不同的类别 (class) 。依照专桉的不同,我们会起不同的路径名称。

Create Activity 使否建立这个是项目的主要类别,勾选后可以指定这个类别的名称。这个类别是一个 Activity 类别的子类别。我们可以在「 Activity 」中启动程序和控制程序流程,或是根据需要控制萤幕、界面。

Build Target 选择用来编译专桉的 SDK 版本。 当选定了 Build Target 后,开发工具会在 Min SDK Version 栏位中自动填入对应的值

Min SDK Version 本应用程序所支持的最低 SDK 版本代号。

 

我们在栏位中分别填入以下的值:

 

名称

Project Name BMI

Application Name BMI

Package Name : com.demo.android.bmi

Create Activity : Bmi

Min SDK Version : 3 (自动填入)

 

填好值后按下「 Finish 按钮,就建立好新工程了。

 

Package Name 的设定,必须至少由两个部分所构成,例如: com.android 。「 Activity Name 」是指定用来产生预设 java 程序码的文件名称,与文件中预设 Activity 类别 (class) 的名称。依照 java 语言的命名习惯,「 Activity Name 」最好是用开头大写的形式。

 

回到 Eclipse 主画面,我们注意到在左侧 Package Explorer 视窗中已顺利新增加了一个 BMI 目录。

 

程序工程架构

 

乍看之下, Android 插件已帮我们建立了不少档案。 检视新建立的 BMI 档桉夹中的内容,我们可以将一个 Android 应用程序基本的档桉结构归纳成如下:

 

我们来看看 Android 应用程序的基本档桉结构,以及各自所负责的内容。

src/ 源代码 (source) 目录

src 目录中包含了一个 Android 应用程序中所需的各个程序码档桉。这些档桉被包在对应 package 的子目录下。 ( 如本章的 BMI 例子中,子目录指的就是 /src/com/demo/android/bmi/)

src 目录中比较关键的程序有 :

1. Bmi.java 这个档桉的档名会随着你在建立一个新的程序专桉画面中所填入「 Create Activity 」栏位值的不同而改变。这是新程序专桉中的主要程序区块。我们开发 Android 程序的多数时间,都是在 src 目录下和 Android 打交道。

gen/ 自动生成 (Generate) 目录

gen 目录中存放所有自动生成的档桉。

gen 目录中最关键的程序就是 R.java 档。

2. R.java 这个档是自动产生的。会由 ADT 插件自动根据你放入 res 目录的 XML 描述文件、图像等资源,同步更新修改 'R.java' 这个文件中。所有的 Android 程序中都会有以 R.java 为名的这个档桉,你完全不需要,也应避免手工修改 R.java 这个档桉。

R.java 中自动产生的「 R 类别就像是个字典一样,包含了使用者界面、图像、字串等各式的资源与相应的编号 (id) Android 应用程序中很多时候会需要透过 R 类别调用资源。 编译时编译器也会查看这个资源列表,没有使用到的资源就不会编译进去,为手机应用程序节省不必要没用的空间。

res/ 资源 (Resource) 目录

res 目录中存放所有程序中用到的资源档桉。 " 资源档桉 " 指的是资料档桉,或编译时会被转换成程序一部分的 XML 描述档。 Android 针对放在「 res 目录下的不同子目录的资源,会有各自不同处理方式。因此我们写程序时,最好能搞清楚各目录下分别可放置的内容。

res/ 中的程序 :

3. layout/ 版面配置 (layout) 目录 layout 」目录包含所有使用 XML 格式的界面描述档。「 layout 中的 XML 界面描述档就像写网页时用到的 HTML 档桉一样,用来描述萤幕上的版面编排与使用的界面元件。 XML 界面描述档描述的内容可以是整张萤幕,也可以只描述一部分的界面 ( 例如描述用来产生对话框的界面元件 )

虽然你也能直接通过 Java 来建立使用者界面,不过透过 XML 描述档来建立使用者界面相对更简单,架构也更清晰,以后维护时更容易釐清问题。要使用这些界面元件,应透过 R.java 档中自动产生的 R 类别来调用。

4. values/ 参数值 (value) 目录 values 目录包含所有使用 XML 格式的参数值描述档,可以在此添加一些额外的资源如字串 ( 很常用 ) 、颜色、风格等。使用时也是透过 R 类别来调用。

Android 功能清单

5. AndroidManifest.xml

AndroidManifest.xml Android 程序的功能清单,应用程序在这离列出该工程所提供的功能。当应用程序开启时,会提供诸如内容提供者 (ContentProvider) 、处理的资料类型、 实际运行的类别、跨应用程序的资讯等等讯息。 你可以在此指定你的应用程序会使用到的服务 ( 诸如电话功能、网路功能、 GPS 功能等 ) 。当你新增一个页面行为类别 (Activity) 时,你也需要先在此注册这个新增的 Activity 类别后,才能顺利调用。
参考资料

Android 应用程序的档桉组织方式与用途 http://developer.android.com/guide/appe ... l#filelist


初识 GUI 界面

描述使用者界面

 

将一份创意落实到可执行的应用程序,背后需要的是从阅读与写作程序码中累积的经验,并有坚持理念、直到完成的耐心。

表达使用者界面:

我们可以先用前几章教的方法设定并执行模拟器,看看模拟器运作后的结果:

我们看到一个文字栏位,上面有一串文字 「Hello World, Bmi! 」。这就是 Android 预设程序架构的范例。

由于才刚开始实际接触到 Android 应用程序,我们先从简单的开始:这一节中,我们的目标是将 「Hello World, Bmi! 」 换成别的文字。

那么,「Hello World, Bmi! 」,这串字串藏在哪里呢?

先打开 「res/layout/main.xml

代码:

    1 

    3     android:orientation="vertical"

    4     android:layout_width="fill_parent"

    5     android:layout_height="fill_parent"

    6     >

    7     

    8          android:layout_width="fill_parent"

    9          android:layout_height="wrap_content"

    10        android:text="Hello World, Bmi"

    11        />

    12

 

原来「Hello World, Bmi! 」字串就藏在「res/layout/main.xml 」这个档桉的第 10 行中。我们只要简单地将第 10 行修改成如下

代码:

android:text="Hello World, Bmi!”

 

再执行一次模拟器,就可以得到一个相似的应用程序,只是内文变成了我们刚刚修改的内容。

既然找到了「Hello World, Bmi! 」字串,我们就试着将「android:text 」属性值从「Hello World, Bmi! 」改成「哈喽,BMI 」,然后执行看看吧。

代码:

android:text=" 哈喽,BMI"

结果发现 Android 模拟器中文嘛也通,字型也相当漂亮。

要开始学习 Android 应用程序确实很简单吧?不过为了显示「Hello World, Bmi 」,也用到了许多程序码。到底这些程序码有什么含意呢?

我们马上来学习 「main.xml 」这个 XML 界面描述档的内涵吧。

Android 平台,使用者GUI 界面都是透过 ViewGroup View 类别来显示。ViewGroup View Android 平台上最基本的使用者界面表达单元。我们可以透过程序直接呼叫的方法,调用描绘使用者界面,将萤幕上显示的界面元素,与构成应用程序主体的程序逻辑,溷合 在一起编写。或是,也可以将界面显示与程序逻辑分离,照着 Android 提供的这个较优雅的方式,使用 XML 描述档,来描述界面元件的组织。

讲解

我们看到的「Hello World, Bmi 」就包含在「main.xml 」 这个档桉中。 接着,我们就直接分部份来讲解这个「main.xml 」的内容:

1

代码:

   

XML (Extensible Markup Language) 是一种标记描述语言,不管是语法还是看起来的样子,都相当类似网页所使用的 HTML 标记语言。XML 被广泛地运用在 Java 程序的设定中。「main.xml 」 文件裡,第一行是每个 XML 描述档固定的开头内容,用来指示这个文字档桉是以 XML 格式描述的。

2, 6 12

代码:

   

接着我们看到第一个标签,与 HTML 网页标签相当类似。

代码:

   

" 线性版面配置"(LinearLayout) 标签,使用了两个「LinearLayout 」标签,来表示一个界面元件的区块。后头的标签前加上一个「/ 」 符号来表示结束标签。" 线性版面配置" 所指的是包含在 「LinearLayout 」标签中,所有元件的配置方式,是将一个接一个元件由上而下排队排下来的意思。

代码:

     xmlns:android="http://schemas.android.com/apk/res/android"

xmlns 开头的这串叙述,是用来宣告这个 XML 描述档桉的的名称空间(NameSpace) ,后面接的URL( 网址) ,表示这个描述档桉会参照到 Android 名称空间提供的定义。 所有 Android 版面配置档桉的最外层标签中,都必须包含这个属性。

注意标签需要两两对称。一个标签「

引用:

」在一串叙述的前头,另一个标签「

引用:

」在叙述的末尾。 如果你修改过的标签没有闭合( 忘了加 </> 等符号)Eclipse 画面上也会出现小小的警示符号来提醒你。

3-5

代码:

android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"
这些包含在「

代码:

」 标签中的叙述被称为「LinearLayout 」标签的「属性」。Android 应用程序在 layout 目录中的标签,大多数的属性前都有一个「android: 」前缀。同一个界面元件的属性之间,是以空白做区隔,因此事实上你也能将多个属性写在同一行。当 然,将属性排成多行更易于阅读。我们应该保持这个好习惯。

界面元件都有许多共同的属性,例如界面元件的长,宽度设定属性。Android 界面元件的宽度、长度设定属性分别叫做「android:layout_width 」、「android:layout_height 」。两个都设定为 「fill_parent 」参数值。「fill_parent 」 如其名,所表达的的意思就是" 填满整个上层元件" 。预设 LinearLayout 界面元件就会充满整个屏幕空间。

界面元件彼此间也会有一些不同的属性,例如「LinearLayout( 线性版面配置) 标签的「android:orientation( 版面走向) 属性。在此填入「vertical ( 垂直) 属性值,表示这个界面的版面配置方式是从上而下垂直地排列其内含的界面元件。

android.view.ViewGroup 」 是各种布局配置(layout) 和视图(View) 元件的基础类别。常见的实现有LinearLayout( 线性版面配置)FrameLayout( 框架版面配置)TableLayout( 表格版面配置)AbsoluteLayout( 绝对位置版面配置)RelativeLayout( 相对位置版面配置) 等。

虽然有这么多种版面配置方式可以选用,但大多数的应用程序并不需特地去改变预设的 LinearLayout 的配置,只要专注在其中填入需要的界面元件即可。所以从第 7 行之后的内容才是一般应用程序开发时较常修改之处。

7 11

代码:

TextView ( 文字检视) 是我们看到的第一个熟悉的界面元件。其作用是显示文字到屏幕上。你可能注意到这个标签结尾使用了 「/> 」 符号。「/> 」符号表示这个XML 叙述中没有内文,亦即此界面元件描述中不再包含其他界面元件,也表示这个界面元件就是这个萤幕中最小的组成单元 了。

8-10

代码:

    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, bmi"
   

我们来看看 TextView 界面元件中包含了哪些属性。

android: layout_width 」和「android:layout_height 」我们刚刚已经学过了,分别代表宽度跟长度。「android: layout_width 」 的 「fill_parent 」 参数值表示宽度填满整个上层界面元件( LinearLayout 界面元件) 。「android:layout_height 」则是用上一个新的参数值「wrap_content( 包住内容) ,亦即随着文字栏位行数的 不同而改变这个界面元件的高度。最后的 「android:text 」 属性则是 TextView 界面元件的主要属性,亦即文字栏位中显示的文字内容。至于「@string/hello 」这段字串所代表的意义,马上会接着在后面章节说明。我们现在已知道是:只要将「android:text 」属性内容替换成我们想要文字,在预览画面或在 模拟器中就会显示对应的文字。

将以上的 XML 描述综合起来,我们就可以得知「main.xml 」 想表达的界面。


设计 GUI 界面

视图(View)

软件设计的过程中,常常会遇到需要频繁修改使用者界面的情境。改着改着程序设计师们就累积起了一些经验,也归纳出了许多应对之道。如着名的 MVCModel-View-Controller ) 模式。Google Android 为我们考虑了界面修改问题。Android 为了单纯化界面修改方式,采用了目前比较流行的解决方桉-- 即将界面描述部份的程序码,抽取到程序外部的 XML 描述文件中。

我们在前面的过程种已经学到,如何在 Android 应用程序中替换 TextView 界面元件所显示的纯文字内容。那么... 这个经验能不能直接用到 BMI 应用程序的设计上呢?

我们先回过头来想想, BMI 应用程序最少应该需要射门些什么元件。

为 了输入 BMI 程序所需的身高体重值,大致上我们需要两个 TextView 元件用来提示填入身高体重数字,另外也需要两个文字输入栏位用来填入身高体重数字。我们还需要一个按钮来开始计算,而计算完也需要一个 TextView 元件来显示计算结果。于是初版的 BMI 应用程序界面的样子就浮现出来了。

查阅文件

话说回来,我们从哪得知各种可用的界面元件呢?其中一个方法是查阅文件。

Android 文件网站上找到各种可用界面元件列表。http://developer.android.com/guide/tuto ... index.html

例如我们想查看 EditText 的内容,我们可以点进 EditText 连结查看其内容。 http://developer.android.com/reference/ ... tText.html

你会看到一个详细地惊人的网页。

  边举其中常用到的 EditText 界面元件为例。EditText 界面元件的作用就是提供一个文字输入栏位。EditText 继承自另一个叫 TextView 的界面元件,TextView 界面元件的作用是提供文字显示,所以 EditText 界面元件也拥有所有 TextView 界面元件的特性。 此外,文件中你也可以查找到 EditText 栏位的一些特殊属性,如「android:numeric="integer"( 仅允许输入整数数字) 、 「android:phoneNumber="true"( 仅允许输入电话号码) ,或「android:autoLink="all"( 自动将文字转 成超连结) 。 例如要限制 EditText 中只允许输入数字的话,我们可以在 XML 描述档中,透过将 EditText 的参数「android:numeric 」 指定为「true 」,以限制使用者只能在 EditText 文字栏位中输入数字。

离线文件

当你处于没有网路连接的情况下时,也可以找到 Android 文件参考。 在下载了 android-sdk 后,将之解压缩,你可以在「android-sdk/docs 」 目录中 (android_sdk/docs/reference/view-gallery.html) ,找到一份与线上文件相同的文件参考。

开始设计

我们从实例来开始,定义一个基本 BMI 程序所需的身高(Height) 输入栏位,就会用到 EditText ,与 TextView 界面元件,其描述如下:

代码:

2     android:layout_width="fill_parent"

3     android:layout_height="wrap_content"

4     android:text=" 身高 (cm)"

5     />

7     android:layout_width="fill_parent"

8     android:layout_height="wrap_content"

9     android:numeric="integer"

10    android:text=""

11    />

 

可以看到 EditText 界面元件描述的基本的组成与 TextView 界面元件相似,都用到了「android:layout_width 」与「android:layout_height 」属性。另外,指定的另外两个属性 「android:numeric 」、「android:text 」则是 EditText 界面元件的特别属性。「android:text 」属性是继承自 TextView 界面元件的属性。

代码:

android:numeric="integer"

    android:text=""

将「android:numeric 」 指定为 「integer 」,可以限制使用者只能在 EditText 文字栏位中输入整数数字。「android:text 」属性则是指定 EditText 界面元件预设显示的文字( 数字)

我们再来看看 Button ( 按钮) 界面元件

代码:

     

你可能感兴趣的:(我的第一个Android应用BMI-深入浅出Android)