当今的人们可以无处不在,无时无刻地享受互联网所带来的便利。承载这些便利的智能化手机平台也日趋成熟。在这个竞争激烈,硝烟四起的领域,iPhone一直以简单实用来又酷劲十足的特点来吸引消费者,从而占据一席之地。而Android作为一个年纪轻轻而前途未卜的新兴平台,却已经向世人展示了它非凡的潜力和巨大的生命力。
他们共同的特点各自都有一个强大的软件商店,上面有来自全世界的开发者为iPhone和Android开发的数万种乃至十万种软件,甚至可以说 iPhone和Android已经成为一个新兴的软件出版和流通平台。近期太平洋企业频道将对其上较有代表性的一些软件和开发者的故事逐一介绍,敬请关注。本文先对iPhone和Android的开发平台和开发环境作一个铺垫性的介绍。
iPhone OS
iPhone OS平台的建立使用了与创建Mac OS X操作系统一样的技术,很多开发工具和技术都是来源于Mac OS X的。但是尽管这些工具与Mac OS X极为相似,但是iPhone OS的应用程序开发者并不需要具备Mac OS X的开发经验。iPhone软件开发工具包(SDK)将会为开发者提供其所需要的一切。下面将会一一介绍。
iPhone OS是一个在iPhone和iPod触屏设备上运行的操作系统。该操作系统在管理设备硬件的同时,也提供在移动电话上实现本机应用程序的基本技术。根据是安装在iPhone还是iPod Touch上,这个操作系统会相应地植入一些特定的服务应用程序,如电话,邮件,Safari浏览器等,来为用户提供标准的系统服务。
iPhone OS是iPhone手机和iPod触屏设备的核心
1. iPhone OS的体系结构
iPhone OS体系结构与Mac OS X的基础架构极其类似。在iPhone OS体系的上层,它充当了iPhone和iPod Touch硬件设备同在电话屏幕上显示的应用程序之间的媒介,如下图所示。开发者自己创建的应用程序不会直接与硬件进行交互,而是与相对应的驱动器进行连接。这样的做法可以消除开发者应用程序在不经意间改变了底层的硬件设备的危险。
iPhone OS上的应用分层
iPhone OS使用一个极其直观的软件栈。在这个堆栈的底层是Mach内核和一些硬件驱动器,以此来管理所有程序的执行。凌驾于这一层之上其他层则是包括开发者用于开发所必须的核心技术和接口。尽管iPhone OS在内核和驱动级没有任何接口,但是它在软件栈的更上层却为开发者设置了许多技术接口。
2. iPhone OS软件栈
iPhone OS技术的实现过程可以划分为多个层次,如下图所示。这个系统的底层是所有应用程序的支柱——基础服务。上层则包含了很多精密的服务和技术。
iPhone OS软件栈
当开发者在编写他们自己的代码时,必须尽可能地使用上层框架而不是底层框架。上层框架为底层结构提供面向对象的抽象。这种抽象通常能简化代码的编写工作。它可以大大地减少代码的编写量以及压缩一些潜在的复杂性能,比如插口和线程。但是,尽管上层框架把底层技术都抽象化了,并不是表示这些技术将会被隐藏起来。底层框架依然还是适用于那些需要涉及那些不存在于上层框架中的模块的开发者的。
1) Cocoa Touch层
Cocoa Touch是iPhone OS最重要的一层。它为开发者提供了实现应用程序所必须的基础设施的关键框架。
在Cocoa Touch层,很多技术都是使用Objective-C语言实现的。这一层的框架为开发者的应用程序提供基础设施。这些基础框架主要是提供面向对象的支持,如文件管理,网络操作等。Uikit框架为应用程序提供可视化的基础设施,其中包括窗口类,视图类和控制类以及管理这些对象的控制器。除此之外,这一层的其他框架(如Push Notification服务,地址簿用户界面,App Email,Map Kit等)帮助开发者访问用户联系人信息,图片信息以及加速器和设备其他硬件的特性。
2) Media层
Media层是由多种图表,音频,视频技术连接而成的,为移动设备营造最好的多媒体用户体验。更重要的是,这些技术都是针对降低开发者创建应用程序的工作量而设计的。iPhone OS的这一层框架令优质图表的创建变得更加简单,同时也加快了动画制作的进程。
这一层所包含的技术能够支持2D和3D绘图,音频模式和视频模式,涵盖了以C语言为基础的技术(OpenGL ES, Quartz和Core Audio)。同时还具有Core Animation——一项先进的用Objective-C实现的动画引擎。
3) Core Service层
Core Service为所有应用程序提供基本的系统服务。也许开发者并不需要直接使用这些服务,但是系统的许多模块都是在其之上建立起来的。这一层包含了 iPhone OS的基本接口,主要用于文件访问,底层数据类型的设定,Bonjour服务,网络接口等。这些接口大部分是基于C语言实现的——Core Foundation, SQLite和XML支持等。
4) Core OS层
Core OS层包含了内核环境,驱动器和底层UNIX接口。其中,内核是基于Mach操作系统的,负责操作系统的所有作业。它管理虚拟内存系统,网络和进程间的通信。驱动器则为可用的硬件设备和系统框架提供接口。这些接口也与Core Service层一样,都是用C语言来实现的。
3. iPhone SDK
iPhone SDK包含了开发,安装和运行客户机本机应用程序的所有工具以及界面。本机应用程序是使用iPhone OS系统架构和Objective-C程序语言设计的,它们可以在iPhone OS上直接运行。不像Web应用程序,本机应用程序是直接安装于设备上。因此,它的运行并不需要依赖于网络连接。它们与系统的其他应用程序毗邻而居。而且这些应用程序和所有的用户数据都可以通过iTunes与用户的计算机保持同步。
Apple将大部分的系统接口都收集在一个叫做框架(framework)的程序包中。一个framework包含了一个动态共享库以及支持该库的一些资源(如头文件,图片,帮助程序等)。使用 framework,应用程序开发人员可以将它内联到开发工程内,从而使其得以访问framework的特性,并指导开发工具去哪里查找头文件和 framework的其他资源。
除了framework,Apple还在它的标准共享库(Standard Shared Libraries)中提供其他技术。因为iPhone OS是基于UNIX的,所以构成操作系统的底层架构的技术都属于开源代码技术。这些技术的接口就储存在标准库以及接口目录中。
iPhone SDK
用户在iPhone设备上可以运行两种客户端应用程序:网络应用程序和本机应用程序。网络应用程序使用HTML,CSS和Javascript代码来实现与网络服务器的交互,并在互联网上进行传输,在Safari网络浏览器上进行显示。本机应用程序,换句话说死直接安装在设备上的,它们的运行并不需要网络的链接。 iPhone SDK只支持创建那些显示在设备主屏幕上的本机前端应用程序。它不能创建驱动程序,后端应用程序,框架和动态库。如果开发人员想在自己的应用程序中整合进框架或者动态库,则必须在创建工程时,将这些代码静态地与应用程序的可执行文件相互连接。
4. 开发工具
为iPhone OS设计应用程序,开发人员需要一台Mac OS X计算机来运行Xcode工具。Xcode是Apple提供的一款设计工具,可以进行工程管理,代码编辑,建立可执行文件,源代码级调试,源代码库管理,性能调整等一系列操作。在这套开发工具中,Xcode应用程序是核心,它提供了基本的源代码开发环境。但是它却不是唯一的工具,下面将对开发iPhone OS软件所需用到的关键应用程序做一介绍。
1) Xcode
Xcode是最关键,最基本的开发工具。它是一个集成开发环境(IDE),为开发者创建和管理iPhone工程和源文件提供所需的工具,并能够生成可执行文件,可在iPhone模拟器或者正式设备上运行和调试。
Xcode的工程窗口
设计一个新的iPhone应用程序时,必须现在Xcode上创建一个新的工程。工程是用来管理与应用程序相关的所有信息,包括源文件,生成设置和将所有组建集成起来的方法。每一个Xcode工程最主要的是工程窗口,如下图所示。这个窗口提供为该工程里所有关键组件提供快速访问操作。在组列表和文件列表中,开发者可以管理工程所需的文件(源文件和目标文件)。工具条则罗列了一些常用的工具和命令符。详细信息窗口方便开发者在设计的过程中随时改变配置信息。工程窗口的其他部分则为开发者提供了设计工程的背景资料。
在Xcode中运行工程
2) 界面生成器(Interface Builder)
界面生成器是开发者用来为应用程序组装用户可视化界面的工具。使用界面生成器,开发者可以向应用程序窗口拖放预先配置好的组件。这些组件包括了基本的系统控制单元,如开关,文本和按钮等,并用自定义视图来代替应用程序提供的视图。在开发者将组件拖入窗口后,可以拖动它们,随意改变它们的位置,配置它们的属性,并为这些对象和应用程序代码间创建映射关系。如果界面设计的工作完成了,可以将其保存为一个nib文件(一种自定义资源文件模式)。
使用Interface Builder设计用户可视化界面
这个nib文件保存了UIKit在应用程序运行时重新创建对象所需要的所有信息。UIKit会先将nib文件载入,并为其所保存的所有对象创建一个可执行的版本,按照在Interface Builder中配置的方式配置它们。它同样会依照开发者在应用程序中指定的新对象与原有对象之间相互连接的方式进行两者间的互联。这种连接不但为代码提供了指向nib文件中对象的指针,而且还提供了用户操作与应用程序之间相互通讯的信息。
总的来说,使用Interface Builder可以为用户界面的创建节省很多时间。由于Interface Builder是一个可视化的编辑器,开发者可以在运行时查看用户界面的情况,所以消除了创建用户界面的代码编写,配置和布局的工作,直观方便。
3) Instruments and Shark
一个具有世界水平的iPhone应用程序必须提供一流的用户体验。这需要有最佳的用户界面和最好的性能。iPhone提供的开发工具中还包括了强大的优化和分析工具——Instruments and Shark——来帮助开发者追踪iPhone应用程序的性能瓶颈。Instruments在iPhone与计算机远程连接时,实时地收集诸如磁盘,内存和 CPU使用情况等信息。这些信息会随着追踪时间的推移,形成一个可视化的图表。方便开发者定位故障区域,深入定位到出错的代码行。当需要最快运行速度时,Shark使开发者可以在极小的时间间隔中对数据进行抽样。
这些工具能够保证开发者设计出来的应用程序具有最华丽的用户界面,同时也令他们得到最满意的用户体验。
Instruments and Shark
介绍了这么多iPhone开发的内容,现在可以转入Android的介绍了。
Android
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。
1. Android平台
随着Android功能广度的加深,很容易将Android与桌面操作系统相混淆。Android是一个建立于Linux内核之上的分层环境,并且它包含了非常丰富的功能。其用户界面子系统包括了:窗口,视图和编辑框、列表、下拉列表等的显示部件。Android包括了一个建立在WebKit上面的嵌入式浏览器,与iPhone移动Safari浏览器相同的开源浏览器引擎。
Android拥有一系列健全的连接选项,如WiFi,蓝牙和与GPRS,EDGE和3G等的无线连接。Android应用程序一项广受欢迎的技术是它能与Google地图连接,在一个特定的应用程序中直接显示地址。支持基于位置的服务(像GPS)和照相功能。
移动应用程序的设计在图表/多媒体以及数据存储方式这两大块领域上一直都在努力追逐着桌面应用程序的步伐。Android战胜了内置支持2D和3D 图像的挑战。而在数据存储方面,也相应地减轻了负担。因为Adroid平台集成了流行的开源SQLite数据库。下图简单地显示了Android的软件层。
Android软件层
2. Android应用程序的体系架构
如前面所提及的,Android是在Linux内核上运行的。所以Android应用程序使用Java语言编写,并在一台虚拟机上运作。值得注意的是,这台虚拟机不是Java虚拟机,而是Dalvik虚拟机——一种开源技术。每个Android应用程序都是Dalvik虚拟机的一个实例,反过来驻留在 Linux内核管理进程中,如下图所示。
Dalvik虚拟机
一个Android应用程序一般会包括下面一个或者多个分类:
1) 活动(Activities)
一个带有可视化用户界面的应用程序通常都是通过一个活动来实现的。当用户在主屏幕或者应用程序启动器上选择了一个应用程序,那么一个活动就被激活。
2) 服务(Services)
服务是指那些需要长期运行的应用程序,如网络监控或者更新检测应用程序。
3) 内容提供者(Content Providers)
可以将Content Providers想象成为一个数据库服务器。一个Content Providers的工作室管理数据的存储,比如一个SQLite数据库。如果应用程序很简单,那么开发者也许就不需要开设一个Content Providers。但是如果应用程序很巨大或者其功能是使数据可用于多线程活动或者应用,那么一个Content Providers就是访问数据的工具。
4) 广播接收机(Broadcast Receivers)
一个Android应用程序也许会被用来处理进程中的数据元素,或者相应一个事件,比如文本消息的接收。一个Android应用程序通常会连同一个名为 AndroidManifest.xml的文件一起被配置进一个设备中。这个AndroidManifest.xml文件包含了正确安装该应用程序的所有配置信息。具体内容有类名和应用程序能够处理的事件的类型以及应用程序运行时所需的权限。打个比方,如果一个应用程序需要连接网络来下载个文件,这个操作的权限必须明确记载在清单文件中。这种声明性的安全措施有助于减少恶性软件对用户设备的伤害。
3. Android SDK和开发工具
开发Android应用程序最简单的方法就是下载Android软件开发工具包(SDK)和Eclipse IDE。Android应用程序可以在Microsoft Windows,Mac OS X或者Linux应用程序上进行开发。
Android应用程序是使用Java程序语言进行编写的,但却在一台非Java虚拟机——Dalvik虚拟机上进行编译和执行。在Eclipse中编写Java语言是非常直观的。Eclipse提供了一个丰富的Java环境,包括上下文帮助和代码提示。一旦应用程序编译通过,Android开发工具就能确保无误地对该应用程序进行打包,包括AndroidManifest.xml文件。
Android SDK是以压缩包的形式存放在开发者的硬盘驱动上的。其包括:
1) android.jar
Java归档文件包括了开发应用程序所需的Android SDK的所有类。
2) documention.html和docs目录
SDK文档大部分都是JavaDocs形式,这样可以令用户更加容易导航SDK中的程序包。该文件还含有一份高级开发指南和与Android社区的连接。
3) 样本目录(Samples directory)
样本子目录中包含了各种各样常用应用程序完整的源代码,譬如ApiDemo,演示了很多APIs。实例应用程序大大地减轻开发者的工作量。
4) 工具目录(Tools directory)
包含了构建Android应用程序所需的全部命令行工具。最常用以及最有用的工具是adb utility(Andriod调试桥,Android Debug Bridge)。
adb utility支持多种可选的命令行参数,提供强大的功能,如从设备中复制文件。Shell命令行参数令开发者可以直接与手机连接,执行基本的shell命令。下图显示了通过Shell命令来对一台用USB接口连接到Windows笔记本的真实机器进行操作。
使用adb shell命令行
在这个shell应用环境中,开发者可以:
显示网络配置:里面有多个网络连接。注意到不同的网络连接显示的不同:lo是本地连接或本地环回连接;tiwlan0是WiFi与本地DHCP服务器提供的地址之间的连接。
显示了PATH环境变量的内容。
执行su命令,成为高级用户。
把目录更改为/data/app。概目录是用于存放用户应用程序的。
发出一条Ping命令,查看Google.com是否可用。
在这个命令提示符环境中还可以与SQLite数据库进行互动,打开程序和进行其他系统级任务。
5) usb_driver
该目录包含了连接开发环境与Android设备(G1或者Android Dev1锁定开发手机)的必须驱动。这些文件只适用于那些在Windows平台上开发程序的开发人员。
设计好的Android应用程序可以在一台真实的设备上运行,或者在Andriod SDK集成的Andriod模拟器上运行。 Android SDK开发环境和Andriod模拟器
总结
iPhone和Android都是从互联网出身,其运营公司对于互联网的共享精神有着更深入的了解,所以都可以在智能化手机平台这场大战中有所作为。但是苹果掌控价值链的姿态太过强势,很可能会妨碍其进一步壮大,并重蹈当年Mac电脑大败于IBM兼容PC的覆辙。Google的Android则因为推出太晚,硬件厂商的产品支撑不足,未来走势还不明朗。但是技术发展所带来的变化总是出人意料的,市场强弱的转化往往也在转瞬之间。现在就定夺谁是谁非,还为时过早,还是让我们拭目以待吧。