项目情境
“工欲善其事必先利其器”,在开始Android 开发之旅之前,要先搭建开发环境。作为一个Android 应用程序开发人员,掌握Android 开发环境的配置是必须的,只有掌握了最基本的环境配置,才能进行后续的项目开发。在本项目中我们要完成Android 应用程序开发环境搭建,然后完成第一个Android 应用程序。
学习目标
- 能够下载Android 的开发工具包。
- 能够搭建Android 开发环境。
- 能够创建Android 应用程序。
- 掌握Android 应用程序框架。
工作任务
任务1.1 开发环境搭建
任务描述
在进行Android 开发之前,需要搭建相应的开发环境。本任务主要实现Android 开发环境的搭建,包括JDK 的安装与配置、ADT 和AVD 的配置、Android SDK 的配置。
名词解析
Java 开发工具包(Java Development Kit,JDK):是Java 开发所必需的开发包。Android 开发工具(Android Developer Tools,ADT):是集成在Eclipse 上开发调试Android应用程序的工具。
Eclipse:是基于Java 的可扩展开发平台。Android 推荐使用Eclipse 来开发Android 应用,并为它提供了专门的插件ADT。
Android 软件开发工具包(Android Software Development Kit,Android SDK):是Android专属的软件开发工具包。
Android 系统模拟运行设备(Android Virtual Device,AVD):用于在电脑上模拟手机进行Android 应用程序运行的设备。
Java 应用程序接口(Application Programming Interface,API):是Java 开发工具中预先定义的函数,为软件开发人员提供访问某软件或硬件例程代码。
任务目标
① 了解Android 的历史和版本。
② 了解Android 的系统架构。
③ 知道如何下载Android 开发所需的工具包。
④ 能安装并配置JDK。
⑤ 能配置ADT,并能使用ADT 进行Android 应用程序开发。
⑥ 能配置Android SDK,并能进行Android SDK 的升级管理。
⑦ 会配置AVD,并能使用AVD 进行Android 应用程序运行调试。
任务分析
本书所用的Android 开发环境的工具包主要包括JDK、Android SDK、Eclipse 和ADT 等软件包。这些开发工具包都可以通过网络下载,具体实现过程:
① 下载工具包;
② 安装配置JDK;
③ 安装配置ADT;
④ 配置Android SDK;
⑤ 配置并启动AVD。
知识要点
1.Android 的由来
Android 是一种基于Linux 内核的开放源代码的操作系统,主要应用于移动设备,如智能手机和平板电脑,由Google 公司和开放手机联盟领导及开发。在中国较多人将其翻译为“安卓”。2003 年,Andy Rubin 等人创建Android 公司;2005 年Google 公司收购Android 公司后,继续开发运营Android 系统;2008 年Google 公司推出了Android 的最早版本Android 1.0;2009年Google 公司推出了Android 1.5。从这个版本开始,Android 的后续版本均用一个甜品的名称来命名。随着后续发展,越来越多的“甜品”(Android 版本)被Google 公司陆续推出,让我们来认识一下这些“甜品”吧。
下面依次介绍Android 版本。
2009 年4 月发布的 Android 1.5:Cupcake(纸杯蛋糕)。
2009 年9 月 发布的Android 1.6:Donut(甜甜圈)。
2010 年1 月发布的Android 2.1:Éclair(巧克力泡芙)。
2010 年5 月发布的Android 2.2 :Froyo(冷冻酸奶)。
2010 年12 月发布的Android 2.3:Gingerbread(姜饼)。
2011 年2 月发布的Android 3.0/3.1:Honeycomb(峰巢)。
2011 年10 月发布的Android 4.0:Ice Cream Sandwich(冰淇淋三明治)。
2012 年6 月发布的Android 4.1:Jelly Bean(果冻豆)。
2013 年9 月发布的Android 4.4:KitKat(奇巧巧克力)。
2014 年6 月Google 公司发布了最新的Android L,即Android5.0 系统。
各版本的Logo 如图1-1 所示。
2.Android 系统架构
Android 系统架构从软件分层角度来看,可分为应用程序层(Application)、应用框架层(Application Framework)、系统库(Libraies)、Android 运行时(Android Runtime)、Linux 内核层(Linux Kernel)5 个部分。Android 系统架构如图1-2 所示。
(1)应用程序层
应用程序层(Application)包含在Android 设备上运行的所有应用,它们是Android 系统中直接面向用户的部分。Android 平台不仅仅是操作系统,也包含了许多应用程序,如SMS 短信客户端程序、电话拨号程序、图片浏览器、Web 浏览器等应用程序。这些应用程序是用Java 语言编写的,且这些应用程序都是可以被其他应用程序所替换,不同于其他手机操作系统固化在系统内部的系统软件,它们更加灵活和个性化。
(2)应用框架层
应用框架层(Application Framework)是 Android 开发的基础,很多核心应用程序是通过这一层来实现其核心功能的。该层简化了组件的重用,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。
- 活动管理器(Activity Manager):管理各个应用程序生命周期及通常的导航回退功能。
- 窗口管理器(Window Manager):管理所有的窗口程序。
- 内容提供器(Content Provider):使得不同应用程序之间存取或者分享数据。
- 视图系统(View System):构建应用程序的基本组件。
- 通告管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
- 包管理器(Package Manager)Android:系统内的程序管理。
- 电话管理器(Telephony Manager):管理所有的移动设备功能。
- 资源管理器(Resource Manager):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等。
- 位置管理器(Location Manager):提供位置服务。
- XMPP 服务(XMPP Service):提供Google Talk 服务。
(3)系统库
系统库(Libraies)是指一些提供底层功能支持的库(主要由C/C++编写的),是连接应用程序框架层与Linux 内核层的重要纽带。
系统库各个部分的功能如下。
- Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D 绘图与3D 绘图进行显示合成。
- 多媒体库(Media Framework):基于PacketVideoOpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
- SQLite:小型的关系型数据库引擎。
- OpenGL|ES:根据OpenGLES 1.0API 标准实现的3D 绘图函数库。
- FreeType:提供点阵字与向量字的描绘与显示。
- WebKit:网页浏览器的软件引擎。
- SGL:底层的2D 图形渲染引擎。
- SSL:在Andorid 上通信过程中实现握手。
- Libc:从BSD 继承来的标准C 系统函数库,专门为基于embedded linux 的设备定制。
(4)Android 运行时
Android 运行时(Android Runtime)的应用程序是采用Java 语言编写,但它并不使用J2ME来执行程序,而是在Android 自带的Android 运行时中执行。Android 运行时分为Java 核心库和Dalvik 虚拟机两部分。
Java 核心库:Java 核心库提供了Java 应用程序接口(Application Programming Interface, API)中的大多数功能,同时也包含了Android 的一些核心API,如android.os、android.net、android.media 等。
Dalvik 虚拟机:Android 程序不同于J2ME 程序,每个Android 应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android 程序都有一个Dalivik 虚拟机的实例,并在该实例中执行。Dalvik 虚拟机是一种基于寄存器(register_based)的虚拟机,不是传统的基于栈(stack-based)的虚拟机,进行了内存资源使用优化及支持多个虚拟机的特点。需要注意的是:不同于J2ME,Android 程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dx 将Java 字节码转成dex 格式的中间码。
(5)Linux 内核层
Linux 内核层(Linux Kernel)主要指Android 寄宿的Linux 操作系统及相关驱动。通常来说,只有硬件厂商和从事Android 移植的开发者,才会基于此来进行开发。Android 是基于Linux2.6 内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux 内核。
任务实现
1.下载工具包
Android 开发环境搭建之前需要在网上下载以下开发工具包,做好环境配置的准备工作。
(1)JDK 工具包的下载
在进行Android 开发之前,需要下载安装Java 的开发环境,因为Android SDK 的应用层是Java 语言,所以需要Java 开发环境。有过Java 开发经验的读者,对JDK 的配置应该并不陌生。本书使用的JDK 是32 位的JDK6。JDK 下载地址是http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe
(2)下载ADT 集成开发工具
http://wear.techbrood.com/sdk/index.html 为Android 在国内的镜像网址。最新的Android开发工具和都会在该网址发布,也是Android 学习者必须了解的网站。目前该网站提供了一个集成各种必备插件的ADT Bundle 下载,包括Eclipse、Android SDK 和ADT 等系列软件包。打开http://wear.techbrood.com/sdk/index.html,如图1-3 所示,可下载Android 开发工具。
2.安装配置JDK
JDK 开发工具包是Java 和Android 应用程序开发的必备工具。从网上下载JDK 工具包之后进行安装,其安装步骤较简单,基本按照默认设置即可。现有的Java 开发书籍中对JDK 的安装都有介绍,此处不再赘述。安装好JDK 后,需要进行JDK 环境变量配置。右键单击“我的电脑”→“属性”→“高级”→“环境变量”→“系统变量”。系统变量设置需要设置3 个环境变量,其中JAVA_HOME的内容为JDK 的安装路径,ClassPath 指向Java 的类,Path 指向Java 的编译、运行等命令工具。
具体配置如下,等号左侧的是环境变量名,等号右侧的是环境变量值。
- JAVA_HOME= C:\Program Files\Java\jdk1.7.0_09
- ClassPath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
- Path=%JAVA_HOME%\bin;
注意:其中点“.”和分号“;”不能缺少,而且必须是英文。
3.安装配置Eclipse 和ADT
在Android 的早期开发中,需要配置Eclipse、Android SDK 和ADT。但是现在已经方便很多,可以直接从Android 的官网下载开发包。该开发包已经将Android 开发工具集成在一个压缩包中,名为Android adt-bundle-windows-x86。压缩包中包含Eclipse+ADT、Android SDK、AVD 和Android 系统平台。安装配置Eclipse 和ADT 步骤如下。
① 解压网上下载的“adt-bundle-windows-x86”压缩包。其中包含已经配置ADT 的eclipse3.8 工具包和Android SDK 文件夹。解压后文件结构如图1-4 所示。本书使用的是Android4.2 版本。可以利用SDK 文件夹下的SDK Manage 下载需要的Android 版本。
② 启动ADT,因为ADT 已经集成在Eclipse 中,所以启动ADT 的步骤如下。
a.打开eclipse 文件夹,如图1-5 所示,鼠标左键双击eclipse.程序。
b.设置工作空间(workspace)如图1-6 所示。进入ADT 后的界面如图1-7 所示,进入该界面之后就可以进行Android 应用程序开发了。具体开发过程将在下一个任务中介绍。
4.配置Android SDK
Android SDK 是用于支持Android 开发的软件工具包,adt-bundle-windows-x86 中已经包含Android 4.2 的SDK。一般系统会自动获取Android SDK 的路径,如果系统未自动获取则需手动配置。为了便于后续的开发工作,这里将讲述如何配置Android SDK 的路径及如何升级Android SDK。
(1)配置Android SDK 路径
如果ADT 中没有自动配置Android SDK 路径,则需要手动配置Android SDK 路径。其步骤为,打开“ADT”→“选择Windows”→选择“Preferences”选项,如图1-8 所示。在弹出的图1-9 所示界面中选中“Android”属性,并在SDK Location 输入框中选择之前解压缩的Android SDK 目录→单击Apply 按钮,再单击OK 按钮。
提示:SDK Location 为解压adt-bundle-windows-x86 压缩包后adt-bundle-windows-x86 中Android SDK 文件夹的路径。
(2)升级Android SDK
单击ADT 集成开发环境主页面的“Android SDK Manager”项 ,如果网络连接正常可用的话,“Android SDK Manager”窗体中将列出当前已经安装的Android SDK 软件和其他可用版本的Android SDK 列表,如图1-10 所示。选择要安装的选项,单击“Install3packages”,弹出图1-11 所示界面,选择“Accept All”。此时就会通过网络从Google 服务器下载这些软件包。视所选软件包的多少和网速快慢,下载时间可能耗费数小时之久,数据量为2~5GB。
5.配置启动AVD
Android 开发需要配置AVD 以运行Android 应用程序。AVD 的配置步骤如下。
① 在打开的ADT 中选择按钮,弹出界面如图1-12 所示,单击New 按钮开始对AVD进行配置,如图 1-13 所示,其配置参数如下。
- AVDName:按照规范命名,此处命名为android4.2。
- Target:Android 4.2– API Level17。
② AVD 设置完成之后,启动AVD,启动步骤如下。
在Eclipse 中选择Android Virtual Device Manager 按钮,弹出界面如图1-12 所示,选择Android 4.2 项,单击Start 按钮,弹出虚拟设备的启动界面,如图1-14 所示,表示AVD 启动完成。
任务1.2 第一个Android 应用程序开发
任务描述
创建Android 应用程序,界面上显示“明天天气,晴,温度2~15”,并显示对应图片。其效果如图1-15 所示。
任务目标
① 掌握资源的定义和使用方法。
② 理解Android 应用程序的框架。
③ 掌握AndroidManifest 的配置。
任务分析
该任务功能首先要在想到模式下创建一个Android 应用程序,然后按照功能要求在应用
程序中使用字符串与图片资源,具体实现过程如下。
① 在向导模式下创建Android 应用程序。
② 在代码中定义并使用图片和字符串资源。
③ 配置AndroidManifest.xml 文件。
知识要点
1.Android 应用程序结构 Android 应用程序的组成结构如图1-16 所示,在开发应用程序时经常要用到的内容有src目录下的Java 文件、res 目录下的资源文件和AndroidManifest.xml 文件中的配置信息。
下面详细介绍每个目录中的内容。
src 目录下存放的是Android 工程的Java 文件,在此编写Java 代码以实现程序要求的功能。 gen 目录下存放的文件是在编译Android 程序时系统自动生成。在编写程序时不要更改该目录下的文件。bin 目录下是存放Android 应用程序通过编译之后生成的文件,如Android 安装包(Android Package,简称为apk)就是在此目录之下。libs 目录下是存放支持Android 应用程序开发的程序包,比如要进行JSON 数据解析时需要引入支持JSON 开发的程序包,引入工具包之后则存放于该目录之下。res 目录下存放的是Android 工程的资源文件,包括图片资源、布局资源、字符串资源、菜单资源等。在Android 应用程序设计过程中,我们经常要用到一些资源文件,如用图片设AndroidManifest.xml定义了应用的基本信息res目录下存放的是Android工程下的资源文件src目录下存放Android工程的Java文件置界面、用音频设置铃声、用动画显示特效、用字符来提示信息,那么这些图片、音频、动画、字符串就叫做Android 应用程序中的资源文件。其中drawable 中是图片资源,layout 中是布局资源,menu 中是菜单资源、values 中是字符串、尺寸、样式等资源。assets 也是用于存放Android 工程的资源文件,一般用于保存原生的文件。例如,一个MP3文件,Android 程序不能直接访问,必须通过AseetManager 类以二进制流的形式来读取。AndroidManifest.xml 文件定义了Android 应用程序的配置信息。
2.AndroidManifest 配置文件
AndroidManifest.xml 位于整个项目的根目录,是Android 应用程序必备的配置文件,用于定义应用程序中组件信息。这个文件描述了Android 应用程序中的组件,如activities、services、provider 等。一般情况下Android 应用程序是由Activity 活动、BroadcastReciver 广播接收器、Service 服务、Content Provider 内容提供器4 种组件构造而成的,这四类组件必须在AndroidManifest.xml 文件中声明注册。此外,Android 应用程序在必要时还需指定permissions和instrumentation(安全控制和测试),所以也需要将permissions 和instrumentation 在AndroidManifest.xml 文件中声明注册。AndroidManifest.xml 配置文件采用XML 作为描述语言,每个XML 标签都不同的含义,大部分的配置参数都放在标签的属性中。下面是一个标准的AndroidManifest.xml 文件样例。
下面详细介绍本任务涉及的结点内容。
是AndroidManifest.xml 的根元素,必须包含一个元素并且指定xlmns:android 和package 属性。xlmns:android 指定了Android 的命名空间,默认情况下是http://schemas.android.com/apk/res/android。Package 是标准的应用包名,以任务中的包名为例,即为“com.example.helloandroid”。此外,sharedUserId 表明数据权限、sharedUserLabel 一个共享的用户名、versionCode 是给设备程序识别版本、versionName 版本显示名称、installLocation安装参数。
标签语法范例如下。
< uses-sdk>用于指定Android 应用中所需要使用的SDK 的版本,比如该应用程序必须运行于Android 2.1 以上版本的系统SDK 之上,那么就需要指定应用支持最小的SDK 版本数为7。每个SDK 版本都会有指定的整数值与之对应,比如我们最常用的Android 2.2.x 的版本数是8。除了可以指定最低版本之外,标签还可以指定最高版本和目标版本,语法范例如下。
< application>元素是的子元素,一个AndroidManifest.xml 中必须含有一个< application>标签。这个标签声明了每一个应用程序的组件及其属性(如icon、label、permission等)。Android 应用程序的四大组件< activity>、< service> 、< provider> 、< receiver> 都在此元素内声明。< activity>元素是< application>的子元素,< activity>元素用于定义Acitivity 信息,应用程序中的Acitivity 必须在此注册声明后才能使用。
< intent-filter>是< activity>的子元素,该元素包括action 与category 两个子元素。action元素用于定义了一系列常用的动作,其属性name 值为android.intent.action.MAIN,表明此activity 是作为应用程序的入口。category 元素用于指定当前动作(action)被执行的环境,其name 属性的常见值为android.intent.category.LAUNCHER,该值决定应用程序是否显示在程序列表里。
此外,在AndroidManifest.xml 样例中的< service> 、< provider> 、< receiver>等元素会在后续的任务中用到,在此不再详细介绍。
3.资源文件的定义与使用
Android SDK 中提供了大量的系统资源,如图1-17 所示,包括布局文件、字符串资源等,都存在于Android SDK 的data\res 目录下。
资源是Android 应用的重要组成部分,资源主要包括字符串资源、绘画资源、颜色资源、布局资源、尺寸资源等。资源都存放在应用的res 目录下,大多数资源都将在R 类中对应一个内部类,定义了其ID 值。资源的使用一般都有两种方式,即Java 代码中通过R.资源类型.ID形式使用,XML 文件中通过@资源类型/ID 形式使用。
(1)字符串资源
字符串资源必须放在res/values 目录下的xml 文件中,如图1-18 所示。使用< string name="">…< /string>定义,name 指字符串资源的key 值。
字符串资源的使用:字符串资源中的key 值是R.string 类中定义的int 型的ID 值。
在Java 代码中使用:R.string.ID 值text.setText(R.string. weather);
在XML 中使用:@string/ID 值:@string/ weather
(2)数组资源
在res/values 下创建表示数组资源的XML 文件,可以包括字符串数组和整型数组两种,分别使用和标签设置。
数组资源的使用:在Activity 类中使用getResources.getStringArray 获得String 型数组资源。
在Activity 类中使用getResources.getIntArray 方法获得Int 型数组资源。
(3)颜色资源
在XML 文件中使用< color name="">颜色RGB 值< /color>方式保存颜色值,XML 文件按照规范命名,存放在res\values 目录下。
颜色资源的使用:< color name="">中的name 是R.color 类中的ID 值在Java 代码中使用颜色资源——R.color.ID 值。
在XML 中使用颜色资源:@color/ID 值。
(4)尺寸资源
可以在res\values 下的XML 文件中使用浮点数值定义尺寸资源。dimen 的值是一系列的浮点数,后面是尺寸单位,常用的单位有:px、in、mm、pt、dp、sp。
尺寸资源的使用:在Java 代码中使用dimen:R.dimen.ID 值,在XML 中使用dimen:@dimen/ID 值。
(5)样式资源
如果多个组件都需要设置同样的风格,可以在res\values 下使用XML 文件存储样式资源,样式使用< style name="">标签指定。
Android 组件可以通过style 属性指定需要使用的样式资源。
(6)类型资源
如果多个组件都需要设置同样的风格,可以在res\values 下使用XML 文件存储类型资源,类型使用< style name="">标签指定。
类型资源的使用:Android 组件可以通过style 属性指定需要使用的类型资源。
(7)绘画资源及其使用
Android 应用中会用到很多图像,图像可以放在res\drawable 下,图片的名称即ID 值,在Java 代码中获得Drawable 对象。
在XML 文件中使用Drawable 对象。
(8)布局资源及其使用
Android 应用程序有两种生成组件的方式,即Java 代码和XML 文件,所有的XML 布局文件都存放在res/layout 下,可以使用R.layout.ID 值引用布局资源。
(9)ASSETS 资源及其使用
ASSETS 资源在与res 目录平级的assets 目录下,ASSETS 资源不会生成资源ID,直接使用资源名读取资源文件。
总之,配置Android 应用的开发环境,主要包括Java SDK、Eclipse、 Android SDK、ADT插件。几个主要部分运行Android 应用前,需要配置并启动AVD 设备模拟器。一个Android应用主要包括Java 源文件(src 目录下)、资源文件(res 目录下)以及配置信息文件AndroidManifest.xml。
任务实现
1.在向导模式下创建Android 应用程序
在图1-7 所示的Android 开发界面中,选择“File”→“New” →“Android ApplicationProject”,弹出图1-19 所示界面。输入应用程序名称HelloAndroid。在Mimimum Required SDK设置SDK 最小需求版本API 8:Android2.2(Frogo),在设置目标Target SDK 为API17:Android4.2(Jelly Bean),编译的版本Compile With SDK 为API17:Android 4.2(Jelly Bean),主题Theme:Holoc light with Dark Action Bar。向导模式的操作步骤按照默认步骤依次进行。其执行过程如图1-20~图1-23 所示。
按照向导模式的步骤依次执行,直到单击“Finish”按钮,Android 应用程序基本创建完成。为了实现任务的功能需求要对代码进行相应的设置,下面详细介绍代码设置。
2.在代码中定义并使用图片和字符串资源
将“明天天气,晴,温度2~15”以weather 为名设置在strings.xml 资源文件夹当中,并在Java 代码中通过R.string.weather 访问。
(1)字符串资源定义与引用
在res\values\strings 中添加字符串:
字符串资源引用方法有两种,下面介绍两种引用方式。
- 方法一:在layout 文件夹下的activity_main.xml 文件中引用。
- 方法二:在src 文件夹中MainActivity.java 文件中设置如下代码。
(2)图片资源的定义与使用
将m1.png 和bit.png 复制到res/drawable-hdpi 文件夹当中,如图1-24 所示。当图片文件复制到该文件夹下,应用程序gen 目录下的R 文件中的drawable 类会自动生成一个名字与图片名相同的整型常量,其他文件可以通过该整型常量访问图片资源。
利用两种方法实现图片设置,将这两张图片分别在XML 文件和Java 文件中引用,XML为可扩展标记语言(Extensible Markup Language,XML)。
- 方法一:使用在XML 文件引用的方式。
将layout 文件夹中的activity_main.xml 文件中的代码设置如下。
ImageView 控件是一种用于图片显示的控件。
- 方法二:使用在Java 文件引用的方式。
先在activity_main.xml 中定义ImageView 控件,然后在Java 代码中通过获取R.id 的方式获取该ImageView,并在Java 代码中定义图片获取图片,将图片加入到ImageView 当中。其主要代码如下所示。
(3)在MainActivity 中编写代码实现图片加载
在MainActivity 类中创建 ImageView 对象。
在onCreate()方法定义如下内容,实现图片显示。
3.配置AndroidManifest.xml 文件
Android 的配置文件AndroidManifest.xml 内容如下。
技能训练
设计程序实现图1-25 所示效果,要求:通过样式资源的使用,完成文字的颜色、大小的设置;第一个文本字符串内容通过在XML 的方式引用资源,第二个文本内容通过在Java 代码中调用string 资源。