进阶Android
你是否曾希望自己是罗丹?坐着用凿子雕琢着一块石头,将它塑造成你想要的样子。由于害怕无法“雕琢”出实用的应用程序,主流程序员曾经十分排斥资源严重受限的移动设备。不过那段时光已经一去不复返了。Android将可编程设备难以置信的应用领域带到了你的门前。本书用31章涵盖了100多个主题。这一版介绍了Android的2.3和Android3.0版,它们分别是针对移动电话和平板电脑而优化的Android版本
·
你是否曾希望自己是罗丹?坐着用凿子雕琢着一块石头,将它塑造成你想要的样子。由于害怕无法“雕琢”出实用的应用程序,主流程序员曾经十分排斥资源严重受限的移动设备。不过那段时光已经一去不复返了。Android将可编程设备难以置信的应用领域带到了你的门前。本书用31章涵盖了100多个主题。这一版介绍了Android的2.3和
Android
3.0版,它们分别是针对移动电话和平板电脑而优化的Android版本。
第一章 Android计算平台简介 (部分) 计算正逐渐变得“个人化”,对计算资源的访问越来越容易。很大程度上,手持设备已转变成计算平台。曾几何时,手机不再仅仅用于通话,它们已能够承载数据和视频。移动设备(手机或平板电脑)正成为非常强大的通用计算平台,势必成为新一代的PC。据预测,甚至华硕、惠普和戴尔等传统PC制造商都在计划推出基于Android的各种规格的设备。各种操作系统之间、计算平台之间、编程语言之间,以及开发框架之间的竞争将转而在移动设备上重演。 我们还预测,随着越来越多的IT应用程序开始推出移动版本,IT行业将掀起一场移动编程热潮。为了帮助读者从这一趋势中受益,本书将介绍如何使用Java为运行在Google公司Android平台上的设备开发应用程序。Android是一个面向移动开发和平板电脑开发的开源平台。本章将概述Android及其SDK,简短介绍一些重要的包,引出每章将涉及的主题,展示如何利用Android源代码,并重点介绍一下为Android平台编程的美好前景。
Android令我们非常激动,因为它是一个引入了众多全新的框架设计模式的先进平台(即使受到移动平台的限制)。
1.1 面向新PC的全新平台 目前移动电话等专用设备已跻身于重要的通用计算平台行列,这对于开发人员而言是件好事。从Android 3.0开始,这一家族又添新成员:平板电脑这一新趋势使我们可通过通用计算语言使用移动设备,扩大了移动应用程序的应用范围和市场份额。 [caption id="attachment_9165" align="aligncenter" width="315" caption="手持设备是全新的PC"]
[/caption] Android平台融入了面向手持设备的通用计算理念。它是一个综合平台,包含一个基于Linux的操作系统,用于管理设备、内存和进程。Android中的Java库涵盖了电话、视频、语音、图形、连接、UI编程和设备的其他许多方面。 [caption id="attachment_9167" align="alignright" width="167" caption="Android软件栈的总体结构"]
[/caption]
尽管针对移动设备和平板设备而构建,但Android平台具备全功能桌面框架的所有特征。Google公司通过Android SDK(Software Development Kit,软件开发工具包)将此框架提供给Java程序员。在使用Android SDK时,很难感受到是在向移动设备编写应用程序,因为你能够访问在桌面或服务器(包括关系数据库)上使用的大部分类库。 Android SDK支持大多数Java SE(Java Platform, Standard Edition),但并不支持AWT(Abstract Window Toolkit,抽象窗口工具包)和Swing。对于AWT和Swing,Android SDK拥有自己的扩展现代UI框架(extensive modern UI framework)。因为你在使用Java编写应用程序,所以可以想到,需要一个JVM(Java Virtual Machin,Java虚拟机)来解释运行时Java字节码。JVM通常会提供必要的优化,以使Java能够达到与C和C++等编译语言相当的性能水平。Android提供了自己的经过优化的JVM来运行已编译的Java类文件,以克服手持设备在内存、处理器速度和功率等方面上的限制。这个虚拟机称为Dalvik VM(1.3节将详细介绍)。
Java编程语言的简单性和人们对它的熟悉,再加上Android丰富的类库,使Android成为了富有吸引力的编程平台。
1.2 Android的历史 各种手机使用着不同的操作系统,比如Symbian OS、微软公司的Windows Mobile、Mobile Linux、iPhone OS(基于Mac OS X)、Moblin(来自英特尔公司)以及许多其他专用操作系统。迄今为止,没有一个操作系统成为事实标准。可用于开发移动应用程序的API和环境具有诸多限制,似乎远远落后于桌面框架。Android平台具有开放、经济和代码开源的特点,更重要的是,它还包含一个高端、高度集成、一致的开发框架。
[/caption] 2007年年底,一些行业领先企业围绕Android平台成立了开放手机联盟(Open Handset Alliance, www.openhandsetalliance.com)。该联盟的一些重要成员如下。
[/caption] Android平台的核心是Linux内核,它负责设备驱动程序、资源访问、电源管理和完成其他操作系统的职责。提供的设备驱动程序包括显示器、照相机、键盘、WiFi、闪存、音频和IPC(Inter-Process Communication,进程间通信)。尽管核心是Linux,但Android设备(比如Motorola Droid)上的绝大部分应用程序都是使用Java开发,通过Dalvik VM运行的。 我们看一下另一层,内核之上是许多C/C++库,比如OpenGL、WebKit、FreeType、SSL(Secure Sockets Layer,安全套接字层)、libc(C运行时库)、SQLite和媒体。基于BSD(Berkeley Software Distribution,伯克利软件套件)的系统C库针对嵌入式Linux设备进行了调优(大小约为原始大小的一半)。媒体库基于PacketVideo(www.packetvideo.com/)的OpenCORE。这些库负责录制和播放音频和视频格式的内容。一个名为Surface Manager的库控制对显示系统的访问,支持2D和3D。在新版本中可能添加更多这样的本地库。 WebKit库负责浏览器支持,WebKit也是Google公司的Chrome和苹果公司的Safari使用的库。FreeType库负责字体支持。SQLite(www.sqlite.org/)是一个可在设备自身上使用的关系数据库。SQLite也是关系数据库的一项独立的开源成果,没有直接绑定到Android。适用于SQLite的工具也可用于Android数据库。 大多数应用程序框架都通过Dalvik VM访问这些核心库,Dalvik VM就像Android平台的入口。前面几节已经提到,Dalvik经过了优化,可以运行多个VM实例。访问这些核心库时,每个Java应用程序都会获得自己的VM实例。 Android Java API的主要库包括电话、资源、位置、UI、ContentProvider(数据)和包管理器(安装、安全等)。程序员使用此Java API开发最终用户应用程序。设备上的一些最终用户应用程序示例包括Home、Contacts、Phone、Browser等。 Android还支持Google公司一个名为Skia的自定义2D图形库,这个库是使用C和C++编写的。Skia也是Google Chrome浏览器的核心组件。然而,Android中的3D API基于来自Khronos小组(www. khronos.org)的一个OpenGL ES实现。OpenGL ES包含OpenGL中面向嵌入式系统的子集。 从媒体角度讲,Android平台支持最常见的音频、视频和图像格式。从无线角度讲,Android的API可支持蓝牙、EDGE、3G、WiFi和GSM(Global System for Mobile Communication,全球移动通信系统)电话而具体则取决于设备硬件。
1.5 使用Android SDK开发最终用户应用程序 本节将介绍用于在Android上开发最终用户应用程序的高级Android Java API。我们将简单介绍Android模拟器、Android基础组件、UI编程、服务、媒体、电话、动画和OpenGL。我们还将展示一些代码片段。
1.5.1 Android模拟器 Android SDK包含一个Eclipse插件,名为ADT(Android Development Tools,Android开发工具)。这个IDE(Integrated Development Environment,集成开发环境)工具用于开发、调试和测试Java应用程序。(第2章将介绍ADT。)也可以单独使用Android SDK,使用命令行工具代替ADT。两种方法都支持使用模拟器来运行、调试和测试应用程序。甚至90%的应用程序开发工作都不需要真实设备。全功能的Android模拟器能够模拟大部分的设备功能。模拟器不能模拟USB连接、照相机与视频采集、耳机、电池、蓝牙、WiFi、NFC和OpenGL ES 2.0。 Android模拟器使用一种名为QEMU(http://bellard.org/qemu/)的开源“处理器模拟器”技术来完成它的工作,此技术由Fabrice Bellard开发。这项技术还支持在一个操作系统上模拟另一个操作系统,而不用考虑采用了何种处理器。QEMU支持在CPU级别上进行模拟。 在Android模拟器中,处理器基于ARM(Advanced RISC Machine,高级精简指令集机器)架构。ARM是一种基于RISC(Reduced Instruction Set Computer,精减指令集计算机)的32位微处理器架构,其设计上的简单性和较高的速度通过指令集中精减的指令来实现。模拟器在此模拟处理器上运行Linux的Android版本。 ARM被广泛应用于手持设备和其他嵌入式电子设备中,低功耗对这些设备非常重要。移动市场也广泛使用了基于此架构的处理器。 可以在Android SDK文档中找到关于该模拟器的更多详细信息:http://developer.android.com/ guide/developing/tools/emulator.html。
1.5.2 Android UI Android使用的UI框架类似于其他基于桌面的全功能UI框架。实际上,它在本质上更加先进,更具异步特征。如果将基于C的传统Microsoft Windows API看做第一代UI框架,将基于C++的MFC(Microsoft Foundation Classes,Microsoft基础类)看做第二代。基于Java的Swing UI框架可以看做第三代,它比MFC具有更高的设计灵活性。Android UI、JavaFX、Microsoft Silverlight和Mozilla XUL(XML User Interface Language,XML用户界面语言)都是第四代UI框架的新成员,它们的UI是声明性的,具有独立的主题。 说明在Android中,即使编程的目标设备是手持设备,也会使用一种时尚的用户界面模式。 在Android UI中编程涉及在XML文件中声明界面。然后将这些XML视图(view)定义作为窗口加载到UI应用程序中。甚至应用程序中的菜单也是从XML文件加载的。Android中的屏幕或窗口通常称为活动(activity),包含用户完成一个逻辑动作单元所需的多个View。View是Android中的基本UI构建块,可以对它们进一步组合形成名为视图组的复合视图。View在内部使用我们熟悉的画布、绘图和用户交互概念。在Android中,承载这些复合视图(包括View和视图组)的Activity是逻辑上可替换的UI组件。Android 3.0引入了另一个名为碎片的UI概念,允许开发人员将视图和功能在平板电脑上分块显示。平板电脑为多窗格活动提供了充足的屏幕空间,而碎片提供了这些窗格的抽象。 Android框架的一个重要概念是Activity窗口的生命周期管理。Android采用一些协议在用户隐藏、还原、停止和关闭Activity窗口时管理状态。第2章将介绍这些基本的思想,还将介绍如何设置Android开发环境。
本文节选自《精通Android 3》 ,作者(印) 克曼特内尼(Komatineni,S.) , (美) 哈希米 (Hashimi,S.) , (美)麦克莱恩 (MacLean,D.),译者杨越,由人民邮电出版社发行。
Google于2005年收购了新兴公司Android,开始开发Android平台。Android公司的重要成员包Andy Rubin、Rich Miner、Nick Sears和Chris White。
[caption id="attachment_9168" align="aligncenter" width="373" caption="Android的发展历程"]- Sprint Nextel
- T-Mobile
- 摩托罗拉
- 三星
- 索尼爱立信
- 东芝
- 沃达丰
- 英特尔
- 德州仪器
更多推荐
已为社区贡献1642条内容
所有评论(0)