Android与iOS的对决

简介: Android的市场份额已经超过80%了,在这一背景下,创业公司永恒的问题“Android优先还是iOS优先”愈显棘手。不过也许经理们和非技术出身的创始人们不用操心这个问题,他们可以把这个烦心的问题交给开发者们!那开发者们是咋想的?很简单,谁能让他们更轻松,谁就能获得巨大的优势。

Android的市场份额已经超过80%了,在这一背景下,创业公司永恒的问题“Android优先还是iOS优先”愈显棘手。不过也许经理们和非技术出身的创始人们不用操心这个问题,他们可以把这个烦心的问题交给开发者们!那开发者们是咋想的?很简单,谁能让他们更轻松,谁就能获得巨大的优势。


Techcrunch的专栏作者Jon Evans,同时也是HappyFunCorp(是不是很羡慕这个咨询公司的名字?)的工程师,为了让自己不手生,Evans编写并开源了两个私人宠物项目。这是近乎一模一样的Android和iOS应用。Evans以这两个应用为例,比较了Android和iOS的差异


Evans之前编写了很多Android和iOS应用,有私人项目,也有工作项目。上面提到的两款应用都是原生应用,为Evans开发的新闻聚合器Scanvine编写。Scanvine可以识别出在社交媒体中分享得不同寻常之多的故事。两个应用的源代码放在Github上:( Android | iOS),可以通过Google PlayApp Store)安装。

开发环境

Evans赞扬了苹果的Xcode,“它让人开发起来很愉悦”。Xcode漂亮、快速、强大,帮人而非扰人。Xcode的调试工具运行平滑,模拟器反应很灵敏。


Android则让Evans很失望。目前Android最先进的IDE是用Android插件定制的Eclipse,很糟。迟钝、笨重、反直觉、布局糟糕、不必要的复杂,简直就是一团糟。调试工具也非常笨拙,迫使Evans在大部分时间通过日志进行调试,和XCode的调试工具有天壤之别。Android的模拟器也慢得很,要花几分钟才能启动,其中差不多有一半时间没法连接到Android Debug Bridge。


公平地说,Google也知道这是一个问题,他们正在着手制作一款新的IDE,叫做Android Studio。不过Android Studio目前仅仅提供先期预览版。很多功能不完整或者干脆没有。用户有时也会遇到错误。


优势:iOS甩了Android几条街。

配置

Evans指出,在Xcode和Objective-C漂亮、无缝的外表之下,隐藏着一堆麻烦:宏和头文件、项目、目标代码以及构建配置,等等。繁多的构建设置列表,令人困惑的链接器错误,让人绝望。时不时还会有些“惊喜”:“天,这个第三方代码居然不支持ARC?得加上-fno-objc-arc标记!”。


Android的配置文件只有一个,每当开发者保存一次文件,Eclipse就会构建一次应用。当然,在因配置授权不当而导致应用不工作时,错误消息少了点。不过这只是细节,总体来说,Android的应用配置简单且简洁。


优势:Android。

UX设计

Xcode的界面搭建器能非常迅速地将简单、漂亮的用户界面以一种非常赏心悦目地方式组织在一起。问题是,这又加了一层配置复杂度。对于简单应用而言,很好,但随着时间推移和应用发展,这些简单的东西会变得复杂、混乱。Evans也非常不喜欢苹果在大约一年前增加的多屏故事板。


理论上,Android有一个可比肩的可视化工具,不过这只是理论上而已。实际情况是,你需要编写提供布局指导的XML文件,以便让应用在多种设备的多种屏幕上渲染得很好。(苹果的自动布局也走这条路,应该是为未来出现的更多尺寸的iOS屏幕作准备)同时,Android提供了一个图标包供开发者们使用,而iOS开发者们则必须使用Icons8等第三方服务或自己制作。


总的来说,这方面的差距要比想象中的小。总体来说,两样东西让iOS占据优势:首先,Xcode要简单的多:只有三种屏幕尺寸(包括iPad)和两种屏幕密度,而不像Android一样复杂。其次,默认的iOS视觉元素,比如弹出目录和消息,看起来要比Android吸引人得多。


优势:iOS。

语言

Android应用使用Java编写,iOS应用则使用Objective-C。当然你也可使用其他工具,以便使用其他语言,比如Evans推荐的xamarin,还有PhoneGap之类。不过总的来说,原生Android应用使用Java编写,原生iOS应用使用Objective-C编写。


Evans起初觉得Objective-C非常啰嗦:比如语句


Strings2 = s1.replace(“abc”,”xyz”);


在Objective-C中变成了


objective-c NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];

不过后来Evans越來越喜欢Objective-C了。Objective-C比Java更整洁。Objective-C有block,Java没有。Objective-C有category,Java也没有。ObjC 不需要你把很多代码用一望无际的 try/catch 异常处理空行围起来; Java 需要.


Java也有其优势。比如更好的堆栈跟踪(stack trace),这让追踪零星的错误变得更容易。两年前,Android还有垃圾收集的巨大优势,但现在iOS有了ARC,这一优势就消失无踪了(尽管老的第三方工具通常不支持ARC,开发者必须进行一些XCode配置,才能关闭ARC)。考虑到iOS的这一进步,赢家就很明显了。

优势:iOS。

API

Android和iOS都向开发者们提供了庞大的软件库。从宏观上看,这些库都很相似:有针对手机功能、网络访问功能、包括强大的WebView在内的View对象的API。绝大部分工作都是由控制器完成:iOS的ViewController差不多就相当于一个Android Activity。


iOS有而Android没有的是一套额外的框架和功能,比如Android就没有iOS强大的Core Data框架的对应物,也没有iOS那样更整洁、更好的设计系统。比较这两个应用中起到相同作用的类,Evans在Android类上花的时间比在iOS类上花的时间要多。


至于代码行数。这两款应功能近乎一样,但iOS应用的自定义代码有1596行,包括头文件;而Android应用的Java代码和XML代码加起来有2109行,多了32%多。

优势:iOS。

网络

如今大部分应用都使用互联网API,而不是单独的程序;这点非常重要,值得拿出来单说。iOS和Android都为此提供了全套工具和API。它们都提供了非常相似的WebView,基本上就是功能齐全的浏览器,开发者可以在应用中任何地方插入。


网络连接基本上都是在后台运行,以便不堵塞主线程,不过多线程不好处理。Android提供AsyncTask类来做这类事,虽然很啰嗦,但效果很好,而且判断是否联网也很方便。iOS也提供类似的功能,可惜它们的表现相当低级,不能让人满意。


不过,有一堆开源库让生活变得轻松多了。Evans用的是AFNetworking,感觉非常好。只需在网络请求完成后将代码块传递给它就能运行,这在Android中根本不可能,因为Java没有block。


优势:原生Android有优势,但考虑到第三方库时iOS有优势。

分享

从应用中分享东西到Facebook、Twitter、Evernote等服务上有多容易?Evans曾经以为Android会完胜iOS。长期以来,Android就有一个名为Intents的强大的应用间通讯系统。总体上说,Android在应用间请求并分享数据上要好很多。


而在更广泛意义上的分享上,苹果领先很多。具体可以看Evans的项目中分享Scanvine故事的Android代码和iOS代码。


优势:都不够好。

碎片化

这一问题根本不用多说,答案当然是iOS胜出。值得注意的是,Google正进行一项有趣的去碎片化战略,也许很快这一点就需要重新探讨了。


优势:iOS。

发布

发布一款Android应用非常容易。只需要用一个方便的Eclipse向导来签名应用,你就会得到一个可以在任何设备上运行的APK文件。可以用电子邮件发送,可以传到网站上,当然也可以上传到Google Play中,你可以在一小时内向全世界提供你的应用。不能再简单一些了。省下来的时间你可以用来检查安装数据和崩溃报告,包括查找有问题的代码,并能立即上传修复错误的版本。


发布一款苹果应用则是噩梦。Evans建议留出至少一天的iOS开发时间来解决证书和发行档案问题。尽管最新版的XCode试图让这一过程变得更容易,但这始终是个很大的困扰。如果没有TestFlight,测试甚至会更糟。苹果的iTunes Connect网站比起Google Play开发者终端就像福特之于特斯拉。基本上你收不到苹果应用的崩溃报告,收到了里面也不会有什么有用的信息,你只能自求多福。你最终会为强大的苹果UX有多糟糕而深感震惊。


优势:Android领先很多。

那么赢家是?

iOS要领先很多。Android有其优势,但总的来说,编写好的iOS应用要比编写好的Android应用容易得多。加上iOS用户更有钱,更有影响力,大部分想要闯出名头的创业公司还是应该以iOS为先。新的Android Studio IDE也许会极大地缩短差距,但并不是全部。

相关文章
|
13天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
16天前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
59 2
|
3天前
|
安全 网络安全 Android开发
探索安卓与iOS的安全性差异:一场永无止境的较量
在移动操作系统的浩瀚星海中,安卓与iOS如同双子星般璀璨夺目,各自引领着一方天地。它们不仅在用户界面设计、应用生态和设备兼容性上各有千秋,更在安全性这一核心领域展开了激烈的较量。本文旨在深入剖析安卓与iOS在安全性方面的显著差异,通过对比分析,揭示两者在隐私保护、系统更新、权限管理以及恶意软件防御等方面的不同策略与实践。同时,我们也将展望未来,探讨这两大操作系统在安全性上的发展趋势,以及它们如何应对日益严峻的网络安全挑战。
|
2天前
|
物联网 vr&ar Android开发
掌握安卓与iOS应用开发:核心技术与未来趋势
本文深入探讨了安卓和iOS应用开发的核心技术,包括开发环境、主要编程语言、常用框架以及性能优化技巧。同时,文章还展望了两大平台未来的发展趋势,如人工智能、增强现实和物联网的集成,为开发者提供全面的技术参考和发展指引。
|
1天前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
|
1天前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
3天前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
|
5天前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性对比:哪个更适合企业环境?
在数字化时代,移动设备已成为企业日常运营不可或缺的一部分。选择合适的操作系统对于保障企业数据安全至关重要。本文深入分析了Android和iOS两大主流操作系统的安全性,从系统架构、安全功能、应用生态及更新频率四个维度进行全面比较,旨在为企业提供一个清晰的决策依据,帮助企业在Android的开放性与iOS的封闭性之间找到最适合自身需求的平衡点。
23 6
|
10天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
37 7
|
13天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。