当前位置:首 页 --> 行业资讯
Android VS iOS:孰将胜出?
发布时间:2011/1/20 22:02:00 来源:
在线咨询:
给我发消息
张代明 3003290139
给我发消息
姚红霞 3003214837
给我发消息
李湘宁 2850985550
13713728695

苹果(Apple)的iPhone(图1)使得触摸界面和小型应用程序成为一种生活方式。谷歌(Google)的Android紧随其后,在以摩托罗拉(Motorola)Droid(图2)为代表的日益增长的智能手机中提供相似的功能和性能。现在,Android已经得到了开放手机联盟(OHA)的支持。

 

 

《20101230_PD_EDA_OT_52》

 

苹果的iPad(图3)则进一步增加了取胜的把握(参见“Success Of iPad Is All About Software”)。iPad不是第一台平板电脑,但却是至今最成功的平板电脑(参见“With iPad Sales Soaring, Are Netbooks Dead?”)。

 

 

《20101230_PD_EDA_OT_52》

 

iPad的硬件与iPhone稍有不同(参见“Inside The Apple iPad”)。但底层软件允许应用程序既能在iPad也能在iPhone上运行。大多数用户从苹果的应用商店(App Store)获取iPad和iPhone的应用程序。

 

 

《20101230_PD_EDA_OT_52》

 

Android用户可以从Android Marketplace获得大部分应用程序。这些用户几乎无一例外地使用基于Android的智能手机,因为他们正是Android的初始目标用户。有许多公司正准备将Android应用到包括平板电脑的其它领域。基于Android的Archos 10平板电脑就是有望冲击市场的Android平板电脑(图4)之一。

 

 

《20101230_PD_EDA_OT_52》

 

iPhone、iPad和Android智能手机成功的关键是拥有第三方提供的大量应用程序。底层操作系统、编程构架和用户界面使得这些平台更加容易使用。另外,高分辨率触摸屏和低功耗、高性能多核处理平台提供了高度交互的触摸应用所需的响应性能。

 

一个典型的Android硬件平台(图5)包含有无数的接口,如果所有接口同时工作,那么连十年前的台式机都将甘拜下风。现在,三维加速计可以跟踪设备的动作,而照相机可以进行记录。编程框架的杂务程序(chore)可轻松实现这种硬件的编程,如今这些编程框架已经成为标准的软件组件。

 

 

《20101230_PD_EDA_OT_52》

触摸编程构架

 

众所周知,触摸界面只是苹果平台和Android平台上使用的编程构架的一部分。但它们从初始设计阶段就包含在架构内,不是外加到现有构架上去的。

 

苹果的iOS为苹果开发人员提供了操作系统(OS)和Cocoa-Touch构架。这种构架基于Mac OS的Cocoa应用编程接口(API),并采用模型-视图-控制器(MVC)架构。

 

SQLite是上述混合型系统的一部分,虽然系统中的Core Data存储中心也能用来存储信息。其它主要组件包括Core Data、Core Audio、OpenAL、Media Library和WebKit等。视频组件则包括Core Animation、OpenGL ES和Quartz 2D。

 

默认的编程语言是Objective-C,这是一种C语言的面向对象的扩展和超集。Objective-C与许多开发人员熟悉的C++有很大的差别。Objective-C使用Smalltalk类型消息传递,这使得转发消息成为可能。

 

苹果的软件开发套件(SDK)可以处理iPhone和iPad应用程序。它包含了许多工具,比如种用来创建应用程序用户界面的图形化编辑器Interface Builder。

 

Android软件构架(图6)运行在Linux和Dalvik Java虚拟机(JVM)之上。Dalvik源代码通过Apache许可证获得授权,由于改动不必像GPL(通用公共许可)那样需要公之于众,这种许可证更适合许多组织使用。Android应用程序由运行在Dalvik上的Java编写。

 

 

《20101230_PD_EDA_OT_52》

 

Dalvik是一种针对移动设备而优化的JVM。对于Davlik基于寄存器的方式(图7)是否优于基于堆栈的典型JVM一直存在很多争论,但如果要求使用Android的话它是一个合适的平台。

 

此外,Dalvik将一种虚拟方法应用于带有64k 32位寄存器的寄存器文件,虽然从执行角度看可能会用到一个小型子集。Java从根本上隐藏了内部实现,不过了解其内部细节仍是一件有趣的事。

 

Dalvik采用字节代码,但编码机制不同于Sun的Java规范。与许多基于寄存器的物理架构一样,Dalvik的指令编码可以根据所用的指令提供对有限数量寄存器的访问。

 

因此,简短的指令可以访问少量寄存器,但也能提供对更多寄存器的访问,代价是更长的指令或间接访问。理论上,映射到真实处理器的Dalvik指令要比基于堆栈的方式更加高效。

 

Sun一直存在一个区分Java是语言还是平台的问题。像J2SE(Java 2标准版)和J2EE(J2企业版)等Java版本定义了库的构架。在某种意义上,Android与这些版本有可比性,虽然Android改变的不仅仅是相关的库。

 

例如,Android使用DEX文件而非JAR文件。从功能上看,两者同样地定义了Java类,甚至可以在两种格式之间转换文件。不过,两者的差异限制了这种转换的质量。单独的类可以修改,但通常应用程序依赖于大量基础库,这使得应用程序在平台之间的移植变得相当困难。

 

Android本质上定义了一整套应用程序可以引用的内核和标准库。但Android设计工程师不需要从头开始使用所有库。事实上,标准已经为许多库提供了基础。

 

例如,2D图形是自定义的,但3D图形基于OpenGL ES 1.0规范,这使得硬件加速更容易实现。同样,SQLite提供结构化的数据存储。熟悉SQL的开发人员会发现Android用起来非常舒服。

 

集成的浏览器是基于开源WebKit引擎。另外,多媒体功能支持通用的音视频和静止图像格式,如H.264、MP3、MPEG4、AAC、AMR、GIF、PNG和JPG。

 

Android拥有一套丰富的通信库。这些库能够支持经常需要融合Wi-Fi、蓝牙、GSM、EDGE和 3G功能的通话和网络连接。其它库则能够应对数码相机、GPS、加速计和罗盘等硬件设备需求。

 

Android是一种多任务构架。每个进程在通过一个Linux进程实现的虚拟机上运行。此外,刚开始使用Android的开发人员需要理解如何使用和创建activity、intent、service、content provider和broadcast receiver。activity描述了应用程序的可视界面。应用程序可能会提供一个以上的activity。

 

intent是一种用于激活activity的异步消息。intent还能启动service和broadcast receiver。intent过滤器用来实现intent与特定对象的匹配。

 

大多数intent过滤器在用于定义应用程序的AndroidManifest.xml文件中声明。与activity不同,service没有可视界面,它在后台运行,执行类似音频回放等操作。

 

应用程序可能包含任意数量的broadcast receiver,这些broadcast receiver被设计用于接收像状态变化消息之类的intent。例如,应用程序可能有一个检测低电池电压状态的broadcast receiver。与service一样,broadcast receiver没有用户界面(UI),但它能启动一个activity。

 

content provider用于处理应用程序的数据存储。content provider可能使用SQLite来实现存储,也可能采用其它存储机制,甚至可以通过网络连接与远程数据库协作。应用程序利用content resolver对象与content provider进行交互。content resolver可以与任何content provider协作。

 

与大多数应用程序在其它平台上(如苹果的Mac OS和微软的Windows等)拥有相关资源一样,Android应用程序也拥有与应用相关的资源。这些资源可以是应用程序能够使用的数据,如图像甚至文本。开发工具可以对这些资源进行操作,从而能在不修改代码的情况下进行应用程序的定制。

 

Android可以自动处理许多操作。当其它应用需要时能启动某个应用程序。开发人员需要理解所有这些组件的工作和交互原理以便创建Android应用程序。

 

嵌入式Android

 

苹果的解决方案包括提供硬件和软件,这对于想要为iPad或iPhone编写应用程序的开发人员来说不是坏事,但对于那些想要构建嵌入式连网设备的公司来说却没什么帮助。Android不受底层硬件的限制,这也正是Android能够用于智能手机和平板电脑以外的领域的原因。

 

一部分挑战在于确定Android的定位,以及在保留有用的基础架构和外设支持的同时,能够实现多少种不同形式。例如,GPS定位在移动设备中非常有用,但在位置固定的设备中却用处不大。这两种设备可以共享公共的显示器和触摸界面,随着开关和按键移植到平板显示器和触摸界面上,这个问题显得非常重要。

 

当然,嵌入式开发人员知道天下没有免费的午餐。针对特定硬件平台进行Android定制要比面向新硬件的典型板级支持包(BSP)复杂得多。

 

明导资讯(Mentor Graphics)和风河(Wind River)等软件供应商可以帮助开发人员用Android开发新的硬件平台。这方面的支持很重要,因为成功的Android支持涵盖了硬件以及系统和应用程序开发使用的工具套件。

 

明导公司的Mentor Embedded ReadyStart平台不仅提供系统支持,还提供了工具集和集成的软件。除了Android服务外,明导公司还提供面向Android的Inflexion UI,这种UI有助于实现3D效果和快速UI开发。针对Eclipse的Inflexion插件能够自动产生Android activity和构架类源代码。

 

面向Android的ARM平台一直非常流行,虽然这并非一种必需资源。ARM推出的Android解决方案中心(SCA)是一种中央网络资源,它凸显了ARM/Android社群关系。

 

MIPS科技公司也不甘落后,发布了面向MIPS平台的Android源代码。MIPS架构实际上与Dalvik虚拟机工作得非常融洽。借助与SysDSoft联合开发的首个面向Android的LTE协议栈等成果,MIPS公司将Android性能发挥到了极致。MIPS还为MIPS32平台上的Android提供对称多处理(SMP)支持,以及图形硬件加速知识产权(IP)。

 

其它替代技术

 

苹果的iOS和谷歌的Android只是移动领域众多平台中的两种。虽然苹果电视是另一种采用苹果技术的消费产品,但iOS基本上不可能用于非苹果平台。

 

Android有可能对基于Linux的MeeCo和微软Windows Phone 7平台(参见“Microsoft Starts Over With Windows Phone 7”)造成冲击。微软Windows Phone 7是一种智能手机平台,但这种平台上也能见到Android智能手机的身影。

 

微软平台具有一个同样在其高端系统上使用的类似构架,包括使用.NET构架。Windows Phone 7增加了对触摸界面的支持,但它无需创建新的显示支持。

 

同样,对于LINQ(语言级集成询问)的支持等功能也是现有Windows构架的一部分。微软的各种Windows版本同样瞄准了智能手机和平板电脑以外的应用领域。

 

MeeGo是另一种让人感兴趣的技术,Android可能会在像机顶盒和智能电视这样的非智能手机嵌入式应用中碰到这种技术。开源和基于Linux的MeeGo最初是针对Intel的Atom处理器开发的,但其构架更通用。由于支持Linux的平台种类十分广泛,MeeGo有可能在其中某些目标平台中流行起来。MeeGo的目标应用涵盖从上网本到车载娱乐设施甚至多媒体手机及联网电视。

 

在所有这些平台中,MeeGo似乎是最传统的。它的架构中包含与Android等其它平台上所使用的类似服务,包括通信服务、互联网服务、可视服务、媒体服务和数据管理支持等(图7)。

 

 

《20101230_PD_EDA_OT_52》

 

在某种意义上,MeeGo使应用程序更加接近硬件。应用程序可以用针对Linux的任何语言编写。这些特性既是优点,同样也是缺点。

 

MeeGo将许多补丁加入标准Linux平台。在内核、Linux核心功能和X Windows显示子系统等领域都有这些补丁的身影。

 

MeeGo的成果包括大量项目,如MeeGo多媒体、MeeGo蓝牙、MeeGo蜂窝和MeeGo安全构架。甚至有一个能满足开发者对工具及用途要求的MeeGo Developer Tools项目。

 

理论上,针对MeeGo的应用程序发布服务(相当于苹果AppStore和Android Market Place的MeeGo软件)其目标是特定的实现。MeeGo本身仅限用于x86微处理器,因此大多数用户可能有选择和安装应用程序的类似用户体验。很多Linux OS供应商(如风河)都支持MeeGo。

 

与微软的Windows Phone 7一样,MeeGo对于熟练掌握Linux和Windows的开发人员来说可能会感觉更熟悉。它们的工具集是相同的,微小的差别主要与一些专门针对目标环境的库或服务有关。让我们期待在平板电脑上能看到它们。

 

起诉还是竞争

 

虽然苹果公司的硬件和软件都是自己开发的,但这也没能使其免遭外部的合法攻击。同样,由于Oracle、谷歌和微软等业界巨头在法庭内外斗得不亦乐乎,Android仍处于动荡的状态。

 

Oracle非常反感谷歌的Dalvik实现,并且正在就Java提起诉讼。显然,使用完全不同的JVM、运行时和类系统是不够的。Android使用了Java语言,但仅限于语法和语义。

 

律师不可能平息对这些平台的质疑。幸运的是,平台的普及取决于功能和可用性,而不是其能否胜诉。

 

Android和iOS之争的赢家最终是用户。开发人员必须根据具体应用、市场以及与架构无关的大量其它问题进行选择。

 

这两种平台有很大的差异,因此撰写一个通用规范将很困难,限制因素很多,但底层构架显然将使这样的任务更容易实现。

 
    您可能对以下产品感兴趣  
产品型号 功能介绍 兼容型号 封装形式 工作电压 备注
 
深圳市永阜康科技有限公司 粤ICP备17113496号 服务热线:0755-82863877 手机:13242913995