2013-11-18 11:24:22 来源:TechCrunch
对于许多创业者来说,选择Android还是iOS永远是一个棘手的问题。最近,有数据显示Android 的市场份额已经突破80%。可能有不少人会觉得因此开发者在两个平台之间的选择就更加容易,毕竟市场决定利润。但事实上并不一定如此。软件工程师、TechCrunch专栏作者Jon Evans从开发环境、配置、UX设计、语言、API、网络、分享、碎片化、发布等九个方面把Android和iOS平台做一次PK。
开发环境
许多人会用纯文本或者命令行写代码,但利用一个集成开发环境或者IDE显然更加有效率。
苹果的开发环境是Xcode,具有运行速度快、功能强大且安全性高不易被入侵等特点。且随着不断完善优化,Xcode诡异的编译机制以及强加给开发者的那些有关iOS应用程序对设备控制权的复杂证书机制也逐渐被开发者所忽略。且Xcode的调试器能够无缝完美调试Bug,模拟器的响应速度也非常快。
再回头来看看Android。目前最先进的IDE是利用Android插件定制的Eclipse,非常糟糕。运行缓慢、笨拙等缺点显而易见,Android碎片化也带来了不必要的复杂性。调试器非常糙,大部分时间让开发者自己在日志文件中除错,而Xcode则提供了除错工具。而模拟器,往往需要几分钟时间才能够启动,还常常会连接不上Android Debug Bridge。
谷歌也已经发现了问题,现在他们准备推出一个新的Android Studio IDE:
Android Studio目前为试用版本。仍有不少功能不完整或尚未实现,所以您可能会遇到一些未知的错误信息。如果您不愿意使用一个未完成的产品,您可以下载(或继续)使用ADT Bundle(通过ADT插件定制的Eclipse)。
能够看到谷歌开始努力听起来是不错的,但,不知道猴年马月才能完整的实现。
结论:显然,iOS胜出。
配置
正如前面写到的,在Xcode与Objective-C的完美搭配之下,隐藏着令人恐怖的编译机制。开发者需要面对宏、头文件、项目、计划以及构建配置等一大串构建配置的列表。当遇到一个莫名其妙的连接器错误时,是不是有人会彻底绝望,虽然提示里写着:“噢,你的第三方代码不支持ARC,添加 –fno-objc-arc 标志即可解决!很简单不是吗?”
Android则相对简单的的,它有一个单独的manifest文件,当开发者保存任何文件时,Eclipse通常会在整个系统中构建一次应用。当然,在权限没有配置正确导致应用程序不能运行的情况下,要是能够给出更明确的提示就好了。总体来说,Android应用的配置相对简单容易。
结论:Android胜出
用户体验设计
在这一项对比中,相信大多人都认为觉得苹果是胜者。Interface Builder是Mac OS X平台下用于设计和测试用户界面(GUI)的应用程序。虽然Mac OS X下所有的用户界面元素都可以使用代码直接生成;但IB能够使开发者简单快捷的开发出符合Mac OS X human-interface guidelines的GUI。通常开发者只需要通过简单的拖拽(drag-n-drop)操作来构建GUI就可以了。IB使用Nib文件储存GUI资源,同时适用于Cocoa和Carbon程序。在需要的时候,Nib文件可以被快速地载入内存。
理论上将,Android平台也有一个具有可比性的可视化工具,但还是不提了吧。Android平台上应用的开发将会面对各式各样不同的屏幕尺寸,这是它不可忽视的问题。当然,iOS设备的尺寸也在逐渐多样化,iOS平台未来也一定会面临一样的问题。当然,Android也向开发者提供了icon包帮助开发者更加容易的完成UX设计。不过,iOS开发者也可以利用一些第三方的icon包,比如Icons8。
在这项对比上,iOS尤其特殊的优势。首先,屏幕种类相对更加简单,只有三种(iPad、iPad mini及iPhone)尺寸和两种分辨率;其次是其默认的iOS视觉元素如弹出式菜单和消息,比Android的视觉效果更有吸引力。
结论:iOS更胜一筹
语言
Android是利用Java;iOS利用Objective-C。当然,也有例外,如Xamarin。相比Java,Objective-C显得较为啰嗦,比如,在Java中的这句定义字符串的语句:
String s2 = s1.replace(“abc”,”xyz”);
到Objective-C中变成了:
NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];
但用Objective-C时间久了就会发现比Java更好更干净。Objective-C有代码块,Java没有;它有类别(categories),Java没有。Objective-C不需要开发者去用try/catch进行异常处理,Java需要。
当然,Java有其自己的优点。比如更好的堆栈追踪,这意味着追踪零星的错误更加容易。在几年前,Android在垃圾回收机制上一直有巨大的优势。而现在,iOS平台上有了自动引用计数,Android的优势也渐渐消失了。
结论:iOS的Objective-C胜出
API
Android和iOS都给自己的开发者提供了巨大的软件库,广义上讲,这些库基本类似:提供手机功能及特点的API、提供网络访问功能、提供包括功能强大的WebView(基本上可以实现一个完整浏览器的功能)在内的全套视图对象。最重要的是同时还提供控制器,基本上iOS ViewController与Android Acticity十分类似。
iOS提供了一组Android不具备的框架和特性——比如,没有一款Android系统能够提供媲美iOS Core Data framework的框架或其它特性。并且,iOS比Android更加干净,有着更好的设计。
另一个指标(有争议):代码行数。对于拥有相近功能的某个应用来说,iOS平台上通常利用1596行代码就可实现,包括头文件,而对于Android上的Java代码及XML,则需要2109行,多了32%。
结论:iOS更优
网络通信实现
现在大多数应用都采用互联网API,iOS和Android都提供了一整套工具和API帮助开发者实现这样的功能,都提供了非常类似的WebView——基本上相当于一个浏览器窗口,开发者可以将其插入到应用程序的任何位置。
网络连接基本上都是在后台运行的,所以一般不会阻塞应用的主线程,多线程难度比较大。Android提供了一个AsyncTask类来解决类似的问题,虽然有些冗长,但效果很好。Android另外还提供了一个简单的方法来判断用户是否在线。iOS也提供了差不多的东西,但相比之下显得低级,令人并不是那么满意。
不过,也有一些开源库能够帮助开发者更好的实现iOS上的网络通信功能,比如AFNetworking。不过这个在Android上实现不了,因为Java不支持代码块。
结论:不考虑第三方库的情况下,Android有优势,而iOS在第三方库上具有优势。
分享
从应用中分享内容到社交网络上到底有多容易?原以为这是Android的一大利器,因为Android很早之前就有了一个功能强大的应用内通信系统Intents。通常情况下,Android仍然能够比较方便的实现应用之间的数据分享。
而在分享上,iOS已经基本追赶上Android了。这个大家可以自己判断下,GitHub上有两份有关分享Scanvine故事的源代码:Android版、iOS版。iOS代码比较长一点,因为我在其中加了一些Google Analytics代码。
结论:旗鼓相当
碎片化问题
这点的对比就无需多言了,Android的碎片化问题一直饱受诟病。但值得注意的是,谷歌正在着手进行碎片化整理工作,值得期待一下。
结论:显而易见,Android的问题严重
应用发布
Android平台应用的发布非常简单,只需要通过一个简单的Eclipse引导签署你的应用,然后开发者就能拥有一个可以在任何Android平台运行的APK文件。然后开发者可以将这个APK文件发布到各种平台上进行推广,用户安装即可。如果应用在使用中出现了问题,出现代码错误,开发者也能马上上传修复的版本供用户下载。
而在iOS平台上发布一款应用简直就是一场噩梦。单在创建证书及Distribution Profiles环节,不少开发者就需要花费一天的时间来搞定。而测试工作,如果不是有TestFlight这样的应用,绝对是难以描述的糟糕。
结论:Android大胜
综合来看,iOS比Android更有优势。虽然Android有自己的一些优势,但显然开发一款优秀的iOS应用比开发一款Android应用更加容易。除自身因素之外,iOS用户人群相对高端(富裕、甚至可能有影响力),所以大部分开发者会选择iOS平台作为应用开发的第一平台。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。