App跨平台开发方案与取舍

App跨平台开发方案与抉择

内心强大才敢于承认错误,但是首先你要敢于去试错。


现在做客户端开发的公司都会面临一个巨大的问题,那么就是跨平台。对于目前上市面上的移动设备来说。AndroidiOS、WindowsPhone、BlackBattery等等移动设备系统,让我们在开发适配上都很头痛。

但是由于Google与Apple公司的竞争,现在创业公司主要关注的就只有是Android和IOS应用程序了。但是,就这两个系统的设备就够我们折腾了。从系统版本适配、屏幕适配等等。

朋友的创业公司,对于开发一个简单的App,Android客户端请了2位同学。IOS客户端请了2位同学。按照帝都这个物价,就单客户端的开发工程师,每个月就得拿出7W块钱养着他们。

而相应的测试,接口,UI出图都得做一个double的工作。那么我们平时工作开发中为什么不选择一些跨平台的开发手段呢?


目前的App跨平台解决方案

这里,我说一下我的总结和思考。总的来说,现在的跨平台方案一共分为一下几种:

  1. 基于Html5的网页App方案。
  2. 使用第三方语言进行映射的方案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方案
性能 一般 一般
用户体验
人才招聘 一般 较为容易 一般
开发工作量 工作量大 一般 工作量大

阅读更多

没有更多推荐了,返回首页