App跨平台开发方案与抉择
内心强大才敢于承认错误,但是首先你要敢于去试错。
现在做客户端开发的公司都会面临一个巨大的问题,那么就是跨平台。对于目前上市面上的移动设备来说。Android、IOS、WindowsPhone、BlackBattery等等移动设备系统,让我们在开发适配上都很头痛。
但是由于Google与Apple公司的竞争,现在创业公司主要关注的就只有是Android和IOS应用程序了。但是,就这两个系统的设备就够我们折腾了。从系统版本适配、屏幕适配等等。
朋友的创业公司,对于开发一个简单的App,Android客户端请了2位同学。IOS客户端请了2位同学。按照帝都这个物价,就单客户端的开发工程师,每个月就得拿出7W块钱养着他们。
而相应的测试,接口,UI出图都得做一个double的工作。那么我们平时工作开发中为什么不选择一些跨平台的开发手段呢?
目前的App跨平台解决方案
这里,我说一下我的总结和思考。总的来说,现在的跨平台方案一共分为一下几种:
- 基于Html5的网页App方案。
- 使用第三方语言进行映射的方案 3.
基于浏览器Webview的跨平台
基于WebView的跨平台解决方案相信大家已经很熟悉了,而使用Web开发对于一个Web开发工程师也是一个轻而一举的事情。
HTML5方案的主要不足则在于功能和性能方面,这主要是因为HTML5应用的能力严重依赖于系统自带的Web引擎:iOS的UIWebview、Android的Webview等,此类组件的HTML5能力相比Safari for iOS、Chrome for Android都要差一截。
而且,对于原生系统的新能优化,如垃圾回收机制、ListView的复用机制等等,系统级别的优化,对于使用WebView来实现的逻辑,往往很难做到。
另外在Android平台上,由于系统碎片化比较严重,不同Android版本的Webview的HTML5能力也有较大差异,导致相应的HTML5应用一致性难以保证。
当时,目前还是存在业界的几家公司提供的解决方案如下:
React.js
Fackbook的开源框架,相对于其他的JS框架来说,react js提出了一个极为重要的概念。那就是 Virtual DOM。
在Web开发中,我们总需要将变化的数据实时反应到UI上,这时就需要对DOM进行操作。而复杂或频繁的DOM操作通常是性能瓶颈产生的原因(如何进行高性能的复杂DOM操作通常是衡量一个前端开发人员技能的重要指标)。React为此引入了虚拟DOM(Virtual DOM)的机制:在浏览器端用Javascript实现了一套DOM API。
JqueryMobile
jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。现在类似的框架还有:jQTouch、 Sencha Touch 等等。
对于FE来说,JQuery无疑是一个极为好用的js框架。多数开发者使用JQuery Mobile的主要原因是由于,熟悉JQuery,能够上手快。
PhoneGap/Cordova/AppCan/…
这类的框架,或者具体说已改算一个整套解决方案。他们是通过针对js的封装,向web开发者,提供给一些原生功能的API。通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
这些厂商往往还将它们做成了一整套的解决方案。API/在线编译/编译器/等。这些规则制定的厂商都不是一线的大公司,作为小公司而言,这些工具就变得商业目的特别浓厚。
基于交叉编译的跨平台
我们都知道,无论事IOS系统还是Android系统。他们的底层运行的都是以Unix为核心的系统,而且都对C/C++支持性良好。这就让我们能够通过使用底层的方案,配合OPEN GL来实现自己的App系统架构。
Cocos2dX/CrossApp
Cocos2d不用多说,在圈子内的名气非常大。是一个著名的跨平台游戏引擎,多是用作开发游戏。当年最著名的扑鱼达人,就是使用了Cocos2d-X作为游戏引擎开发。Cocos2D基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。
毕竟Cocos2d是游戏引擎,很多开发方式上与开发应用程序都不一样。所以国内就有另一个开源项目,CrossApp。
CrossApp是抽取了cocos2d-x的渲染驱动模式。若直接使用游戏引擎,程序生命周期中,在不断重绘,渲染驱动模式的缺点就是CPU占用高因此耗电。显而易见,这种不断的重绘方式对于游戏可能影响不大,但对于APP来说太浪费了。因此,我们针对应用程序的特性,将渲染机制改为事件驱动模式。这种模式的渲染要有外界触发才会重绘,在没有外界触发的时候画面静止,渲染停止,以达到节能的效果。
Xamarin
Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。Xamarin的产品简化了针对多种平台的应用开发,包括iOS、Android、Windows Phone和Mac App。Xamarin由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者——C#与·NET框架的开源、跨平台实现。
结论
跨平台的开发发难问题在于,功能基本实现不是完美实现。同一套代码要兼顾不同平台,很多实现就变成折中实现了,原本一些很优秀的平台特性为了兼顾另一个平台用不了。
Facebook之前还打算用html5来进行移动开发,开发了半年发现坑太多了,还是转成ios的native开发。
Fackbook准备退出的React Native框架号称是能够良好的解决移动端跨平台开发的难题,现在还没有开源,我们可以拭目以待。
Hybrid开发混合App
就是混合开发的App。Andorid+Html5 or IOS + Html5。理论上来说,混合开发的App算不上跨平台开发(我们可以简单的认为,就是使用原生的开发)。那么问题是,既然两者都有好处,那么我们就将一些体验、操作、权限要求不高的页面,使用Web来开发。其他的地方,我们还是使用原生的SDK进行研发。(转了一个大圈,完全没有跨平台,发现然并卵)
成本分析
当然,是否使用一些开源的跨平台框架,制作跨平台的App应用程序,还取决于我们的公司业务范围和自己公司的技术人才积累。下面,笔者简单的总结了一下又如下几点原因,让大家在选择方向与平台的时候做一个良好的抉择。如下表:
原因\方案 | 原生App(Android + IOS) | Web跨平台方案 | 交叉编译跨平台方案 | 混合App方案 |
---|---|---|---|---|
性能 | 优 | 一般 | 一般 | 优 |
用户体验 | 优 | 差 | 优 | 优 |
人才招聘 | 一般 | 较为容易 | 难 | 一般 |
开发工作量 | 工作量大 | 少 | 一般 | 工作量大 |
/*
* @author zhoushengtao(周圣韬)
* @since 2015年9月10日 下午 18:10:00
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流学习QQ群:341989536
* @私人QQ:445914891
/