第1章 Android基础
随着移动网络速度的提升、移动设备性能的提升以及人们对移动设备功能要求的提高,Android这一开放、快速、友好的手机操作系统应运而生并已成燎原之势。
在2012年初,三星、摩托罗拉、HTC等众多手机巨头都拥有了具有自身特色的Android手机系列,Android系统手机也已稳居智能手机发货量的第一位。软件开发方面,大家也纷纷加入Android开发行列,Google官方市场应用数量和下载量急速上升,国内各大Android应用市场,也开始拥有越来越丰富的应用和越来越高的下载量。面对如此火热且具有无线潜力的市场,我们当然不能错过这样的机会。接下来,我们就开始我们的Android应用开发之旅。
1.1 Android介绍
早在2005年7月,Google公司收购了由Andy Rubin(Android之父)等人创立的一家小公司。他们当时做的就是基于Linux内核的手机操作系统,也就是Android系统的雏形。Google公司经过多年打磨,终于在2007年11月,正式向外界展示Android操作系统并与34家手机制造商、软件开发商、电信运营商和芯片制造商共同创建开放手持设备联盟,致力于Android操作系统的开发与推广。这样,Android手机操作系统得到了快速发展和推广,Android手机设备开始大批量的生产。
1.1.1 Android发展史
Android系统是一种以Linux为基础的开放源码的操作系统,主要使用于便携设备。主要发行了如下几个版本:
* Android 1.1
在2008 年9月发布的Android第一版。
* Android 1.5
在2009年4月30日发布,命名为Cupcake(纸杯蛋糕)。该版本是较稳定的第一个版本,也是第一部Android手机G1使用的操作系统。
* Android 1.6
在2009年9月15日发布,命名为Donut(甜甜圈)。该版本主要对OpenCore2媒体引擎进行了支持。
* Android 2.0/2.0.1/2.1
在2009年10月26日发布,命名为?clair(松饼)。该版本主要针对新的浏览器的用户接口,支持HTML5、内置相机闪光灯、数码变焦、蓝牙2.1等。
* Android 2.2/2.2.1
在2010年5月20日发布,命名为Froyo(冻酸奶)。该版本对整体性能进行了大幅度的提升,支持Flash并提高了更多的Web应用API接口的开发,是当前Android手机中最常见的版本。
* Android 2.3
在2010年12月7日发布,命名为Gingerbread(姜饼)。该版本主要简化了界面、提升了速度,有更良好的用户体验,也是目前主流的Android手机操作系统版本。
* Android 3.0
在2011年2月2日发布,命名为Honeycomb(蜂巢)。该版本主要针对平板进行优化,全新设计出了UI,增强网页浏览功能等。该版本用于平板电脑,一般不用于手机设备。
* Android 4.0
在2011年10月19日发布,命名为Ice Cream Sandwich(冰激凌三明治)。该版本使用了全新的UI界面、更强大的图片编辑功能、人脸识别功能等,对系统进一步优化,速度更快,UI更美观,用户体验更友好。目前,能够使用该版本的Android手机比较少,但它是未来Android手机版本的新要求和趋势。
1.1.2 平台架构及特性
虽然,Android系统版本不断地进行着更新,但是其平台架构是没有改变的。其思想是以Linux为基础,对不同功能需求进行分层处理,各层之间统一接口,不关心接口在其他功能分层中的具体实现,来达到集中各自的关注层次,更好的提升Android操作系统的可适用性,其整体架构如图1.1所示。
图1.1 Android架构图
从图中可以很明显地看出Android操作系统分为4层,由上而下依次是应用程序层、应用程序框架层、运行库层和Linux内核层。
1.应用程序层
该层是Android操作系统的最上层,所有用户能直观看到的程序都是属于应用程序层。其中,包括了Android的一系列核心应用程序包,如SMS短消息程序、日历、浏览器、联系人管理程序等,也包括了其他第三方的丰富应用。本书将针对该层的应用程序的开发进行实例讲解。
一般来说,Android的应用开发都是在其SDK的基础上,使用Java语言来进行编写。在绝大时候也确实是这样的,但自从Android提供了NDK后,可以通过JNI接口来调用自行开发的C/C++库来进行处理。但是,纯C++应用依然是不能运行在应用层的。
2.应用程序框架层
该层是Android系统提供给应用程序层所使用的API框架,进行应用程序开发就需要使用这些框架来实现,并且必须遵守其开发原则。这些API框架包含了所有开发所用的SDK类库,同时也还有一些未公开接口的类库和实现。正是这些未公开的类库和接口,使得第三方的应用程序可能无法实现系统应用程序的部分功能。
从系统架构图中可以看出,应用程序框架层主要提供了九大服务来管理应用程序,主要包括:
(1)活动管理器(Activity Manager)
该管理器用于管理应用程序生命周期并提供常用的导航回退功能。
(2)窗口管理器(Window Manager)
该管理器用于管理所有的窗口程序。
(3)内容提供器(Content Providers)
该组件用于一个应用程序提供给其他应用程序访问其数据。这是Android四大组件之一,最常用的应用情形是系统中的联系人数据库以及短信数据库等,当然第三方应用程序也可以通过它来实现共享它们自己的数据。
(4)视图系统(View System)
其中包括了基本的按钮(Buttons)、文本框(Text boxes)、列表(Lists)等视图,这些都是在界面设计中经常使用到的。除了这些系统已经定义的视图外,还提供了接口用于实现开发人员自定义的视图。
(5)通知管理器(Notification Manager)
该管理器用于应用程序可以在状态栏中显示自定义的提示信息。
(6)包管理器(Package Manager)
该管理器用于Android系统内的程序管理。
(7)电话管理器(Telephony Manager)
该管理器用于Android系统中与手机通话相关的管理,如电话的呼入呼出、手机网络状态的获取等。
(8)资源管理器(Resource Manager)
该管理器主要提供非代码资源的访问,如本地字符串、图形、和布局文件(layout files)等。
(9)位置管理器(Location Manager)
该管理器主要用于对位置信息的管理。主要包括了非精确位置定位的手机基站信息、无线热点信息,以及精确位置定位的GPS信息等。
3.运行库层
在运行库层中包括了两部分,一部分是开源的第三方C/C++库,一部分是Android系统运行库。第三方的C/C++库主要用于支持我们使用各个组件,主要的库包括了:
(1)Bionic系统C库(Libc)
该库是一个从BSD继承来的标准C系统函数库,它是专门为基于Linux系统的设备定制的。
(2)Surface Manager
该库用于对显示子系统的管理,并且为多个应用程序提供了2D和3D 图层的无缝融合。
(3)多媒体库(Media Framework)
该库基于 PacketVideo OpenCORE,使用该库使得Android系统支持多种常用的音频、视频格式的回放和录制,同时支持静态图像文件等。
(4)SQLite库
该库是一个功能强劲的轻型关系型数据库引擎。在Android系统的数据存储中,数据库存储是非常重要的一种存储方式,例如系统的短信、联系人信息等都使用数据库来存储。
(5)WebKit库
该库是一个开源的浏览器引擎。WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎,其高效稳定、兼容性好。
Android的系统运行库包括了一个Andorid核心库和Dalvik虚拟机。
核心库提供了Java编程语言核心库的大多数功能。Dalvik虚拟机是Android的Java虚拟机,解释执行Java的应用程序。
每一个Android 应用程序都拥有自己的进程,并且都拥有一个独立的 Dalvik 虚拟机实例。 Dalvik虚拟机被设计成同一个设备可以同时高效地运行多个虚拟系统。Dalvik 虚拟机执行.dex的可执行文件,该格式文件针对小内存使用做了优化,在手机等移动设备中运行更高效。
4.Linux内核层
Android的核心系统服务依赖于Linux 2.6内核,并在其基础上针对手机这样的移动设备进行了优化,用于提供安全机制、内存管理、电源管理、进程管理、网络协议栈和驱动模型等。
除了提供这些底层管理之外,Linux 内核层也提供了硬件设备的驱动,可以看作是硬件和上层软件之间的抽象层,为上层提供相对统一的接口。
这样的层次划分,使得Android各层之间分离,当我们进行应用开发时,不需要过多地关心Linux内核、第三方库以及Dalvik虚拟机等是如何完成具体实现的,绝大部分时候只需要关注在应用程序框架层提供的API,即使底层的实现细节发生改变,也不需要重写上层的应用程序,实现应用程序开发适宜性、可重用性以及快捷性。
通过这样的平台架构设计,也可以看出Android系统可以完成数据存储、网络通信访问、音视频等多媒体的应用、手机短信通话等应用,以及在硬件设备支持的基础上的照相、蓝牙、无线、GPS定位、重力感应等丰富的应用。接下来,我们一步一步通过实例在Android系统中实现这些应用开发。
1.2 开发环境的搭建
我们已经了解了Android操作系统的发展与其架构,对于这么优秀的操作系统,我们当然要赶紧搭建开发环境来进行应用程序的开发。
Android的开发可以在Windows平台上进行,也可以在Linux平台中进行,在这两大平台中进行Android应用程序开发的环境搭建步骤是大同小异的。在这里,我们以Windows平台为例进行开发环境的搭建。
Android的开发环境并不是唯一的,但是使用Eclipse来进行Android应用开发是目前最快速便捷、最常见的开发方式,也是官方推荐的方式。在这里,我们一步一步来实现在Eclipse下Android应用开发环境的搭建。
1.2.1 Java下载安装
Android的应用程序都是使用Java语言来进行编写,要编译Java语言自然少不了JDK的支持。有Java开发经验的读者,对于JDK的安装与配置应该不会陌生,步骤如下:
1.JDK下载
在进行Android开发时,需要选择JDK 1.5及以上版本。选择最新的JDK版本进行下载。在下载时,需要注意自己使用的操作系统平台,选择对应的JDK进行下载,如图1.2所示。
图1.2 JDK下载
2.JDK安装
下载完成的JDK是一个安装包程序,在Windows平台上双击执行即可,不再赘述。
3.Java环境配置
在使用Java工具对Java语言进行编译、运行时,必须配置Java的环境,主要是配置Java的路径、Path和Classpath这三个环境变量。
在Windows桌面上右键单击“我的电脑”,在菜单中选择“属性”命令。在弹出的“系统属性”界面中,选择“高级”选项卡,在其中选择“环境变量”,如图1.3所示。
在弹出的“环境变量”对话框中,选择“系统变量”下的“新建”按钮。在“新建环境变量”弹出框中,新建变量名为“JAVA_HOME”,变量值为安装的JDK路径,如“C:\Program Files\Java\jdk1.6.0_10”,如图1.4所示。
图1.3 环境变量 图1.4 新建Java Home
此外,还需要新建一个变量名为“JAVA”、变量值为安装的JDK的dt.jar和tools.jar的路径,如“E:\Program Files\Java\jdk1.6.0_10\lib\dt.jar;E:\Program Files\Java\jdk1.6.0_10\lib\ tools.jar;.;”。
除了新建这两个环境变量外,还需要添加一个环境变量。找到变量名为Path的变量,在其变量值后添加JDK的bin路径。例如,添加“;C:\Program Files\Java\jdk1.6.0_10\bin”,如图1.5所示。
添加这两个环境变量完成后,在CMD命令控制台中输入java -version,查看JDK的版本信息,安装成功,则会输出安装的版本。输入如下:
C:\Documents and Settings\Owner>java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
图1.5 添加Path
1.2.2 Android SDK下载
在Android开发官网下载SD,如图1.6所示。
图1.6 Android SDK下载
对于各个操作系统平台下载其对应的Android SDK版本。在Windows平台中,下载完成并解压后,SDK目录中并没有Android的开发版本。其目录中主要包括了如下几个子 目录:
(1)add-ons
该目录为空,用于保存Google的插件工具。
(2)platforms
……