项目一 建立Android开发环境

近年来,移动通信技术得到了高速发展,智能手机已逐步普及。随着手机功能的增强,手机程序的种类也越来越多,市场上将手机程序一般分为应用程序和游戏两大类。应用程序有电子书、系统工具、实用软件、多媒体软件、通信辅助软件、网络软件等;游戏类有角色扮演、动作格斗、体育竞技、射击飞行、冒险模拟、棋牌益智等。
Apple公司iPhone和Google公司Android以及中国移动、Nokia、Samsung等IT界的巨头先后推出手机应用商店,允许企业或程序员将自己开发的手机软件在应用商店出售,用户购买应用程序所支付的费用由应用商店提供者与开发者按照一定的比例进行分成,为软件开发者与用户提供了一个良好的交流平台,使得第三方软件提供者参与手机程序开发的积极性空前高涨。
Android是主要的手机应用程序开发平台之一。本项目将学习如何利用开源免费软件构建Android开发环境,目标是使初学者了解移动应用程序发展情况、不同移动开发技术的主要特点以及Android技术的优势,掌握JDK、SDK、Eclipse,以及ADT的安装、配置和使用方法,能够使用Eclipse创建和运行简单的Android程序。

1.1 背景知识

一、移动应用开发技术

2014年底,我国手机用户数已经达到了12.86亿户,移动电话用户普及率达94.5部/百人。手机市场的繁荣促使手机的功能越来越强大,并不断朝着智能化方向发展。近年来中国的智能手机用户增长很快,中国智能手机用户在2014年首次超过5亿人,由此也引发了对手机应用程序和游戏程序的庞大需求。外部应用程序的丰富程度和易用性,已成为消费者购买某款智能手机的决定因素之一。
中国移动、中国联通、中国电信三家运营商都具有移动网络通信运营资质,现有网络分为2G、3G和带宽更高的4G网络。4G是第四代移动电话行动通信标准的简称,该技术集3G与WLAN于一体,并能够快速传输数据、高质量的音频、视频和图像等。4G理论上能够以100Mbps以上的速度下载,比4兆的家用宽带ADSL快25倍,并能够满足几乎所有用户对于无线服务的要求。除了支持传统的通信业务之外,4G的无线高速业务也将会在移动终端上产生新的应用,如流媒体点播应用,与物联网、云计算和大数据的综合应用等。
移动应用程序的硬件平台主要是小型嵌入式设备,这些设备具有便携性,但在性能和功能上较PC要差,而且缺乏统一的标准,功能、外观和操作方式差别较大。开发移动应用程序的平台主要有J2ME、Symbian、Windows Mobile、iOS和Android,这些技术各有千秋。J2ME、Symbian和Windows Mobile是比较传统的开发技术,已经发展多年,而iOS、Android、Windows Phone则是近年来兴起的热门技术。目前,在这些平台上开发的应用程序数量一直在稳定增长,已经有超过百万个手机应用程序在应用商店出售。下面对这些技术做简要介绍。
Android是Google公司于2007年11月发布的基于Linux平台的开源手机操作系统。Android基于Linux技术,由操作系统、中间件、用户界面和应用软件组成。Android产品线较为丰富,覆盖商务、时尚、娱乐、中低端市场等各种人群。Android不仅对第三方软件完全开放,可免费提供给开发人员,使之可以对源代码进行修改,而且集成了大量的Google应用程序,例如Google地图、Gmail邮箱等,大大增强了Android手机的功能。Android主要支持的开发语言为Java和C/C++。
J2ME是Java 2Micro Edition的缩写,于1999年6月在JavaOne开发者大会上亮相。J2ME是为机顶盒、移动电话和PDA等嵌入式消费电子设备提供的Java语言平台,包括虚拟机KVM和一系列标准化的Java API。J2ME和标准版的J2SE、企业版的J2EE一起构成Java技术的三大版本。J2ME程序的执行方式是字节码解释,性能上会受到一定程度的影响。目前国内该技术已经接近淘汰。
Symbian公司成立于1998年6月,是由Ericsson、Motorola、Nokia等公司共同持股组成的合资公司。2008年6月Symbian公司被Nokia全资收购,成为其旗下公司。Symbian曾经是手机领域中应用范围最广的操作系统之一,提供多个不同版本的人机界面。Symbian主要支持的开发语言为C++、Java和C。目前国内该技术已经接近淘汰。
Windows Mobile是由微软公司在2003年6月发布的,从7.0版本后更名为Windows Phone。在此之前微软的智能终端设备操作系统主要分为Pocket PC和Smartphone两类。原形为Windows CE,是Microsoft用于Pocket PC和Smartphone的软件平台。Windows Mobile的优势在于将熟悉的Windows桌面扩展到移动设备中,界面设计、功能应用与PC类似,内置有Microsoft Office、Media Player等软件。Windows Mobile主要支持的开发语言为C#、C++和VB。现在微软公司力推的是Windows Phone平台。
iPhone是Apple公司在2007年1月举行的Macworld上宣布推出的,2007年6月在美国上市。iPhone使用了众多增强用户体验的领先技术,例如,多触点式触摸屏技术允许用户同时通过多个触点进行操作;基于传感器的隐式输入技术提高了手机的智能水平;全新的用户界面设计技术提高了手机的易用性;手机应用商店提供了源源不断的实用程序。iPhone将原本普通的手机电话变成了一个集潮流时尚于一体且功能强大的随身工具,引起了手机设计领域的一次新变革。iPhone的操作系统为iOS,其主要支持的开发语言为Objective-C、C、C++、JavaScript。
相比传统的软件发布,手机应用商店为程序开发者提供了更广阔的平台,程序开发者可将手机应用程序发布到网站上,分享自己的作品,并通过下载来和服务商按比例进行收益分配。图1-1、图1-2、图1-3分别为三家著名的手机应用商店,感兴趣的读者可登录网站浏览或者下载各种类型的手机移动应用程序,从中获取软件设计的灵感。

图像说明文字

二、典型移动应用案例

手机的优势在于其不但具有通信、多媒体、支持应用程序等功能,而且还易于携带且便于使用。移动应用主要分为企业应用和个人应用,讲究的都是实用性。进行移动应用开发需要遵循手机的特点,例如屏幕大小、存储空间、供电能力等。下面以移动办公、个人应用和手机游戏等典型应用为例进行介绍。
1.移动办公
移动办公是指办公人员可以随时随地处理与业务有关的事情。要达到这个目标,可通过开发手机上的移动办公软件,实现与企业软件系统或者互联网的连接,获取办公所需的信息,并进行及时处理。移动办公的应用领域非常广泛,主要有:流程审批、行政执法、物流派送、信息查询等。国内许多行业都可以利用移动办公来进一步提高工作效率,例如,商务人士在出差的路途中可以及时地处理单位事务,获得市场信息;工商人员巡查市场时,可通过移动办公系统对商品进行现场监管查询,有效防止假冒伪劣食品的流通等。
移动办公需要将手机、无线网络和企业系统三者有机结合。实现移动办公系统一般需要重点解决两个问题:一是实现客户端软件与企业服务器的无线连接、数据传输等;二是客户端的界面要友好,使用简易,符合手机的操作特点。图1-4所示为Android移动办公系统界面效果示例。

图像说明文字

2.个人应用
手机出厂自带的软件类型一般较少,往往难以满足用户的个性化需求。个人移动应用系统的主要任务是针对手机自带软件功能不足的问题,开发设计出新的功能,为日常生活中的“衣、食、住、行”提供便利,体现出手机智能化助手的优势。例如,对各种类型的来电进行管理控制,对餐馆、景点、购物场所进行查询、定位。
个人应用中另一类比较重要的应用是移动学习(M-learning)软件。移动学习是通过移动通信、计算机、信息教育等多种技术实现在任何时间、任何地点开展学习的一种新型教育模式。移动学习的主要特征有三个:①自由性大,学习的时间和地点不固定,学习者能够自主安排学习计划;②主动性高,学习通常发生在零散时间或者特定情景下,学习者往往是出于提高稿自身能力或者解决问题的需要而进行学习,这种积极的学习动机更容易产生良好的学习效果;③便捷性强,学习的技术手段更为先进,学习者能够利用移动设备通过无线网络灵活快捷地获取知识。移动学习软件使人们在学习方式上摆脱时间和空间的约束,大大改变了传统的以固定教室为主的教学模式,使知识的传播更为及时和方便,因此可作为课堂教学之外的一种良好补充。如图1-5所示为金山词霸Android版手机界面。

图像说明文字

3.手机游戏
近几年随着手机的普及,特别是3G、4G网络的完善和智能手机性能的提高,手机游戏逐渐受到了业界的重视,成为移动增值业务的重点发展方向。早期的游戏主要是由手机厂商作为手机附属品提供的,例如“俄罗斯方块”、“贪吃蛇”等,而且这些游戏的画面较为粗糙,规则也很简单。随着手机硬件的提升以及众多开发人员的加入,目前的手机游戏在界面和可玩性上取得了长足的发展,具有较好的娱乐性和交互性。手机游戏的优势是可以在坐车、等人的空闲时间为手机用户提供娱乐休闲。手机游戏按内容属性来分,可以分为角色扮演游戏、动作游戏、策略游戏、格斗游戏等不同类型。
手机游戏的实现方式,可以有单机游戏、网络游戏、蓝牙游戏、模拟器游戏等。很多游戏的创意来自于PC。如图1-6所示为一款3D场景的捕鱼达人游戏界面。

图像说明文字

三、Android的发展历史

Android操作系统是由Google和开放手机联盟共同开发并发展的移动设备操作系统,其最早的版本开始于2007年11月的Android 1.0 beta,并且已经更新发布了多个Android操作系统版本。伴随着性能、接口的极大改进和功能的丰富,Android系统的运行变得越来越快、越来越省电,功能越来越丰富,嵌入的Google服务也越来越多。从2009年4月开始,Android操作系统改用甜点来作为版本代号,并按照大写字母的顺序进行命名(见表1-1)。在Android程序开发中,建议选择Android 2.1以上版本。

图像说明文字

1.2 安装Sun JDK

一、任务分析

本次任务要求完成JDK的下载、安装和配置。要完成本次任务,需要思考如下几个问题。 (1)JDK是什么软件,对于本项目有何作用? (2)从何处获得正确的JDK软件? (3)JDK对计算机硬件和操作系统有何要求? (4)如何安装JDK? (5)如何配置JDK?

二、相关知识

通常而言,进行软件开发并不是从一张白纸开始,往往会利用一些已有的工具。JDK(Java Development Kit)就是为Java开发者提供的一组开发工具包,包括了Java运行环境(JRE,Java Runtime Environment)、Java工具和Java标准API类库。JDK是进行Java程序开发的基础。主流的JDK由Sun公司(2009年已经被著名的数据库公司Oracle收购)所开发。一些公司和组织也先后推出自己的JDK,例如IBM JDK、GNU JDK。JDK一般有三种版本,此外,还有适用于Windows、Linux、Solaris等不同操作系统的版本。
Java运行环境包含一个Java虚拟机(JVM,Java Virtual Machine)和运行Java程序所需的类库。其中Java虚拟机的主要作用是解释字节码(bytecode),实现Java程序的跨平台运行。JRE一般包含在JDK中,也可以独立安装。
常用的Java工具有Javac、Java、JAR、Javap和AppletViewer。其中,Javac是编译器,用于将Java源程序(后缀名为.java)转换成字节码文件(后缀名为.class)。Java是解释器,解释、加载、运行由Javac编译得到的字节码文件。JAR是打包工具,用于将相关的类文件或者资源文件压缩打包成一个JAR文件,以便于应用程序的发布。Javap是反编译器,用于显示字节码文件的含义。AppletViewer不需要Web浏览器就可以调试运行Applet小程序。
Java标准API类库(Application Programming Interface)又称应用程序编程接口,通过提供一些预先定义的函数,达到简化开发人员工作的目的。开发人员无需访问源码或理解内部工作机制的细节,通过调用API即可实现程序的特定功能。编程语言或二次开发的软硬件环境一般会提供相应的API。同样,开发Java程序是在Java标准API类库的基础上进行的。JDK提供了4个包:dt.jar是关于运行环境的类库,主要是Swing包;tools.jar是用Java所编写的开发工具的类库,例如javac.exe、jar.exe等;rt.jar包含了JDK的基础类库,也就是在Java文档帮助中看到的所有类的Class文件;htmlconverter.jar包含了命令转换工具,可将

三、任务实施

1.下载Sun JDK
下载软件一般有两种方法:一种是通过搜索引擎进行搜索,另一种是到开发软件的公司网站进行下载。第一种方法的优点是比较简单,缺点是下载的软件质量没有保证,例如软件不能正常使用、有病毒、版本较旧等。第二种方法的优点是能够保证下载软件的质量,但很多公司是英文网站,会对下载造成一定的困难。下面介绍采用第二种方法——从Oralce公司网站下载Sun JDK软件。一些初学的开发者往往会觉得到英文网站下载软件很困难,不知道从哪里找到所需要的软件。事实上,网站的下载资源一般都会放在首页的Downloads链接上。所以要下载JDK软件最好的方法是,先进入Downloads界面。
(1)登录Oracle公司的网站:http://www.oracle.com,如图1-7所示。如果不知道Oracle公司的网站,可通过百度搜索引擎搜索获取。主页上有两个地方和软件下载有关:Downloads和Top Downloads,其中前者罗列了所有可以下载的资源,后者罗列了网站下载量最多的几种资源。

图像说明文字

(2)将鼠标光标放到“Downloads”按钮上,在显示出的菜单中的“Popular Dounload”下单击“Java for Developers”超级链接,进入到Sun开发者网络页面,如图1-8所示。该页面罗列了Sun提供的各种类型的Java开发工具,例如NetBeans、JavaFx等,并提供下载服务。

图像说明文字

(3)单击“JDK”超级链接,进入JDK下载选择页面,如图1-9所示。在该页面可以选择Windows、Windows x64、Solaris x64、Solaris x86、Linux、Linux x64等多个不同操作系统的版本。本书项目的开发主要是在Windows环境下,所以选择适合于Windows平台的JDK版本。

图像说明文字

(4)单击【Download】按钮,弹出下载登录页面,如图1-10所示。在该页面中可以有3种操作:一种是如果以前已经注册,可以输入个人账户和密码登录;第二种是通过新创建一个账号进行登录;最后一种是跳过登录步骤。
(5)选择跳过登录步骤,进入JDK文件下载页面,如图1-11所示。该页面列出了所下载的JDK文件名和大小,直接单击文件名,即可将文件下载到本地计算机指定的文件夹中。注意,由于JDK的版本更新较快,用户下载的文件名可能和本书不一样,一般情况下不会影响开发环境的建立。

图像说明文字

2.安装JDK软件
JDK的安装很简单,直接双击所下载的JDK文件,即可进行安装。下面是主要的安装步骤。
(1)双击上一节下载的JDK文件【jdk-6u21-windows-i586.exe】,进入安装界面,如图1-12所示。
(2)单击【下一步】按钮,进入自定义安装界面,如图1-13所示。在本界面上可以选择要安装的功能,还可以指定安装的目录。
(3)按照默认配置,单击【下一步】按钮,即进入安装状态,安装过程界面如图1-14所示。
(4)安装过程中,弹出JRE的安装目录设置界面,如图1-15所示,可按照默认路径进行安装。

图像说明文字

(5)单击【完成】按钮,完成JDK的安装,界面如图1-16所示。

图像说明文字

3.配置环境变量
JDK安装成功后,还需要在Windows系统中对其进行配置,方可正常使用。主要需要配置两个环境变量:Path和CLASSPATH。PATH用于指定JDK命令的所在路径;CLASSPATH用于指定JDK类库的所在路径。
(1)鼠标右键单击桌面上【我的电脑】图标,选择【属性】命令,可打开系统属性配置界面,如图1-17所示,选择【高级】选项卡。
(2)单击【环境变量】按钮,进入环境变量配置界面如图1-18所示。本界面已经列出一些定义好的环境变量。在配置界面中有用户变量和系统变量两种,其中用户变量所配置的环境变量适用于某个用户,例如本例中的Administrator;系统变量所配置的环境变量适用于本机上的所有用户。

图像说明文字

(3)单击【Administrator的用户变量部分】列表下的【新建】按钮,进入新建用户变量界面,如图1-19所示。 (4)输入变量名为PATH,变量值为C:\Program Files\Java\jdk1.6.0_21\bin的用户变量,如图1-20所示。


说明
PATH环境变量的取值和JDK的安装目录有关,需要先查找到安装的JDK的所在目录,然后再获得JDK的bin目录的完整路径。


(5)单击【确定】按钮,采用第(3)步的操作,输入变量名为CLASSPATH,变量值为;C:\Program Files\Java\jdk1.6.0_ 21\lib的用户变量,如图1-21所示。

图像说明文字


说明
CLASSPATH变量值中的“.”表示当前目录,用“;”和JDK的库目录隔开,和第(4)步类似,注意变量值的位置同样和JDK的安装目录有关。


(6)新建用户变量完成后,可看到在【Administrator的用户变量】列表中增加了两个新的变量,分别为CLASSPATH和PATH,如图1-22所示。单击【确定】按钮,完成JDK的配置。

图像说明文字

4.检验安装配置
查看JDK是否安装配置成功,可在DOS环境下进行测试。
(1)进入DOS环境,选择Windows的【开始】【运行】命令,在打开的对话框中输入cmd,单击【确定】按钮,如图1-23所示。
(2)在DOS界面中,输入java -version、javac命令,如果提示找不到命令,就说明JDK的环境变量没有正确设置。图1-24所示为使用java–version命令测试环境变量,系统所返回的JDK版本信息。

图像说明文字

1.3 安装Android SDK

一、任务分析

由于Android SDK自身并没有附带Java的运行环境JDK,在安装过程中,程序会自动检测当前系统已有的Java虚拟机,所以在Android SDK安装之前需要先安装JDK。JDK的安装已经在1.2节完成。本次任务要求完成Android SDK的下载、安装和配置。要完成本次任务,需要思考如下几个问题。
(1)Android SDK是什么软件,与JDK软件有何关系,对于本项目有何作用?
(2)从何处获得正确的Android SDK软件?
(3)Android SDK对计算机的硬件和操作系统有何要求?
(4)如何安装Android SDK?

二、相关知识

SDK(Software Development Kit)软件开发工具包,是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件开发工具的集合。
Android SDK则是指Android专属的软件开发工具包。Android SDK采用的是Java语言,因此需要先安装JDK 5.0及以上版本。

三、任务实施

1.下载Android SDK
需要注意的是,下载方法有可能因为Android网站的变动而不一致。这时,可以利用网站提供的搜索功能,搜索关键字sdk download。
(1)登录Android官方网站http://developer.android.com。页面效果如图1-25所示。

图像说明文字

(2)单击【Get the SDK】链接,出现Android SDK下载页面,如图1-26所示。该页面提供下载开发Android应用程序的各种软件和工具,其中Android Studio为Google官方推荐使用的集成开发环境。

图像说明文字

2.安装Android SDK
Google为开发者提供了捆绑好的Android SDK的安装软件,安装较为简单,但有一点需要注意,由于Android SDK自身并没有附带Java的运行环境JDK,所以在安装Android SDK之前需要先安装相应的JDK软件。由于Eclipse+ADT插件使用方式为广大Java程序员所接受,本教材将以该开发环境来进行讲解。
(1)对教材附带的Android SDK安装压缩文件进行解压,打开文件夹,可以看到有eclipse和sdk两个文件夹和1个可执行文件SDK Manager,如图1-28所示。

图像说明文字

(2)SDK Manager的作用是管理Android的SDK包。在管理界面上列出了各种Android版本的API包,开发者根据需要选择下载或者删除,如图1-29所示。如果是选择安装新的SDK包,需要连接网络,操作时间可能较长。注意:本步骤不是必须的,在前面步骤下载的Android SDK软件中,Google已经为开发者提供了一个版本的API开发包,可以打开图1-28中的sdk文件夹来查看。注意:在SDK更新过程中,请勿中途退出,否则可能会导致整个Android开发环境无法正常使用。

图像说明文字

(3)打开eclipse文件夹,单击eclipse.exe可执行文件,可打开Eclipse开发工具(见图1-30)。第一次打开Eclipse程序若出现升级提示(见图1-31),则打开Android SDK管理界面,单击Install按钮进行升级。

图像说明文字

(4)配置Android模拟器。选择Eclipse菜单【Window】→【Android Virtual Device Manager】进入模拟器管理界面,如图1-32所示。其中AVD(Android Virtual Device)表示Android的虚拟设备,例如Android手机模拟器,可用在电脑上运行测试Android程序。AVD Manager是专门用于管理Android手机模拟器的软件。

图像说明文字

(5)单击【New…】按钮,进入Android手机模拟器配置界面,如图1-33所示,选择Android 4.0.3 SDK配置虚拟机。注意:该步骤根据自己开发需要选择SDK版本。
(6)单击【Create AVD】按钮。创建配置的虚拟机参数,例如,SDK API的版本,SD卡的大小,手机屏幕的尺寸等,创建后参数显示在AVD Manager管理界面中,如图1-34所示。

图像说明文字

(7)选中创建的手机模拟器SDK4.0.3,单击【Start…】按钮启动手机模拟器,如图1-35所示。
至此,说明Android SDK已经配置成功。注意:如果电脑上【我的文档】使用的是中文名,会导致AVD无法成功创建Android手机模拟器。解决该问题的方法是设置【我的电脑】上的环境变量,即:打开【系统属性】→【环境变量】,在【系统变量】中选择【新建】→变量名为ANDROID_SDK_HOME(变量名不能改变,只能是这个名字),然后把变量值指定为存放AVD所在的.android文件夹的路径,比如d:\androidcode,如图1-36所示。

图像说明文字

1.4 安装Eclipse ADT

一、任务分析

本次任务要求完成Eclipse ADT的下载、安装和配置。要完成本次任务,需要思考如下几个问题。
(1)Eclipse ADT是什么软件,与JDK、SDK软件有何关系,对Android项目开发有何作用?
(2)从何处获得正确的Eclipse ADT软件?
(3)如何安装Eclipse ADT?
(4)如何配置Eclipse ADT?

二、相关知识

1.认识IDE开发环境
软件开发涉及的环节较多,早期的程序设计将代码编写与编译分开进行,不便于调试,影响了开发的效率。随着程序开发的规模越来越大,对不同功能的程序代码进行有效管理的需求也就越来越大。
集成开发环境(IDE,Integrated Development Environment)旨在提供一个综合的图形用户开发环境,方便程序员进行软件开发。它一般集成了程序生成器、代码编辑器、编译器、调试器和发布器等,具有代码编写、管理、分析、编译、调试和发布等功能。
2.认识Eclipse
Eclipse是一个开源社区,所提供的项目致力于建立开放的开发平台,具有可扩展性的框架、工具和运行环境的建立、发布和软件生命周期的管理。Eclipse社区提供了适合Android、J2EE、Java、J2ME、C/C++、JavaScript等语言的IDE开发工具。
Eclipse最初由IBM公司所开发,于2001年捐献给开源社区,现由Eclipse基金会管理。Eclipse一个很重要的特色是具有通过插件来扩展开发平台的功能。Eclipse本身只是一个框架平台,运行在Eclipse平台上的各种插件提供了开发程序的各种功能。Eclipse的发行版本带有最基本的插件,软件开发人员可以在此基础上通过开发插件建立自己的IDE。
Eclipse提供很多快捷键来帮助开发者更好地编写代码,下面列出几个常用的快捷键。
(1)【Ctrl】+【Shift】+【O】组合键:自动导入代码中用到类所在的包。
(2)【Alt】+【/】组合键:利用代码助手完成一些代码的提示插入,例如类名补全、方法提示等。
(3)【Ctrl】+【Shift】+【F】组合键:格式化当前代码,使代码更加整齐。
(4)【Ctrl】+【/】组合键:注释当前行,若再按则取消注释;选择多行,则可以批量注释。
(5)【Ctrl】+【D】组合键:删除当前行。
(6)【Ctrl】+【T】组合键:快速显示当前类的继承结构。
Eclipse的使用很直观,本节将对Eclipse的主界面(见图1-37)进行介绍。Eclipse的主界面主要由菜单、工具栏、视图(View)、透视图(Perspective)切换器、编辑器组成。
菜单包含了Eclipse提供的大部分功能,下面介绍几个重要的菜单项操作。
(1)【Window】→【Open Perspective】:打开切换特定的透视图。
(2)【Window】→【Reset Perspective…】:恢复默认的透视图设置。当不小心关闭Eclipse的某些默认窗口,可使用该操作进行恢复。

图像说明文字

(3)【Window】→【Show View】:打开特定的视图。当视图不小心关闭后,可以通过该菜单再次打开。
(4)【Project】→【Clean…】:将工程中旧的.class文件删除,同时重新编译工程。当遇到不明原因的报错时,可以执行该操作来尝试是否能够解决该问题。
(5)【Search】→【File】:在项目中遍历出包含特定关键字的代码,方便开发者查找代码。
一个透视图相当于一个自定义的界面,保存了当前的菜单栏、工具栏按钮以及视图的大小、位置、显示与否的所有状态。Eclipse打开时呈现的界面布局就是一个透视图。Eclipse提供了多种透视图,以方便用户在不同的开发环境下工作,例如调试透视图。单击 按钮可以在多个透视图间切换。
视图是显示在主界面中的一个小窗口,主要用于信息展示,可以单独最大化、最小化显示,调整显示大小和位置,也可以将其关闭。下面简要列举几个主要的视图。
(1)包浏览视图(Package Explore)以包层次显示程序的各个类。
(2)大纲形式视图(Outline)展示某个类的成员变量和方法。
(3)控制台视图(Console)展示程序的运行输出。
在菜单【Window】→【Preferences】中,可以对Eclipse常用的属性进行配置,例如代码字体大小和颜色、代码行数的显示等,配置界面如图1-38所示。

图像说明文字

3.认识ADT
ADT(Android Development Tools)是集成到Eclipse上的一个插件,能够提供一个强大的集成开发环境来开发Android应用。故可以将ADT理解为是Android SDK与Eclipse建立起联系的一个软件工具。

三、任务实施

1.Eclipse的下载和安装
Eclipse的下载比较简单,如果在任务1.3的Android SDK下载中损坏了Eclipse软件,可以通过以下步骤重新获取。
(1)登录Eclipse软件下载主页http://www.eclipse.org/downloads/,页面如图1-39所示。

图像说明文字

(2)选择【Eclipse IDE for Java Developers】项,单击相应平台的版本软件,即可进入具体下载位置,如图1-40所示。

图像说明文字

(3)下载完成后,解压即可使用Eclipse IDE开发软件,软件主界面如图1-41所示。

图像说明文字

2.ADT插件的安装及配置
ADT插件的下载安装比较简单,下面是主要的步骤。
(1)打开Eclipse IDE,选择菜单中的【Help】→【Install New Software】命令,打开插件安装界面,如图1-42所示。

图像说明文字

(2)单击【Add...】按钮,弹出对话框要求输入【Name】和【Location】。【Name】可随意命名,【Location】文本框中输入ADT的在线安装地址http://dl-ssl.google.com/android/eclipse,如图1-43所示。
(3)确定返回后,在【Work with】后的下拉列表中选择刚才添加的ADT,会看到下面出现【Developer Tools】,将其展开,级联选项中包括【Android DDMS】、【Android Development Tools】、【Android Hierarchy Viewer】和【Android Traceview】选项,将它们选中,如图1-44所示。

图像说明文字

(4)按提示一步一步地单击【Next】按钮,完成后按提示单击【Restart Now】按钮,重启Eclipse,如图1-45所示。

图像说明文字


说明
在Eclipse中安装好ADT并重启后,下一步就是通过ADT将前面安装的Android SDK加入到Eclipse中。如果通过在线方式未能成功安装ADT,也可以采用离线的安装方法。先到网上下载Android ADT包,将Android ADT包中plugins包下面的所有jar文件拷贝到Eclipse目录下的plugins包中,再将Android ADT包下面的features包中的所有jar文件拷贝到Eclipse目录下的features包中。


(5)选择【Windows】→【Preferences】命令,单击【Android】选项,然后单击【Browse…】按钮,找到SDK安装目录(即之前下载安装的SDK路径),如图1-46所示。

图像说明文字

(6)单击【OK】按钮,完成向Eclipse中加入Android SDK。这样Eclipse的菜单中就包含了SDK和AVD的管理命令,可以打开SDK和AVD的管理界面进行设置,分别如图1-47和图1-48所示。

图像说明文字

至此,Eclipse的Android开发环境搭建完毕。

图像说明文字

1.5 测试开发环境

一、任务分析

检查Android开发环境是否已经完全搭建成功,就是要看前面1.2、1.3、1.4节的软件安装配置是否能够正常工作。比较简单直接的方法是在开发环境中尝试开发一个Android程序,并测试其是否能够正常运行。要完成本次任务,需要思考如下几个问题。 (1)如何在Eclipse中开发一个Android程序? (2)Android程序具有什么特点?

二、相关知识

1.Android概述 Android是一个用于移动设备的软件集,包括操作系统、中间件和关键的应用程序。Android SDK提供了必需的工具和APIs,用于在Android平台上使用Java编程语言开发应用程序。Android具有如下特征。

  • 允许重用和替换组件的应用程序框架。
  • 具有专门为移动设备优化的Dalvik虚拟机。
  • 集成了基于开源引擎WebKit的浏览器。
  • 通过自定义的2D图形库优化显示图形,提供基于OpenGL ES 规范的3D图形支持。
  • 用于结构数据存储的SQLite。
  • 为常见的声音、视频和图形格式,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG、GIF,提供多媒体支持。
  • 支持GSM、CDMA、TD SCDMA电话(依赖于硬件)。
  • 支持蓝牙、EDGE、3G和WiFi(依赖于硬件)。
  • 支持相机、GPS、指南针和加速度传感器(依赖于硬件)。
  • 丰富的开发环境,包括设备模拟器、调试工具、内存和性能分析、Eclipse IDE插件、Android Studio等。 Android的体系结构如图1-49所示。

图像说明文字

下面对框架的各部分做简要的介绍。
(1)应用程序(Applications):是Android推出的一组使用Java语言编写的核心应用程序,例如E-mail客户端、短信程序、日历、地图、通讯录等。
(2)应用程序框架(Application Framework):是Android为开发者提供的一个开放平台,位于应用程序的下一层。开发者可以通过它们自由地利用设备硬件、访问位置信息、运行后台服务、设置告警、在状态栏上增加通知等。应用程序框架的设计是为了简化组件的重用,允许用户替换组件。
应用程序框架提供的是一组服务和系统,这些会在程序开发过程中直接使用到,具体如下。

  • 丰富且具有可扩展性的视图系统(Views System):可用于构建应用程序的界面,包括列表、文本框、按钮、甚至嵌入的Web浏览器。
  • 内容提供者(Content Providers):允许应用程序访问其他应用程序的数据(如通讯录),或者共享数据。
  • 资源管理器(Resource Manager):提供对非代码资源(如本地化字符串、图像和布局文件)的管理。
  • 通知管理器(Notification Manager):允许应用程序在状态栏上显示定制的提示信息。
  • 活动管理器(Activity Manager):管理应用程序的生命周期,提供一个通用的导航回退功能。

(3)库(Libraries):Android包括一组C/C++库,用于Android系统中不同的组件。这些功能通过Android应用程序框架对开发者开放。下面列出了一些核心库。

  • C语言系统库(System C library):派生于标准C语言系统库,并根据嵌入式Linux设备进行调优。
  • 多媒体库(Media Libraries):基于OpenCore多媒体开源框架(该产品由Google联合PacketVideo公司推出)。该库支持许多流行的音频、视频格式以及静态图像文件,包括MPEG-4、H.264、MP3、AAC和AMR、JPG和PNG格式文件的播放和录制。
  • 外观管理器(Surface Manager):管理访问子系统的显示,将2D绘图与3D绘图进行显示上的合成。
  • LibWebCore:是一个现代的Web浏览器,为Android浏览器和嵌入式Web视图提供支持。
  • SGL:底层的2D图形引擎。
  • 3D库(3D Libraries):是基于OpenGL ES API的实现。该库使用了硬件3D加速(如果可用)或高度优化的3D软件光栅。
  • FreeType:用于位图和矢量字体的渲染。
  • SQLite:一个强大的轻量级关系数据库引擎,可以用于各种应用程序。

(4)Android Runtime:Android的一组核心库,提供大部分Java编程语言核心库的功能。Android应用程序是在Dalvik虚拟机的实例下以进程形式运行。Dalvik可以允许一个设备有效地运行多个虚拟机。Dalvik虚拟机执行的文件是Dalvik可执行格式,文件后缀为.dex,并被优化成最小内存存放。与Java虚拟机基于堆栈的原理不同,Dalvik虚拟机是基于寄存器的,通过转换工具DX将Java字节码转换成DEX格式,它依赖于Linux内核的底层功能,例如线程和低级别的内存管理。
(5)Linux内核(Linux Kernel):Android依赖于Linux相应版本的核心系统服务,例如安全、内存管理、进程管理、网络堆栈、驱动程序模型。Google对Linux内核做了改动,提供了支持Android平台的设备驱动。
Android应用程序是使用Java语言编写的。Android SDK工具将代码、数据和资源文件编译成一个Android包(后缀为.apk的归档文件)。.apk归档文件可以理解为一个文件和目录的集合,而这个集合被储存在一个文件中,用于在移动设备上安装应用程序。一旦安装成功,每个Android应用即位于自己的安全沙箱中(安全沙箱是分离运行程序的一种安全机制,一般用于对程序访问的资源进行控制)。

  • Android操作系统是一个多用户的Linux系统,每一个应用都是一个不同的用户。
  • 默认情况下,系统赋予每个应用唯一的Linux用户ID,该ID仅用于系统,应用程序不需要知道。系统为应用的所有文件赋予权限,使只有该ID的应用才能够对其进行访问。
  • 每一个进程有自己的虚拟机,应用程序代码的运行与其他应用隔离。
  • 默认情况下,每一个应用运行在自己的进程中。当应用组件中的任意一个需要执行时,Android开启进程;当不需执行或者系统必须要为其他应用回收内存时,该进程将被关闭。

这样一来,Android系统实现了最小特权原则。也就是说,每个应用程序在默认情况下只能访问其运行时所需要的部分。这样便创建了一个非常安全的环境,使得应用程序不能访问系统中其他不批准的部分。
当不同应用程序之间需要共享数据时,可以为其安排共享相同的Linux用户ID,在这种情况下,程序能够互相访问对方的文件。为了节省系统资源,具有相同用户ID的应用程序可以被安排在相同的Linux进程中运行,并共享相同的虚拟机(应用程序也必须使用同一证书签名)。
应用程序是可以访问系统服务的,如应用程序可以请求访问用户的通讯录、短信、SD存储卡、摄像头、蓝牙以及其他设备,但要求用户在安装应用程序时必须被授予相应的权限。
2.Android的组件
应用程序组件是Android应用程序的重要基石,在编程时需根据需要编写相应的组件。每个组件具有一个不同的指向,系统可以由此进入应用程序。并非所有的组件都是用户的实际入口点,一些组件是互相依赖的,但每一个都以自己的实体形式存在,并扮演特定的角色。
应用程序组件有四种不同的类型,每种类型服务于不同的目的,并具有独特的定义。下面分别对这四种不同类型的应用程序组件进行介绍。
(1)Activities:一个Activity(活动)表示一个用户界面,可以和用户进行交互。例如,E-mail应用程序可以包括一个显示新邮件的Activity、一个撰写电子邮件的Activity和一个阅读邮件的Activity。虽然这些Activities一起为E-mail应用程序提供用户体验,但每个都彼此独立。正因为如此,如果E-mail应用程序允许,不同的应用程序可以启动这些活动中的任何一个。例如,摄像头应用程序为了分享图片,可以启动E-mail应用程序中撰写新邮件的Activity。
要实现一个Activity,需要定义一个Activity类的子类。如果新建一个活动,必须要在AndroidManifest.xml中进行声明。
(2)Services:Service(服务)是运行在后台的组件,一般用于执行需要长时间运行的操作或远程进程的工作。Service并不提供用户界面。例如,Service在后台播放音乐的同时,用户在使用另一个不同的应用程序,或者Service可能正在获取网络上的数据,但并不阻塞用户交互的活动。作为一个组件,某个Activity可以启动该服务,使之运行或与之绑定以便于交互。
实现一个Service,需要定义一个Service类的子类。
(3)Content Providers:Content Provider(内容提供者)管理应用程序共享的数据集。程序员可以将数据存储在文件系统、SQLite数据库、网络或者任何其他应用程序可以访问到的持久性存储位置。通过Content Provider,其他应用程序可以查询甚至修改Content Provider上的数据(前提是Content Provider允许)。例如,Android系统提供了一个Content Provider管理用户的联系人信息,于是任何具有权限的应用程序可以查询Content Provider(如ContactsContract.Data)的某部分,读取和写入关于特定人的信息。
要实现一个Content Provider,需要定义一个ContentProvider类的子类,并实现一套标准的API,以便使其能够与其他的应用程序进行交易。
(4)Broadcast Receivers:Broadcast Receiver(广播接收器)是一个负责全系统广播通知的组件。许多广播信息都来源于系统,如某个Broadcast宣布屏幕已关闭、电池电量低或图片已被捕捉到。应用程序也可以启动广播,例如,让其他应用程序知道某些数据已被下载到设备。虽然广播接收器不显示用户界面,但可以创建状态通知栏用于在广播事件发生时提醒用户。更普遍的做法是,将广播接收器设计为对其他组件的“网关”,且只需做非常少量的工作,例如,只启动一个服务来执行基于事件的一些工作。
要实现一个Broadcast Receiver,需要定义一个BroadcastReceiver类的子类。每一个Broadcast对象均以Intent对象的形式进行调用。
Android系统设计的一个独特之处是,应用程序可以通过Intent来启动另一个应用程序的组件。例如,程序员希望使用设备上的相机捕捉照片时,并不需要自己额外去开发一个拍摄照片的Activity,只需简单地启动摄像头应用程序中用于捕捉照片的Activity即可。完成后,照片甚至能够返回到应用程序中,并可以被进一步处理。对于用户而言,这一过程好像相机实际上是其应用程序中的一部分。
在系统启动一个组件时,需启动该应用程序的进程(如果进程尚未运行)和实例化组件所需的类。例如,如果应用程序开启摄像头应用程序中捕捉照片的Activity,该Activity运行在摄像头应用程序的进程中,而不是在刚开启的应用程序进程中。因此,不同于其他大多数系统上的应用程序,Android应用程序不具有单一的入口点(没有main()函数)。
因为系统在单独的进程中运行每一个应用程序,通过文件权限限制应用程序访问其他应用程序,而用户的应用程序不能直接激活另一个应用程序组件。这就要求程序员必须传递信息到系统,指定启动一个特定组件的意图(使用Intent),然后系统将会激活相应的组件。
3.认识手机模拟器
手机模拟器(Mobile Emulator)的作用是在计算机上模拟手机环境,从而可以在计算机上进行手机程序开发、调试和发布。不同平台、不同型号的手机有不同的手机模拟器,例如有Android手机模拟器、Windows Phone手机模拟器、Samsung手机模拟器、Nokia手机模拟器、BlueStacks模拟器、Genymotion模拟器。Android SDK自带Android手机模拟器可以根据配置信息配置不同的手机模拟器,如图1-50所示。使用快捷键【Ctrl】+【F11】可以对手机模拟器的横屏和竖屏进行切换。

图像说明文字

4.Activity应用程序的生命周期
Activity是Android程序图形用户界面的基本组成部件。Android程序由一个或者多个Activity类组成,而程序是从Activity类开始执行的,系统规定了Activity的生命周期有创建、开始、唤醒、暂停和销毁五种状态。Activity的生命周期交给系统统一管理。Android中所有的Activity都是平等的,通过堆栈来管理。当一个新的Activity开始时,它被放到堆栈的顶部,并成为运行的Activity,显示在用户界面上。而前一个Activity则移至其下方。只有当新的Activity退出后,原Activity才会再次被置于堆栈顶部,从而可以再次得以运行。例如,一个程序正在运行,突然手机来电,Android接收到来电广播后会打开一个接听电话的Activity,并放入堆栈的栈顶,这样,程序就会被接电话的Activity所覆盖,手机会显示接听电话的Activity。
图1-51所示为Activity的生命周期图,图中的onCreate()、onStart()等方法与Activity状态变化的处理紧密相关。

图像说明文字

Activity本质上有4种状态。
(1)如果一个Activity是在屏幕的前台,即在堆栈的上面,那么其处于活动(Active)或者运行的(Running)状态。
(2)如果一个Activity已经失去焦点,但依然可见,那么其处于暂停(Paused)状态,依然保留着所有的状态信息,但在内存非常低时,可被系统关闭。
(3)如果一个Activity被另一个Activity完全掩盖,那么其处于停止状态。这时,Activity也同样保留了所有的状态信息,但对于用户而言是不可见的,当系统的其他地方有内存需要的时候,会被系统关闭。
(4)当一个Activity处于暂停或者停止状态时,系统可以从内存中销毁该Activity。当该Activity需要再次向用户显示时,须重新开启,以恢复其之前的状态。
在Activity类中,Android定义了一系列与生命周期相关的方法。开发一个Android程序,首先需要创建一个继承于Activity的子类,根据需要重写Activity的方法,来实现数据初始化、回收、菜单点击等操作。以下为编写Activity程序并实现其生命周期相应操作的示例。

图像说明文字

下面对这7个与Activity生命周期有关的方法进行说明。
(1)protected void onCreate(Bundle savedInstanceState):Activity实例启动时调用的第一个方法。一般情况下,在该方法编写初始化数据、从XML布局文件中加载设计好的用户控件对象等方面的操作。例如,

图像说明文字


注意:

运行一个应用程序时,若无法出现界面,并直接报错,一般情况下是onCreate方法内的代码有错误。


(2)protected void onStart():该方法在onCreate()方法执行之后或者在Activity从停止状态转换为活跃状态时被调用。
(3)protected void onResume():该方法在Activity从暂停状态转换到活跃状态时或者在onStart()方法执行之后被调用。onResume()方法也较为适合放入初始化数据的操作。
(4)protected void onPause():该方法在Activity从活跃状态转换到暂停状态时被调用。
(5)protected void onStop():该方法在Activity从活跃状态转换到停止状态时被调用,一般在这里保存Activity的状态信息。
(6)protected void onRestart ():该方法在Activity从停止状态重新向用户显示时调用。
(7)protected void onDestroy():该方法在Activity结束时被调用,一般用于释放资源、清理内存等工作。
5.XML知识
标记语言采用一套标记标签来表示文本信息,标记是由尖括号包围的关键词,如,其作用是描述文本信息。
XML(eXtensible Markup Language)称为可扩展标记语言。XML文档的后缀是.xml,既可以使用专门的编辑工具,也可以使用文本编辑器对其进行编写。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。XML的标记没有被预定义,用户可以自行定义标记来描述数据。与HTML(HyperText Markup Language)的差异在于,XML主要用来存储规范的数据信息。
每个XML元素都以一个起始标记开始,以一个结束标记收尾。起始标记以“<”符号开始,以“>”符号结束。结束标记以“</”符号开始,以“>”符号结束。XML的标记是可以自定义的,主要用来描述数据。XML元素可以带有多个属性,属性值需要添加引号。
6.AndroidManifest.xml文件描述
AndroidManifest.xml文件可以理解为关于Android应用程序的清单文件,使用XML向Android系统描述关于应用程序的主要功能、执行的动作和处理的信息、所需的权限等重要信息。例如,一个Android应用程序中一般包含多个Activity类,需要具体区分程序有哪些Activity类可由系统识别;程序首先执行的是哪一个Activity类;系统有哪些权限可以交由应用程序使用;应用程序的图标及程序名称管理等。任何一个Android项目都需要使用该文件,并要求其存放在项目的根目录下。
在Android系统开始启动一个应用程序组件时,系统必须读取AndroidManifest.xml文件以便知道组件是否存在。因此应用程序必须在该文件中声明其所有组件。
AndroidManifest.xml包含了很多功能,具体如下。

  • 描述应用程序包含的组件,对实现每一个组件的类进行命名,让Android系统知道有哪些组件以及在什么条件下可以对其进行加载。
  • 给予应用程序请求的使用权限,如连接互联网或以只读方式访问用户的联系人。
  • 根据应用程序实际用到的APIs,声明应用程序要求的最小API等级。
  • 声明应用程序使用或者请求的硬件和软件特征,例如,相机、蓝牙服务或多点触摸屏。
  • 声明应用程序需要链接的外部API库,例如,Google地图类库。
    下面介绍如何在AndroidManifest.xml文件中进行描述。

(1)声明组件:AndroidManifest.xml文件的主要任务是通知Android系统应用程序包含的组件。可以这样定义一个Activity:

图像说明文字


说明

  • 在元素中,android:icon属性指明应用程序图标用到的资源,android:label属性表示应用程序的标签,可以理解为整个Android应用程序的名字;
  • 在< activity >元素中,android:name属性指明Activity子类的完整名称,android:label属性作为Activity在手机界面上用户可见的标签,可以理解为用字符串来表示的Activity的名字。

定义应用程序不同组件的元素分别如下。

  • < activity >元素:用于定义Activities。
  • < service>元素:用于定义Services。
  • 元素:用于定义Broadcast Receivers。
  • 元素:用于定义Content Providers。

若程序使用了Activities、Services或者Content Providers,而这些在AndroidManifest.xml文件中又没有定义,则意味着它们对于Android系统是不可见的,因此不能够运行。然而Broadcast Receivers组件既可以在AndroidManifest.xml文件中定义,也可以动态地在代码中定义。注意:作为BroadcastReceiver对象,通过调用RegisterReceiver()向系统注册。
(2)声明组件的能力:在激活组件时可以使用一个Intent开始活动、服务和广播接收器。程序员可以在Intent中使用组件类名称的方式明确命名目标组件。然而,Intent的真实能力体现在Intent的动作上,因此需要在AndroidManifest.xml文件中描述要执行动作的类型和动作需要的数据。如果有多个组件可以执行Intent所描述的动作,则系统会让用户选择使用哪一个。
Android系统识别组件能响应Intent组件的方式是通过对接收的Intent与在设备其他应用程序上的AndroidManifest.xml文件中定义的Intent Filters进行比较得出的。
(3)声明应用程序的要求:在各种搭载Android系统的设备中,并非所有的设备都能提供同样的功能和能力。为了防止应用程序被安装在缺乏所需功能的设备上,应在AndroidManifest.xml文件中通过声明设备和软件要求的方式清楚地定义应用程序支持的设备类型。这些声明大部分是信息性的,Android系统并不会对其进行读取,但诸如Google Play外部服务将会读取它们,用于为用户搜索、过滤满足其设备需求的应用程序,这样应用程序将限定于满足其所有要求的设备中。
例如,如果应用程序需要一个摄像头,并要求使用在Android 2.1 API(API等级7)系统中,则应在AndroidManifest.xml文件中声明这些要求。这样,没有摄像头以及系统低于Android 2.1版本的设备将无法从Google Play中安装该应用程序。
下面是在设计和开发应用程序时需要考虑的一些重要的设备特征。
① 屏幕尺寸和屏幕密度。以屏幕类型对设备进行分类,Android为每个设备定义了两个特征:屏幕尺寸(屏幕的物理尺寸)和屏幕分辨率(物理屏幕上的像素密度或dpi(点数/英寸))。为了简化各种不同类型的屏幕配置,Android系统将其归纳到不同的组,使其更容易对准。

  • 屏幕的大小分为小(small)、正常(normal)、大(large)和特别大(extra large)。
  • 屏幕的密度分为低密度(low density)、中等密度(medium density)、高密度(high density)和特别高密度(extra high density)。

默认情况下,应用程序兼容所有的屏幕尺寸和密度,因为Android系统会对用户界面布局和图像资源进行适当的调整。开发者可以使用可替代的布局资源为特定的屏幕尺寸提供专门的用户界面布局,为特定的屏幕密度提供专门的图像,并在AndroidManifest.xml文件中使用元素声明应用程序支持的屏幕尺寸。
② 输入配置。许多设备提供不同类型的用户输入机制,例如硬件键盘、轨迹球或5方向导航台。如果应用程序还需要特定类型的输入硬件,那么应该在AndroidManifest.xml中使用元素进行声明。一般情况下,应用程序很少需要声明特定的输入配置。
③ 设备功能。一些硬件和软件功能可能装配在Android设备上,例如,摄像头、光传感器、蓝牙、某版本的OpenGL或触摸屏的保真度。除了标准的Android库是可用的之外,开发者不能够假设Android设备应具有哪些功能,所以应使用元素声明应用程序所使用到的功能。
④ 平台版本。不同的Android设备通常运行在不同的Android版本上,例如Android 1.6或者Android 2.3。每个后续的版本通常新增了前面版本不能够使用的API。为了指明哪个集合的API是可用的,每个平台版本均需指出API的等级,例如,Android 1.0的API等级是1,Android 2.3的API等级是9。如果所用API是在版本1.0之后增加到平台上的,那么应该使用元素声明最小的API等级。
为了帮助读者更深入地理解AndroidManifest.xml文件的定义,下面列出AndroidManifest.xml文件的一般结构。当中的元素名称是规定的,不能够添加自己的元素。其中只有 和是AndroidManifest.xml文件必须的元素,并只能够出现一次。其他大部分元素根据实际项目需要可以出现多次或者一次都不出现。同一个等级的元素在文件中无需按照顺序摆放,例如,, , 和元素可以以任何顺序放置。只有一个例外:元素必须要跟着元素。需要注意的是:元素用于指定程序的权限,和< application >元素处于同一层。一些开发者易误将元素放在一层,这会导致XML文件报错。
除了根元素中的一些属性,其他所有属性都是以android:prefix形式命名的,如android:alwaysRetainTaskState。

图像说明文字

很多元素与Java类是对应的。

图像说明文字

如果属性值超过一个,需要重复定义该元素,而不是在一个元素中列出多个值。下面是在Intent Filter中列出几个动作的例子。

图像说明文字

配置文件中有一些属性值可以显示在屏幕上,如Activity的标记和图标。这些属性的取值应该被本地化,所以应该设置为某个资源或者主题,资源值表达的格式如下:

@[package:]type:name

  • package表示包名,如果资源和应用程序在同一个包中,那么package可以被忽略;
  • type表示资源的类型,例如取值为“string”或者“drawable”;系统会自动到项目的res目录进行匹配,字符串的定义放在项目的res/values目录下的strings.xml文件中,drawable文件则放在项目的res/drawable目录下。
  • name表示用于标识特定资源的名字。

例如,
< activity android:icon="@drawable/smallPic" . . . >
主题表达与资源值表达类似,只是将“@”改为了“?”,其格式为?[package:]type:name。 AndroidManifest.xml文件描述示例如下:

图像说明文字

图1-52所示为某应用程序的AndroidManifest.xml文件的完整描述。

7.应用程序的资源
一个Android应用程序的组成不仅仅是代码,它还要求图片、声音文件以及其他可视部分与源程序分离,因此,应该在XML文件中定义动画、菜单、样式、颜色和用户界面的布局。使用资源可以更容易升级应用程序的各种特征,而不需要改变代码,即通过一组可选的资源,能够使开发者根据不同的设备配置(如不同的语言和屏幕尺寸)优化开发的应用程序。
对于Android项目中的每一个资源,系统为其定义了唯一的整数ID,可以在应用程序代码中通过该ID引用资源。例如,如果应用程序包含一个名为【logo.png】的图像文件(保存在res/drawable/目录下),自动生成的资源ID名为【R.drawable.logo】,该ID可以被用来引用图像,在程序代码中进行处理。
将资源从源代码中分开的最重要的作用是可以为用户提供针对不同设备配置的可替代资源的能力。例如,对于在XML中定义用户界面的字符串,可以将该字符串翻译成其他语言,并保存在单独的文件中;然后,根据资源目录名称的语言修饰符(如res/values-fr/表示法文字符串值)以及用户的语言设置,Android系统自动将合适的语言字符串引用到用户界面上。

图像说明文字

Android支持许多不同的用于可替代资源的修饰符。修饰符是一个短的字符串,在资源目录中定义哪些资源在设备配置上使用。如程序员可以根据设备的屏幕方向和大小,为Activities创建不同的布局。当设备屏幕为纵向(高)时,可能需要按钮垂直布局,当屏幕为横向(宽)时,需要按钮水平对齐。为了能够根据方向改变布局,可以定义两种不同的形式,并为每个布局目录的名字使用合适的限定符。Android系统会根据当前设备的方向自动采用相应的布局。

三、任务实施

开发一个Android程序主要分为两步:第一步是创建一个Android项目;第二步是根据项目的需要在Activity子类中编写代码,或者新建其他类,在Activity子类中进行引用。
(1)创建一个Android项目,在Eclipse的Package视图中单击鼠标右键,选择【New】→【Android】→【Android Application Project】,如图1-53所示。

图像说明文字

(2)单击【Next】按钮,进行应用程序名称设置,如图1-54所示。在此须设置Application Name(软件名称)、Project Name(项目名称)、Pakage Name(包名称,是区分Android软件的唯一标记,必须填写)、Build SDK(表示目前开发项目所应用的Android平台)、Minimum Required SDK(支持的最小Android版本,软件无法安装到低于该版本的手机上)。在应用程序参数的命名上,可以根据个人需要起能够反映项目特征的名字。除了Application Name可用中文之外,建议为其他属性使用有意义的英文名。这里将应用程序命名为Hello。
(3)单击【Next】按钮,设置应用程序的图标,如图1-55所示。

图像说明文字

(4)单击【Next】按钮,创建一个空白的Activity,如图1-56所示。
(5)单击【Next】按钮,配置Activity信息,输入Activity的名字和对应的布局文件的名字,如图1-56所示。

图像说明文字

(6)单击【Finish】按钮,成功建立第一个Activity项目后的界面如图1-58所示。
(7)单击菜单栏 按钮,运行Hello程序或者用鼠标右键单击Hello项目,选择【Run As】→【Android Application】命令来运行项目。如果成功,将会弹出如图1-59所示的手机模拟器界面,代表运行Android程序的手机。本例没有编写任何代码就可以生成一个手机应用程序。
除了生成AndroidManifest.xml文件之外,Eclipse默认为Android项目建立如表1-2所示的目录。

图像说明文字

图像说明文字

下面是生成的代码。

图像说明文字

代码分析如下。
(1)HelloActivity类能够在手机上直接运行,是因为该类继承了Activity抽象类。
(2)实现Activity生命周期的6个方法:onCreate、onStart、onResume、onPause、onStop和onDestroy。为了更好地理解上述代码的作用,可以对其进行修改。除了可以利用Java的System.out.println()方法输出信息之外,还可以利用Android提供的Log. v(String tag,String msg)方法以日志方式输出相应的信息。其中,参数tag表示标签,参数msg表示内容,取值都可以在编程中指定。这些信息可以通过Eclipse的LogCat视图进行查看。
(3)@Override表示下面的方法是重写父类Activity的方法。可以不要,但该标识符有利于避免方法名的书写错误。

1.6 实训项目

一、建立Android开发环境

1.实训目的与要求
学会下载、安装和配置Android开发环境所需的软件,建立Android程序的开发环境。
2.实训内容
根据1.2、1.3、1.4节中的任务,按照规划任务内容,实施实训。

二、开发运行一个简单的Android程序

1.实训目的与要求
学会利用Eclipse自动生成一个Android程序,并使用不同的模拟器运行该程序,通过LogCat日志视图查看输出结果,以便对Android程序开发的步骤有初步认识。
2.实训内容
根据1.5节中的任务实施实训。
3.思考
(1)运行不同的手机模拟器对Android的程序开发有什么作用?
(2)Android开发为何大量使用XML文件,这样做有什么作用?

目录

推荐用户

同系列书

  • 移动应用UI设计

    张晓景 胡克

    本书中通过基础加案例的方式向同学们介绍了Photoshop在手机UI领域中的应用。全书中从UI的基础讲起,针对...

    ¥49.80
  • 移动平台UI交互设计与开发

    陈燕 戴雯惠 魏娜 许伟刚

    本书内容分为设计篇和开发篇,以企业全真项目和经典案例为载体,内容覆盖Photoshop在智能手机应用图标设计、...

    ¥45.00
  • Android移动应用开发项目教程

    李新辉 邹绍芳 陈云志 周昕 吴红娉

      本书通过精心设计的7个工作项目,全程贯彻“做中学”理念,先实践认知,后理论拓展,由浅入深,让读者逐步掌握A...

    ¥46.00
  • Android项目开发入门教程

    张伟华 朱东、伊雯雯

    本书主要围绕Android应用程序开发基础、界面设计、Activity、ContentProvider、数据存...

    ¥35.00
  • Android应用程序设计教程

    李华忠 梁永生 刘涛

      全书共分成8章,主要内容包括Android开发环境构建、Android屏幕布局、Android控件Widg...

    ¥39.80
  • 跨平台的移动Web开发实战(HTML5+CSS3)

    从跨平台的移动Web开发实际应用的角度理解HTML5和CSS3的新元素和新功能,合理选取教学内容。本书设置了8...

    ¥49.80
  • Android移动开发项目式教程(第2版)

    谢景明 钟闰禄 陈长辉 冯敬益 王志球

    本书内容主要包括7 部分,第1 部分讲解搭建Android 开发环境的方法,第2 部分讲解在Android...

    ¥42.00
  • HTML 5移动平台的Java Web实用项目开发

    本书以真实购物网站为项目原型,以购物网站为载体,将购物网站的功能模块合理划分为8个教学单元:导航栏和信息提示设...

    ¥45.00
人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部