“Android开发”和“iOS开发”实力大碰撞

2022-04-20 00:09:54宗松仪
导读 大家好,我是本期栏目编辑小友,现在为大家讲解“Android开发”和“iOS开发”实力大碰撞问题。 对于很多创业者来说,选择安卓还是iOS一直是

大家好,我是本期栏目编辑小友,现在为大家讲解“Android开发”和“iOS开发”实力大碰撞问题。

对于很多创业者来说,选择安卓还是iOS一直是个棘手的问题。最近有数据显示,安卓的市场份额已经超过了80%。很多人可能会认为开发者在两个平台之间选择更容易。毕竟市场决定利润。但事实未必如此。软件工程师、TechCrunch专栏作家Jon Evans从开发环境、配置、UX设计、语言、API、网络、共享、碎片化、发布九个方面对安卓和iOS平台进行了PK。

开发环境

许多人会用纯文本或命令行编写代码,但使用集成开发环境或IDE显然更有效。

苹果的开发环境是Xcode,具有运行速度快、功能强大、安全性高、不易被入侵的特点。并且随着不断的改进和优化,Xcode奇怪的编译机制和强加给开发者的关于iOS应用对设备的控制的复杂证书机制逐渐被开发者所忽视。Xcode的调试器可以无缝完美地调试bug,模拟器的响应速度也非常快。

回头看看安卓。目前最先进的IDE是安卓插件定制的Eclipse,非常糟糕。运行缓慢、笨拙等缺点显而易见,安卓的碎片化也带来了不必要的复杂性。调试器很粗糙。大多数情况下,开发人员可以自己在日志文件中进行调试,而Xcode提供了调试工具。不过模拟器启动往往需要几分钟,而且往往无法连接到安卓Debug Bridge。

谷歌也发现了这个问题,现在他们准备推出一款新的安卓Studio IDE:

安卓工作室目前是试用版。还有很多未完成或未实现的功能,可能会遇到一些未知的错误信息。如果不想使用未完成的产品,可以下载(或者继续使用)ADT Bundle(通过ADT插件定制Eclipse)。看到谷歌开始努力,听起来不错,但不知道猴年马月能不能完全实现。

结论:很明显,iOS赢了。

部署

如前所述,在Xcode和ObjecTIve-C的完美结合下,有一个可怕的编译机制。开发人员需要面对大量的构建配置,例如宏、头文件、项目、计划和构建配置。遇到莫名其妙的连接器错误,会不会有人彻底绝望,虽然提示说:“哦,你的第三方代码不支持ARC,可以通过添加FNO-objc-ARC标志来解决!很简单,不是吗?”

安卓相对简单。它有一个单独的清单文件。当开发人员保存任何文件时,Eclipse通常会在整个系统中构建一个应用程序。当然,如果权限配置不正确,应用程序无法运行,给出更清晰的提示就好了。总的来说,安卓应用的配置相对简单易行。

结论:安卓胜出。

用户体验设计

在这个对比中,相信大多数人都认为苹果是赢家。界面构建器是在苹果OS X平台下设计和测试用户界面的应用程序。虽然Mac OS X下的所有用户界面元素都可以直接通过代码生成;然而,IB使开发人员能够轻松快速地开发符合MAC OS X人机界面指南的图形用户界面。一般来说,开发人员只需要通过简单的拖放操作来构建图形用户界面。使用ibnib文件存储GUI资源,适用于Cocoa和Carbon程序。需要时,可以将Nib文件快速加载到内存中。

理论上安卓平台也有相当的可视化工具,但不提也罢。安卓平台上的应用开发会面临各种屏幕尺寸,这是一个不容忽视的问题。当然,iOS设备的尺寸逐渐多元化,未来iOS平台肯定也会面临同样的问题。当然,安卓也为开发者提供图标包,帮助他们更轻松地完成UX设计。不过,iOS开发者也可以利用一些第三方图标包,比如Icons8。

在这个对比中,iOS有着特殊的优势。首先,屏幕类型相对简单,只有三种尺寸(iPad、iPad mini和iPhone)和两种分辨率;其次,它默认的iOS视觉元素如弹出菜单和消息比安卓视觉效果更有吸引力。

结论:iOS更好。

语言

安卓使用Java;使用iOS ObjecTIve-C当然也有例外,比如Xamarin。与Java相比,ObjecTIve-C更为冗长,例如,这个用Java定义字符串的语句:

字符串s2=s1.replace("abc "," XYZ ");

在ObjecTIve-C中,它变成:

NSString * S2=[S1 stringByReplacingOccurrencesOfString:@ " ABC "承受住了:@ " XYZ "];

但是如果你长期使用Objective-C,你会发现它比j好。

ava更好更干净。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平台作为应用开发的第一平台。

免责声明:本文由用户上传,如有侵权请联系删除!