移动应用开发技术选择六要素
文 / 李亮
作者从平台环境、操作系统、设备能力、云端、应用类型、跨平台开发六大方面分享了其在移动应用开发中的技术选择经验。
这是一个新的时代、新的机会。自从2007 年1月乔布斯揭开iPhone的面纱以来,移动时代的大潮滚滚向前,已经走过近5个年头。这个产业正在从新生走向成熟阶段。在这样的产业时代背景下,各种不同的系统平台,不同的技术路线,自然是层出不穷、迅猛发展。对于每一个投身于移动行业的软件开发者而言,充分地了解和掌握各个平台的发展状态,搞清楚各种开发技术与方向的优劣,是关系到产品与自身发展的头等大事。
平台选择
从2007年到现在,涌现出了不少面向移动设备的操作系统平台。先不论原先已存在的Symbian和Windows Mobile系统,新的系统就有苹果的iOS、Google的Android、Palm/HP的WebOS、Nokia的Maemo/MeeGo、三星的bada,以及RIM新的基于QNX的PlayBook Tablet OS。
一个真正占有市场的平台才能吸引更多开发者为其开发更多应用,更多应用又能反过来替平台争取更多用户,从而促进平台的进一步发展。正是由于平台与应用之间相辅相成的关系,使得平台的选择成为开发者首要关注的重点。
对于开发者而言,一个移动平台的意义,并不只是一个操作系统而已,它还包括了与之相联系的整个生态环境。平台的市场占有率直接决定了应用能够被多少消费者使用,平台本身又能带给开发者多少回报。这些都是在平台选择中必须考虑到的问题。
无疑,iOS和Android是目前占有市场份额最大的两个平台。这两个平台不但用户众多,拥有的开发者数量、应用数量和下载量也都远远高于其他平台。一些数据可以反映这种情况: 在今年最新的北美地区智能手机市场份额调查中, Android及其定制版占有了58.67% 的市场份额,iPhone占有14.67%,Symbian占有14.33%,BlackBerry占有9.2%,bada占有3.33%,而Windows Phone仅占有1.67%的份额。
作为一个平台,iOS有以下几大特点:第一,iOS是一个相当一致的系统。目前苹果仅有三种运行iOS的设备:iPhone、iPad和Apple TV。从API方面来说,这三种设备的不同代产品各自的设备属性都相当固定,而各自的操作系统版本也都保持一致,这对开发者来说是一件极其方便的事情;第二,iOS系统本身具备了相当良好的,内建流畅的用户交互实现。就算是一个照着教科书中规中矩写出来的iOS程序,其用户体验也会不会差;第三,苹果提供了一个非常良好的iOS程序开发环境。只有很少的功能是模拟器无法模拟而必须在真机上进行调试测试的;最后,苹果本身的品牌也是一个相当有影响力的支持。
另一个主要的平台就是Android。得益于Google对Android的开放(不向厂商收取授权费), 以及大大小小各种厂商的机海战术,Android手机的占有量已经是第一位了。因此,选择了Android平台就意味着选择了最大的用户群体。另外,Android本身源码的开放性,对于一些需要利用底层实现细节的开发者来说,是个很好的特性。而且从开发本身来说,Android 所采用的开发语言和环境, 相对来说比iOS 的门槛要低,这是它的优势所在。但也正是因为Android的开放,造成了市场上Android设备的规格特性各不相同,增加了应用开发中机型适配所带来的大量开发和测试工作。
除了iOS和Android这两大巨头之外,Microsoft的Windows Phone 7从去年开始也大张旗鼓地开始发力。在WP7平台上,Microsoft仍然扮演着系统提供商的角色, 硬件生产仍然是各个厂商的事。但Microsoft为了保证用户体验的一致性,对设备的指标作了非常严格的规定。因此,目前WP7还没有机型适配的问题。在新的移动市场上,Microsoft显然来晚了一步, 成为占有比较小的市场份额的竞争者,这一点远远比不上iOS和Android。 另外,WP7提供了专有的Metro UI界面形式,展现了跟iOS和Android都截然不同的风貌,这对其是有益的。从开发本身来说,Microsoft为WP7开发者提供的工具有比较大的限制。除了 Silverlight和XNA之外就没有别的支持了。很多非Web Based的、非游戏类应用无法在现有的平台上进行开发。这不能不说是一个弱点。
三者之外,除了BlackBerry在北美地区的占有率较高以外,别的平台都只占有少少的一点份额。BlackBerry的系统,已是一个落后整个产业十余年的东西,BlackBerry赖以生存的基础是集成到系统中的push mail机制,而不是它的系统本身是先进还是落后。Symbian则是连Nokia自己都放弃的东西,不会对现在的开发者有多大的吸引力。webOS生不逢时,空有良好的用户体验和很有特色的开发方式,却最终被HP所抛弃。三星的bada则仿佛是其自身的一亩三分地,只在wave系列中推出。
从市场占有率来看, 开发者首选的平台无疑是iOS和Android了。除了已占有的市场份额,以及目前所能看到的发展前景之外, 对开发者来说,还有一点非常重要:这个平台对开发者的回报如何,对于开发者的支持如何。在这一点上目前苹果比Google做得好。各种调查统计数据表明,在iOS平台上的开发者收入要高于Android平台。另外,苹果对从设备到应用的严格控制虽然为人诟病,但也无可非议地为应用开发者创建了一个单一而良好的环境。反过来,Google的开放政策变成了不管不问政策,由于没有审查机制,导致Android Market里有很多质量低劣的应用,甚至是恶意应用。官方的Android Market尚且如此,各种第三方的商店市场就更不用说了。
当然,在做平台选择时,可能还会有一些其他因素存在。比如在iOS上,应用无法读取用户的短信记录,也不能在不通知用户的情况下发送短信或者拨打电话。对于有这样需求的应用(我们姑且先不谈是否恶意或者侵犯隐私)就只能在Android上开发了。因此,对于平台的选择,市场占有量、生态环境的优劣、以及平台是否能提供所需要的具体功是几个比较重要的考虑因素。
技术路线的选择
操作系统
首先考虑的是操作系统。操作系统是开发应用的基础,操作系统的能力提供也限制了开发的应用程序的能力。其实,在选择平台的部分,我们已考虑到了操作系统。因为现在的平台本身,就是以设备,运行在其上的操作系统, 以及围绕着应用开发和用户建立起来的一个生态环境组成的。在设备厂商的设备差异努力被操作系统隐藏起来,运营商慢慢沦为纯粹的数据带宽提供商的今天,我们通常都已经直接把操作系统的名称用作平台的名称了。不过,在选择平台时,我们会更多地考虑到宏观因素,而做具体的技术选择时,就要多考虑一些具体的技术因素。
系统是否支持多任务。支持多任务意味着可以编写运行在后台的服务程序,可以在不干扰或者不通知用户的情况下做一些工作。目前,iOS系统只支持一些有限的多任务,而Android则对此不加限制。所以,如果有很强烈的多任务需求的应用, Android会是一个更好的选择。
操作系统本身对应用能做的事情有什么样的限制。相对来说,iOS对应用的限制较大,应用程序运行在一个单独的沙盒中,不能读写任何其他应用的数据,只能访问很少一部分系统允许应用访问的数据。而Android限制较少,绝大部分系统数据都能访问。
安全性和隐私。应用能访问的系统数据越多,所能获得的用户信息也就越多,用户的隐私和数据安全就越难以得到保障。从这个角度看,iOS 显然更优势。
使用同一系统的不同设备之间的差异。这是一个跟操作系统和具体设备都相关的重要因素是。差异越大,应用开发中需要对不同设备作不同处理的地方就越多。iOS一致的设备指标使开发者不用在这方面花什么心思。反观Android,设备的差异非常大,从屏幕分辨率大小到有无键盘,从电阻屏还是电容屏到有没有浮点处理器,每一款都有其自身特色和不同之处。这样就使得应用开发者需要对大部分不同的设备都作测试才能发布到市场上,很多时候还需要针对不同的设备编写不同代码。说得再远一些,那些基于Android开放的源代码修改出来的系统,往往会给开发者造成很大的困扰。
平台之争仍在继续,期待新平台的崛起
设备能力
在技术路线选择中,设备本身的能力也是重要因素。设备本身的能力包括了设备自身的计算能力,即CPU的性能,以及是否具有浮点处理器等;图形能力,是否具有图形处理器加速、GPU是否支持OpenGL、支持哪个版本等。这些功能对于计算密集型和图形密集型的应用,比如3D游戏, 是极端重要的。从更细节的角度来讲,CPU支持什么样的指令集,对于比如视频解码这样的应用来说,都是十分重要的因素。设备本身的能力还包括交互部分,即屏幕大小、分辨率、是否具有硬键盘等。屏幕大小直接决定了屏幕上能显示能操作内容的多少。一个为手机设计的UI在平板上会显得很丑陋,而一个为Galaxy Note设计的UI在QVGA上根本都没法看。而硬键盘的存在与否,不但跟系统本身相关,跟应用程序本身也相关。在一个有硬键盘的手机上,就有更多空间来显示内。而Android下的输入法,对硬键盘的输入处理跟屏幕软键盘的处理就完全不同。移动设备上所附带的各种传感器或数据采集设备,也是跟应用的技术路线息息相关的。目前很多应用都依赖于GPS、摄像头这些附件。
云端
云端,即服务器端。在这个移动+互联的时代里,完全脱离云端的应用越来越少,而社交网络的兴起加上移动对社交的天然亲和性,使移动应用对服务器端的依赖度更高了。从跟服务器端的交互来看,需要考虑的技术有四个方面。首先,需要云端提供什么样的服务。这是最基本的一点,无须多说。其次,移动端以什么样的方式从云端取得数据并数据发送到云端。是采用通用的协议还是私有协议,数据是否需要加密等问题。再次,移动端与云端之间的通信需要多少带宽。是否在现有的2G/3G网络条件下能够得到满足,抑或必须使用Wi-Fi。移动端与云端之间的通信是必须长时间保持还是可以断续进行。移动应用的网络环境会比桌面复杂得多,网络带宽会比较快而频繁,并且会经常在有网络连接与无网络连接的情况下转换。最后,还需要考虑一个问题是自己搭建服务端还是直接利用现有的公开服务。自己搭建服务端能够更好地与自己的移动应用进行配合,能够自行定义把哪些计算放到服务端进行,但需要在服务端的软硬件上投入与维护。而利用现有的服务则比较省事,代价是移动端需要做更多的工作,有些功能会难以做到。
原生应用还是Web应用
大部分面向互联网服务的移动应用都会面临这样一个问题:是开发一个移动设备上的原生应用,还是直接开发一个适应于移动设备上浏览器的 Web 应用?这两种形式各有利弊。原生应用的优势在于能够充分利用设备的能力,达到比较好的表现效果和更加平滑的用户体验。有一些能力是Web应用所无法做到的,比如需要用到加速度测量仪的应用,需要用到摄像头的应用,这些只有原生应用才能做到。另外,原生应用的好处在于即使没有网络连接,很多本地功能都可以继续使用,而在有网络连接的情况下,把一部分功能由原生应用来实现,还能大大节省流量,并提高应用程序的响应速度。
Web应用的优势在于,开发者不需要具备专门的移动平台开发知识,并且能够随时对问题进行修正和发布新版本,能够更快地让用户体验更新,符合目前流行的先发布再慢慢改的风气。这两者中,一方的优势恰恰就是另一方的劣势。针对不同类型的应用程序以及开发人员的具体状况, 需要有具体的判断。这两者的优缺点都同样明显,因此将长期共存下去,共同繁荣,不存在一方消灭另一方的可能。
跨平台
随着各种不同的系统出现,也出现了不少立足于跨平台的解决方案。本来在PC上最强大的跨平台方案Flash在被苹果拒之门外后,由于其本身在移动平台上性能和电池消耗方面的不足,最后退出了市场。但新兴的以HTML 5为口号的新一代跨平台方案纷纷出现,其中最著名的是PhoneGap。这类以HTML 5为旗帜的跨平台方案内容都很类似:开发者利用HTML 5/CSS/JavaScript编写应用,编写的应用经过本地的一个定制过的浏览器中间层运行。这些应用都还是原生应用而非Web应用, 只不过以开发Web应用的形式进行开发而已。这样的框架,通过对本地浏览器框架的定制,将设备的特殊能力封装成能够被JavaScript访问的系统对象,从而能够充分利设备的能力。这样的跨平台方案有很明显的优势:开发一套东西运行于各个移动平台,平台间的差异由框架解决;不需要学习各平台各自的语言和API,只需要会用HTML 5/CSS/JavaScript开发即可,降低了开发成本。
不过,我们也能很清楚地看到它的劣势:中间的运行适配层有相当大的运行开销,性能与原生代码相比有较大损失;因为需要带入定制的浏览器框架, 最终生成的独立应用体积相对比较大, 需要使用更多的资源。20世纪80年代以来,无数人有着跨平台梦想,从桌面到服务器到移动设备,都希望一套东西包打天下。可惜到现在这还只是美好的愿望而已。我个人认为,这世上没有一统江湖的可能,跨平台对于一些应用或者对于某些开发者来说是个利器,但它并不能成为统治者。
李亮,程序员,iCosta for iPhone以及Rockplayer for Android的主力开发者之一。有20余年软件开发经验,从嵌入式系统到企业级开发均有研究。目前致力于移动计算与云计算方向。
本文选自《程序员》杂志2012年01期,更多精彩内容敬请关注01期杂志