关键技能和概念
l 嵌入式编程的历史
l 开放手机联盟简介
l Android主屏初面
毫不夸张的说,传统的桌面应用程序开发人员已经被宠了很长时间,但这并不是说传统的桌面应用程序开发比其它形式的开发简单。作为传统的桌面应用程序开发者,我们有能力创建我们可以想象到的任何应用,这也包括我,因为我就是从桌面编程起步的。
桌面程序开发之所以变得很流行的一个原因是我们有能力与桌面操作系统进行交互,并且和任何底层硬件进行自由交互(或者至少几乎没有例外)。这种自由独立的编程方式,却让一小部分的程序员无法去趟手机开发的浑水。
长期以来,嵌入式开发者就是那些由手机开发者组成的稍大一点的开发组。和桌面开发和后来的web开发相比,嵌入式开发界面丑陋,像硬件和操作系统的特性一样通常以简洁的短语法结束。嵌入式设备生产商没有提供硬件可扩展的特性,因为他们要对硬件机密严格保密,所以他们为嵌入式开发者仅仅开放了局部的交互接口。
嵌入式设备与桌面设备的不同在于,它是一个计算机芯片。那你的标准电视遥控器来说,它就没有什么复杂的技术含量。当按某个键时,芯片就会发射植入设备的特定信号。设备接收到输入设备的信号,就知道执行什么命令(如启动电视)。这是嵌入式编程的一种形式,无论你相信与否,早期的手机设备和开发就是以由这种简单的设备组成的。
大部分嵌入式设备以前(部分现在仍然)是运行在特定的开放操作系统上。选择特定的操作系统而不是使用任何商业系统对产品来说非常必要,简单的设备不需要非常健全和优化的操作系统。
作为设备发展过程中的产品,许多更加复杂的嵌入式设备,如早期的PDA,家庭安全系统,GPS早在五年前都移植到了标准化的操作系统平台上。而小型操作系统如linux或windows嵌入式系统,都广泛应用在许多嵌入式设备上。在设备大变革时代,手机从这些嵌入式设备中分离出来,当你研究他们的架构时候你会发现这些明显的分支。
自从面世以来,手机都有自己的附带设备,因为他们运行在被生产商控制的封闭式的特定系统上。生产商使用特定的操作系统的习惯开始变得越来越没有必要,因为手机生产商通常会使用的硬件完全是在作坊里开发的,至少那些支持手机设备运转的部件是这么生产的。因此没有开源的可靠的软件包或解决方案能与他们的硬件交互。生产商想要保护他们的硬件商业机密,由于部分机密可以通过与设备上软件的对接获得,所以事实上,也是大部分情况下,他们完全利用特定的封闭软件来操作设备。这导致了要想开发手机软件,就必须熟悉的掌握软件所能运行的特定环境的相关知识。
其次,另一重要原因是手机开发让日常开发者遥不可及,能解决硬件生产商的“供需”困境。一直以来,手机功能无怪乎是接打电话,跟踪联系人,收发短信,而不像现在具有如瑞士军刀一样的多功能性。即使在2002年摄像手机也没有在普通消费者中普及。
1997年以前,像计算器和游戏(如俄罗斯方块)这样的小应用出现在了手机上,但主要的功能还是拨号,手机没有成为多用途、多功能的个人工具,当时也没人看到像现拥有的Internet浏览器、Mp3播放器和其他复杂的功能,可能1997年的生厂商认为没有必要为普通消费者提供全功能的设备,即使后来出现了这方面的需求,缺乏足够的内存和存储空间也是难以克服的障碍。越来越多的人需要全功能设备,但是生厂商依然未解决内存的难题。
说的简单一点就是,包括手机在内的任何设备,存储和运行应用程序都需要内存空间。手机设备直到当时也没有足够的空间运营额外的程序。知道近两年,内存的价格非常廉价,生产商能以很低的成本去扩展内存。在上世纪90年代中期,大部分手机的内存比pc机的内存更加标准化。因此,现在我们有需求,有内存,我们就可以开发更酷的手机应用,对吗?也不全如此。
设备制造商仍密切防范的运行在设备上的操作系统。虽然少数对运行在手机小环境上的基于java的应用开放了一些接口,但是大部分仍然不允许如此。即使是允许运行Java应用的系统也不允许访问标准桌面开发者能一惯有权限的核心系统。
2007年11月,当开放手机联盟中的Google发布Android时,应用程序开发的障碍就开始崩溃。开放手机联盟是软硬件开发商的组织,包括Google、NTT DoCoMo,Sprint Nextel和HTC,他们的目标是建立一个更加开放的手机环境。这个联盟发布的第一个产品就是移动设备操作系统,Android(如需了解开放手机联盟更详细的信息,请访问www.openhandsetalliance.com)。
随着Android的发布,Google制作了许多可用的开发工具与教程,以帮助可能使用该新系统的开发者。帮助文档,平台软件开发工具包(SDK),以及在Google的Android站点上可以找到的开发者社区:http://code.google.com/android。这个网站应该是你的起步点,我强烈建议你访问该网站。
然而运行在Linux、Windows甚至是PalmOS上的手机随处可见,但写这本书的时候,还没有硬件平台已声明能够运行在Android上。HTC、LG电子、Motorola和Samsung都是发布Android的开放手机联盟的成员。所以我们只能希望他们最近能有开发基于Android平台的设备的计划。从2007年11月份发布以来,系统本身还是处于纯软件测试。这对开发商来说是好事,因为它让我们对未来系统能进行少有的预览,并提供了开始开发那些一旦硬件发布就可以运行的应用程序的机会。
作为系统来讲,Android是基于java的运行在Linux2.6内核上的操作系统。该系统是轻量级的并且功能强大。图1-1展示了Android的主屏原貌。
图1-1 Android模拟器上看到的Android主屏
Android应用利用java开发,能够很容易地移植到新的平台。如果你还没有下载Java,或者不确定你需要哪个版本,我会在第二章中详细说明开发环境的安装。Android的其它特性包括,加速的3D图形引擎(基于硬件支持),采用SQLite的数据库支持和内置的web浏览器。
如果你熟悉Java编程,或者是任何种类的面向对象编程者,你都可能常常进行用户界面(UI)开发编程——也就是说,UI布局是在程序代码中进行处理。Android,在识别和允许UI开发编程的同时,也支持新的基于XML的UI布局。XML UI布局对于大部分桌面开发者来说是个相当新的概念。在本书的支持章节中,我会讲解XML UI布局和UI开发编程。
Android中更令人振奋和引人注目的特性是,由于它的架构特点,第三方应用——包括哪些“土生土长”的——和那些捆绑在核心系统上的应用一样,都以系统优先级被执行。这是和大部分系统的主要差异,大部分系统让嵌入到系统中的应用比第三方开发的应用拥有更高的执行优先级。并且,每个应用都利用轻量级的虚拟机,在自己独立的线程中执行。
除了非常慷慨的SDK和良好的可用于开发的库之外,对Android开发者来说,最令人振奋的特性是我们可以访问操作系统所能访问的任何接口。换句话说,你想开发一个拨号的应用,你可以访问手机的拨号器;如果你想创建的利用手机内置的GPS应用(如果配备了),你就可以访问它。开发者创建动态的有趣的应用程序的潜力现在敞开了。
Android所有可用的特性之最是,Google在里面加入了自己的非常诱人的特性。Android应用的开发者可以把他们的应用与Google的已知接口绑定,如Google地图和无处不在的Google搜索。假如你想编写一个根据来电所在地展示Google地图的应用,或者你想存储与你接触的常用的搜索结果,Android为你敞开了可行之门。
第二章就开始了你的Android开发之旅。你会交接如何和为何使用特定的开发环境或集成开发环境(IDE),你也将下载和安装Java IDE Eclipse。
专家答疑
问:Google和开放手机联盟有什么不同?
答:Google是开放手机联盟的一员,Google在收购了Android的原始开发商之后,在开放手机联盟发布了操作系统。
问:Android是否能够运行任何Linux软件?
答:不一定,虽然我相信任何开源系统都会有办法解决这个问题,然而使用Android SDK编译的应用需要在Android上运行。主要原因是Android应用以特定的格式执行文件;这将在后面的章节中进行讨论。