mg游戏

新闻详(xiang)情

传统跨平台开发方式都有哪些优势与不足

跨(kua)平台(tai)开发,如今提起这个词,大家(jia)脑(nao)海里首(shou)先闪过(guo)的(de)可能(neng)是(shi)React Native或Weex,微(wei)信小程序(xu)从某(mou)种(zhong)意义(yi)上(shang)也能(neng)算一(yi)个。不过(guo)在它们之前,还有着多种(zhong)跨(kua)平台(tai)开发方(fang)案,忽视它们是(shi)不对的(de),这篇文章就带我们来回顾一(yi)下这些方(fang)案的(de)优势和不足(zu)。


文(wen)章要(yao)点

  1. 如今的跨平台(tai)工具实(shi)现;

  2. 流行的跨(kua)平(ping)台系统概览(lan);

  3. 如何以(yi)及在何处能够从跨平台开(kai)发中收益;

  4. 跨平(ping)台应用的常见陷阱与不足之处;

  5. 不同(tong)跨平台方式的对(dui)比。


世界已(yi)经(jing)进入移(yi)动(dong)(dong)的(de)(de)时(shi)代。对于任(ren)何组织来说,不(bu)管组织大小,移(yi)动(dong)(dong)应用都(dou)已(yi)经(jing)成为一(yi)(yi)项“必备”的(de)(de)元(yuan)素。毫无(wu)疑问,有些组织可以只关(guan)注一(yi)(yi)个(ge)移(yi)动(dong)(dong)操作系(xi)(xi)(xi)统(OS,operating system),不(bu)用关(guan)心其他的(de)(de)操作系(xi)(xi)(xi)统,但是众多的(de)(de)业务组织需要关(guan)注无(wu)数的(de)(de)移(yi)动(dong)(dong)设备,它(ta)们有着各种各样的(de)(de)操作系(xi)(xi)(xi)统。只有一(yi)(yi)个(ge)移(yi)动(dong)(dong)App就能(neng)让我们满意的(de)(de)时(shi)代已(yi)经(jing)一(yi)(yi)去(qu)不(bu)复返了。如今,很重要的(de)(de)一(yi)(yi)点就是移(yi)动(dong)(dong)应用必须要支持Android系(xi)(xi)(xi)列、iPads、Windows Phone、Amazon Kindle、Tabs以及BlackBerry等等。


对于应(ying)用开发人(ren)员来说,最(zui)大的(de)挑战就(jiu)在于要(yao)在原(yuan)生移动(dong)应(ying)用和跨平(ping)台技术之间(jian)做出选择。当(dang)然,作为业务(wu)人(ren)员,你需(xu)要(yao)处(chu)理不同类型(xing)的(de)客户,他们会拥有各种类型(xing)的(de)设备。因(yin)此,你需(xu)要(yao)有一个移动(dong)应(ying)用,它(ta)能(neng)够在几乎所有的(de)平(ping)台上无(wu)缝运行(也就(jiu)是Android、iOS、Windows等)。


什么是(shi)跨平(ping)台的应用?


在理想的(de)场景下(xia),跨平台应用(yong)能够基(ji)于一(yi)个(ge)代(dai)码库运行于多(duo)种操作(zuo)系(xi)统。有(you)两种类(lei)型的(de)跨平台应用(yong):


  1. 原生跨(kua)平台应用(yong)

  2. 混合(he)(hybrid)HTML 5跨(kua)平台应(ying)用(yong)


原生(sheng)跨平台应用(yong)


每个(ge)主要的(de)(de)移动操作系统都有(you)自(zi)己的(de)(de)SDK(软(ruan)件开发工(gong)具集),用来(lai)创(chuang)建移动应用。这些(xie)SDK也有(you)自(zi)己所偏爱的(de)(de)编(bian)程(cheng)语(yu)言(yan)(yan),这些(xie)语(yu)言(yan)(yan)是(shi)由OS厂(chang)商所支持的(de)(de)。例(li)如(ru),对于iOS来(lai)说,Objective-C和(he)Swift是(shi)苹果所钟(zhong)爱的(de)(de)编(bian)程(cheng)语(yu)言(yan)(yan),而(er)对于Android来(lai)说,Java是(shi)Google所钟(zhong)爱的(de)(de)编(bian)程(cheng)语(yu)言(yan)(yan)。通常(chang)来(lai)讲,这些(xie)语(yu)言(yan)(yan)所创(chuang)建应用会(hui)用到官方的(de)(de)SDK,被(bei)称为“原生(sheng)应用”。


但是,在OS厂(chang)(chang)商不支持的(de)语言中,我们依然(ran)有可(ke)能(neng)使用(yong)(yong)原(yuan)生(sheng)SDK所提(ti)供(gong)的(de)API(应(ying)用(yong)(yong)编程接口)。这(zhei)也就是“跨(kua)平(ping)台”应(ying)用(yong)(yong)能(neng)够(gou)得以实现(xian)的(de)原(yuan)理。一(yi)(yi)般而言,第三方(fang)厂(chang)(chang)商会选择一(yi)(yi)种(zhong)编程语言,并在各(ge)种(zhong)厂(chang)(chang)商提(ti)供(gong)的(de)原(yuan)生(sheng)SDK之(zhi)上创建一(yi)(yi)个(ge)统(tong)一(yi)(yi)的(de)API。借助(zhu)这(zhei)个(ge)统(tong)一(yi)(yi)的(de)API,同一(yi)(yi)份代码库就有可(ke)能(neng)支持多种(zhong)操作系(xi)统(tong)。第三方(fang)厂(chang)(chang)商通常会提(ti)供(gong)一(yi)(yi)个(ge)IDE(集成(cheng)开发(fa)环(huan)境),基于同一(yi)(yi)份跨(kua)平(ping)台的(de)开发(fa)库,能(neng)够(gou)创建出针对iOS和Android的(de)包,这(zhei)个(ge)IDE会协助(zhu)处理这(zhei)一(yi)(yi)过程。


因(yin)为最终生成的(de)应用(yong)依然会使用(yong)原生API,所(suo)以跨平台原生应用(yong)能够达到接近原生的(de)性(xing)能,用(yong)户不会感(gan)觉(jue)到有任何的(de)延迟。


该技术实现(xian)的现(xian)状


如今,创建跨平台的原生(sheng)应用(yong)尽(jin)管是(shi)可行(xing)的,但是(shi)当前的实现(xian)状况离完成还差的很远(yuan)。大(da)多(duo)数移(yi)动(dong)应用(yong)的重心都是(shi)GUI(图形化用(yong)户界(jie)面)的实现(xian)。几乎所有的关键(jian)业务应用(yong)逻辑(ji)都位于服(fu)务端,移(yi)动(dong)端会通过Web服(fu)务访问服(fu)务端的业务逻辑(ji)。


因为iOS和Android在(zai)用(yong)户(hu)界面(User Interface,UI)和用(yong)户(hu)体验设(she)(she)计(ji)(ji)(User Experience Design,UXD)上有着很(hen)(hen)大(da)的(de)(de)(de)(de)(de)(de)(de)差(cha)异,所以为其创建一(yi)个(ge)统(tong)一(yi)的(de)(de)(de)(de)(de)(de)(de)GUI包装器并不是(shi)一(yi)项(xiang)简单(dan)的(de)(de)(de)(de)(de)(de)(de)任务。尽管(guan)Xamarin和其他的(de)(de)(de)(de)(de)(de)(de)厂商(shang)在(zai)这方面已经做了(le)很(hen)(hen)多超(chao)前的(de)(de)(de)(de)(de)(de)(de)工作,但是(shi)离完美还(hai)差(cha)得很(hen)(hen)远。如(ru)果(guo)你(ni)能够在(zai)框(kuang)架(jia)的(de)(de)(de)(de)(de)(de)(de)限制(zhi)下(xia)设(she)(she)计(ji)(ji)应用(yong)的(de)(de)(de)(de)(de)(de)(de)话,那么它能运行良好,如(ru)果(guo)你(ni)所需(xu)要(yao)(yao)(yao)的(de)(de)(de)(de)(de)(de)(de)内容不匹(pi)配框(kuang)架(jia)的(de)(de)(de)(de)(de)(de)(de)愿(yuan)景(jing)的(de)(de)(de)(de)(de)(de)(de)话,那么就(jiu)需(xu)要(yao)(yao)(yao)很(hen)(hen)多额(e)外(wai)的(de)(de)(de)(de)(de)(de)(de)工作,并且要(yao)(yao)(yao)编(bian)写平台(tai)相关的(de)(de)(de)(de)(de)(de)(de)代码(ma)。举个(ge)例子(zi)来说,在(zai)Xamarin Forms中,如(ru)果(guo)你(ni)的(de)(de)(de)(de)(de)(de)(de)设(she)(she)计(ji)(ji)师(shi)要(yao)(yao)(yao)为文本域设(she)(she)置一(yi)个(ge)自定(ding)义颜色的(de)(de)(de)(de)(de)(de)(de)边框(kuang),那么就(jiu)需(xu)要(yao)(yao)(yao)很(hen)(hen)多额(e)外(wai)的(de)(de)(de)(de)(de)(de)(de)工作。对(dui)于设(she)(she)计(ji)(ji)师(shi)来说,这不算什么大(da)事儿,但是(shi)在(zai)实现(xian)这项(xiang)设(she)(she)计(ji)(ji)时,编(bian)程团队需(xu)要(yao)(yao)(yao)花费很(hen)(hen)大(da)的(de)(de)(de)(de)(de)(de)(de)努力才能完成(cheng)这样一(yi)个(ge)看起来很(hen)(hen)简单(dan)的(de)(de)(de)(de)(de)(de)(de)设(she)(she)计(ji)(ji)。在(zai)Xamarin Forms Labs项(xiang)目下(xia),Xamarin正在(zai)非常努力地提供更加高级(ji)的(de)(de)(de)(de)(de)(de)(de)跨平台(tai)UI组件(jian)。但是(shi)该项(xiang)目的(de)(de)(de)(de)(de)(de)(de)很(hen)(hen)多组件(jian)依然处(chu)于beta状(zhuang)态。


在原生跨(kua)平台开(kai)发(fa)中,一种很流行的方式就是使用跨(kua)平台库(ku)来(lai)编写(xie)业务逻辑(ji)和(he)Web服务,而GUI相关的代(dai)码(ma)使用平台特定的库(ku)来(lai)编写(xie)。根据应用的不(bu)同,这样能够实现30%到60%的代(dai)码(ma)重用。


流行的原(yuan)生跨平(ping)台框架


Xamarin:位于(yu)(yu)加利(li)福尼(ni)亚的(de)软(ruan)件公司(si),目(mu)前得到了微(wei)软(ruan)的(de)支持(chi)(chi),成立于(yu)(yu)2011年。Xamarin使用C#作(zuo)为(wei)跨平(ping)台开发的(de)主要语言(yan),C#是一种静态类型的(de)语言(yan),有成熟的(de)工具(ju)和IDE支持(chi)(chi)。同时,很(hen)多大型公司(si)的(de)IT部门(men)已经有了C#编程人员,所(suo)以企业通常(chang)会将Xamarin作(zuo)为(wei)一项很(hen)不错的(de)投资(zi)。


Appcelerator Titanium:这(zhei)个(ge)领(ling)域最(zui)早的(de)(de)(de)参与者之一(yi)。他们在(zai)(zai)2009年提供了(le)对(dui)iOS的(de)(de)(de)支持(chi),在(zai)(zai)2012年添加(jia)了(le)对(dui)Android的(de)(de)(de)支持(chi)。Appcelerator Titanium使用JavaScript作为开(kai)发(fa)(fa)的(de)(de)(de)主(zhu)要(yao)语言,致力(li)于将(jiang)熟悉的(de)(de)(de)Web开(kai)发(fa)(fa)范式(shi)带到原生(sheng)移(yi)动(dong)应用开(kai)发(fa)(fa)中(zhong)。虽然它(ta)没有得(de)到过多主(zhu)流的(de)(de)(de)关注,但是(shi)很(hen)多的(de)(de)(de)应用都是(shi)在(zai)(zai)它(ta)之上开(kai)发(fa)(fa)的(de)(de)(de)。Appcelerator还有一(yi)个(ge)收费的(de)(de)(de)MBaaS(移(yi)动(dong)后端即服(fu)务(wu),Mobile Backend as a Service),它(ta)所推(tui)动(dong)的(de)(de)(de)内容会更多一(yi)些(xie)。在(zai)(zai)早期,Titanium有不少问题,这(zhei)些(xie)问题在(zai)(zai)博(bo)客(ke)圈(quan)上引发(fa)(fa)了(le)广泛的(de)(de)(de)讨论,这(zhei)对(dui)它(ta)的(de)(de)(de)采(cai)用可(ke)能也有一(yi)定的(de)(de)(de)影响。


NativeScript:与(yu)(yu)Titanium类似,NativeScript也致(zhi)力(li)于(yu)将类似于(yu)Web的(de)编程方式(shi)带到(dao)应用(yong)开发(fa)之中。NativeScript是由Telerik在(zai)2014年发(fa)布的(de),这(zhei)家公司有(you)一套(tao)很出名的(de)针对企(qi)业应用(yong)的(de)GUI组(zu)件。它(ta)采(cai)用(yong)JavaScript作为主开发(fa)语言,NativeScript还支持TypeScript和Angular,支持使(shi)用(yong)CSS定义样式(shi)。与(yu)(yu)前面所提到(dao)的(de)技(ji)术相比,NativeScript相对很新,但是很有(you)潜力(li)。


QT: QT是(shi)历史最悠久的(de)跨(kua)平(ping)台桌面开发(fa)库(ku),是(shi)1995年(nian)发(fa)布的(de),也就是(shi)21年(nian)前。在2013年(nian),他(ta)们添加了对跨(kua)平(ping)台iOS和(he)Android应用的(de)支持。QT使用C++与(yu)QML(即(ji)Qt元语(yu)(yu)言(yan)或Qt模型(xing)语(yu)(yu)言(yan)——这是(shi)一个(ge)类似于HTML的(de)标(biao)记语(yu)(yu)言(yan))来创建跨(kua)平(ping)台应用。但是(shi),QT GUI组件(jian)默(mo)认并没有遵(zun)循iOS和(he)Android的(de)外(wai)观与(yu)体验(yan)。同时,C++并不(bu)是(shi)一门(men)简单的(de)语(yu)(yu)言(yan),这要归因(yin)于其庞(pang)杂的(de)语(yu)(yu)法、手(shou)动内存管理以及标(biao)准(zhun)兼(jian)容性问题。但是(shi),在经验(yan)丰(feng)富的(de)C++程序(xu)员手(shou)中,QT可以实现很高(gao)的(de)生产(chan)率。


RubyMotion: Ruby是开发的主语言(yan),它(ta)是这(zhei)个领域(yu)的最早的参与者(zhe)之(zhi)一(yi)。在2012年第一(yi)次(ci)发布的时候,它(ta)只支持iOS,但是在2014年之(zhi)后,它(ta)能(neng)同(tong)时支持iOS和(he)Android。Rubymotion需要为iOS和(he)Android编写独立的GUI代(dai)码,但是业务逻辑可以跨(kua)平台(tai)重(zhong)用。


混合HTML5跨平台应用


移动应(ying)(ying)用本质上(shang)是(shi)GUI应(ying)(ying)用。大(da)多数的(de)(de)移动应(ying)(ying)用会依赖于(yu)后端的(de)(de)Web服务来实现大(da)部分(fen)的(de)(de)业(ye)务逻辑。大(da)致来讲,在(zai)移动应(ying)(ying)用中,尤其是(shi)在(zai)业(ye)务流程自动化领域(yu),大(da)约60%的(de)(de)代(dai)码都是(shi)在(zai)处理GUI的(de)(de)创建和管理。


不管iOS、Android,还是Windows Phone,在它们的(de)SDK中(zhong)都包含了一(yi)个(ge)非常(chang)高级的(de)浏览(lan)器组件(jian)(jian)。借助这(zhei)个(ge)WebView组件(jian)(jian),程序员(yuan)能(neng)够使用(yong)标准的(de)HTML5 Web技术实现(xian)对应用(yong)的(de)设计和编码。最终,在应用(yong)的(de)组成中(zhong),至少会(hui)有一(yi)个(ge)原生frame还会(hui)有在WebView中(zhong)执行(xing)的(de)HTML/JavaScript——这(zhei)也是为什么(me)它们被称为“混(hun)合”应用(yong)。在需(xu)要传感器输(shu)入的(de)特性(xing)中(zhong),比如地理位置、摄像(xiang)头,以及像(xiang)访问文件(jian)(jian)系(xi)统这(zhei)样的(de)底层(ceng)的(de)功能(neng),通常(chang)会(hui)使用(yong)混(hun)合应用(yong)框架(jia)所提供的(de)JavaScript-to-native桥。


Apache Cordova最初被称为PhoneGap(在(zai)2009年初发布),是最为流行的(de)(de)混合跨(kua)平台框架。它(ta)支持大多(duo)数(shu)主要(yao)的(de)(de)现代智能(neng)手机操(cao)(cao)作(zuo)系(xi)统。在(zai)混合跨(kua)平台框架中,因为使(shi)用了HTML和(he)CSS,所以(yi)它(ta)们(men)中的(de)(de)大多(duo)数(shu)内容都能(neng)跨(kua)不同操(cao)(cao)作(zuo)系(xi)统使(shi)用。借助像(xiang)framework7(http://framework7.io/)这样的(de)(de)库,我(wo)们(men)甚至有可能(neng)使(shi)用基于CSS的(de)(de)主题来支持底层操(cao)(cao)作(zuo)系(xi)统的(de)(de)默(mo)认(ren)外观。


在混合(he)应用(yong)中,HTML、CSS和JavaScript代码是随着应用(yong)一起发布(bu)的(de)。因(yin)此,加载UI相关的(de)代码并没有延迟,这与通过网络加载Web站点是不(bu)同(tong)的(de)。在现代功能强大的(de)手(shou)机上,我们可以使用(yong)HTML 5技术创建(jian)出很炫酷(ku)的(de)UI。尤其是对于B2B应用(yong),通过使用(yong)Cordova,有可能实(shi)现85-90%的(de)跨平台代码重用(yong)。


归(gui)纳起来(lai),我在下面(mian)列(lie)出(chu)了跨平(ping)台移动应用开发(fa)的(de)优(you)势(shi)与(yu)不足:


跨平(ping)台移动(dong)应用的(de)优势


  1. 通(tong)过细(xi)致的规划(hua),在跨平台方案中,能够实现50%-80%的代(dai)码重用。这样的话,可以实现更快的开发并降低成本(ben)。

  2. 在维护(hu)阶段(duan),跨平台开发(fa)会带来额外的收(shou)益。如果在通用代码库中(zhong)发(fa)现了(le)bug,我们只需(xu)修正一次即(ji)可。

  3. 对于(yu)通用(yong)的代码,只需编写(xie)一次单(dan)元(yuan)测试即可,这样(yang)我们就能将节省下来的预算用(yong)来编写(xie)更彻底(di)更充(chong)分的单(dan)元(yuan)测试。

  4. 我们可以(yi)使用已(yi)有(you)的编程(cheng)技能,无(wu)需学习平台相关的开发语言。

  5. 对于(yu)B2B应用(yong)和业(ye)务流程自动化应用(yong)来说,这(zhei)种方式是很理想的,因为上线时间和资源(yuan)利用(yong)率比外(wai)观和体验更为重要(yao)。


跨平台(tai)移动应用开发的(de)不足


  1. 一(yi)般而言(yan),在原始的(de)(de)(de)处理能(neng)力方(fang)面,手机并不像桌面机器(qi)那样强(qiang)大。很(hen)多中级和(he)入门(men)级的(de)(de)(de)手机并没有太强(qiang)大的(de)(de)(de)硬件能(neng)力来执(zhi)行流畅的(de)(de)(de)HTML5动画。因(yin)为这一(yi)点,在初级和(he)中级的(de)(de)(de)手机上,HTML5混合应(ying)用可(ke)能(neng)会导(dao)致UI反应(ying)迟钝。同时,浏览器(qi)组件会随着(zhe)操作(zuo)系统(tong)而演化,因(yin)此支持已(yi)存在超过三年的(de)(de)(de)操作(zuo)系统(tong)是(shi)相当痛苦的(de)(de)(de)事(shi)情(qing)。

  2. 渲染现代的(de)(de)HTML和(he)CSS会用(yong)到像渐(jian)变这样的(de)(de)高级特性(xing),它(ta)会使用(yong)大量的(de)(de)CPU和(he)GPU资源。因(yin)此(ci),相对于原生应用(yong)或(huo)原生跨平台应用(yong),基(ji)于HTML5的(de)(de)应用(yong)明显会消耗更多(duo)的(de)(de)电池电量。

  3. 通常来(lai)讲,HTML5混合应用依赖于回调(diao)风格的(de)编程,实现(xian)与原生插件的(de)通信,这样会(hui)为代码引入(ru)不必要的(de)复杂性。同时,对(dui)于一些(xie)任务(wu),这可能会(hui)导致解决(jue)方案非常缓慢(man)。

  4. 原生跨平台应(ying)用的(de)SDK还不成熟。GUI需要(yao)多次(ci)编码,才能实现特定平台的(de)外观(guan)和体验。

  5. 很(hen)(hen)多成功的应(ying)用都是(shi)(shi)以原生应(ying)用(不管是(shi)(shi)Android还是(shi)(shi)iOS)的方(fang)式来(lai)开发的,这是(shi)(shi)因为设计和构建一款针对多种平台的应(ying)用实在是(shi)(shi)很(hen)(hen)困难,这些平台都有(you)(you)特(te)定的用户体验方(fang)式。所(suo)有(you)(you)的平台都定义了自己的人(ren)机界面(mian)指南,通(tong)过(guo)一个代码(ma)库支持所(suo)有(you)(you)平台是(shi)(shi)很(hen)(hen)有(you)(you)挑(tiao)战性的事情(qing)。

  6. 移动(dong)操作(zuo)(zuo)系统正在(zai)以很快的(de)速度演进(jin)。每(mei)年会有越来(lai)(lai)越多(duo)的(de)特性添加进(jin)来(lai)(lai),这(zhei)为(wei)跨(kua)(kua)平台SDK厂(chang)商带来(lai)(lai)了(le)很多(duo)的(de)工作(zuo)(zuo),因为(wei)他们需要在(zai)操作(zuo)(zuo)系统新(xin)版本(ben)(ben)发布之后的(de)很短的(de)时间(jian)内,就拿(na)出SDK的(de)新(xin)版本(ben)(ben)。有时候,开发人员也需要花费很长的(de)时间(jian)来(lai)(lai)升(sheng)级应用(yong),以支(zhi)持跨(kua)(kua)平台SDK的(de)新(xin)版本(ben)(ben)。


总而(er)言之,即便(bian)原(yuan)生应用开发提供了100%的平台兼容(rong)性(xing)和流畅的性(xing)能,对于B2B解决方案和业务流程自(zi)动化(hua)项目来说,原(yuan)生跨平台或HTML5混(hun)合应用开发技(ji)术(shu)依然能够(gou)提供足够(gou)好的性(xing)能,同时更能节省成(cheng)本。


联系(xi)我们


电(dian)话:15222719106

邮箱(xiang):qizhenkeji@easyo2o.com

地址:天津市河(he)西区徽州道29号

ABUIABAEGAAgmdCPzAUooKrUhQUwwhQ4vgk

©2017  mg游戏 (天津)科技发展有限公司 版权所有

  |管理登录|津ICP备(bei)17001107号



ABUIABAEGAAgzrykzAUokOPeTTCQAziQAw

         

         手机版

ABUIABAEGAAg-cakzAUo_NeJqgIwkAM4kAM


                           项目(mu)经理