平台开发的说法由来已久,但却从未像今天这样被各大厂商所重视。Google、Facebook、英特尔、微软相继推出重大举措,支持和推动App开发商开发兼容Android、iOS、Windows Phone等平台的应用。而面对语言众多、平台众多、终端适配和开发成本高昂等问题时,App开发商自身也迫切希望能具备跨平台开发的能力,以期达到降低开发成本、缩短开发周期、增多商业收益的目的。跨平台开发时代已经来临,你做好准备了吗?
流行的跨平台开发工具
在过去的一年,业内涌现出了一大批优秀的跨平台开发工具,大致上主要分为三类:Web应用、Native应用、混合应用。
自适应网页设计(也称“响应式网页设计”,如图1所示),是一种时下比较流行的网页设计技术,也算是一种在线Web应用。该设计使得网页可根据访问设备的特点以不同的风格样式进行展现。也就是说,可以让一个网站在手机上打开后,展现得像个本地应用一样,只要用户在手机浏览器上输入网址就可以使用该“应用”的功能。这节省了开发App的成本,也不必为了在各个应用商店上更新发布App而烦恼——只要网站更新了,用户的“App”就会随之更新。时下比较流行的此类框架有:Bootstrap、Pure、Foundation、Ink、Skeleton、ChocolateChip-UI等。
PhoneGap是一个推出时间相对较早的开源免费的跨平台移动App开发框架,一直以来都受到大量开发者的喜爱,从iOS、Android、Windows Phone到Amazon、Firefox OS等各大小主流移动平台一应俱全,而且也能使用地理位置、加速器、联系人等智能手机常见的核心功能。PhoneGap框架主要使用的还是基本的Web开发技术(HTML、JavaScript、CSS),所以它在各平台上具有优越的兼容性,熟悉网页开发的开发者能低成本地快速开发跨平台应用。应用的性能在经过分别优化后也大多可以接受。
Hybrid(混合)模式应用开发,其实质上就是一种中间件机制的应用程序框架,有人形容它是“Native搭台,HTML5唱戏”,近来受到了大量开发团队的追捧,成为一种主流开发模式。Titanium、AppCan、ionicFramework等都是其中的佼佼者,尤其AppCan作为国产货,因为有较强的本地化文档和技术支持,被大量国内开发者关注。Web前端开发工程师几乎可以零成本介入,快速做出漂亮的UI并满足大部分跨平台需求。无论是在什么系统下,混合应用可以实现几乎完全相同的交互体验。
Xamarin,虽然我们可以通过组织多个团队或雇用全栈程序员的方式,针对各个平台使用原生语言和开发工具分别开发出同一应用的Native版本,实现跨平台,但这个做法显然成本过高,而且应用程序生命周期也很难控制。Xamarin则可以通过一种编程语言搞定所有平台的Native App开发,这个语言就是C#。时下依然有很多人把C#语言跟.NET做等同认知,认为C#只能编写.NET应用程序,而且只能在微软的平台上跑,这是一种非常错误的观点。C#是一种优秀的计算机编程语言,支持.NET、Mono,但也可以编写非托管应用,甚至是操作系统。Xamarin是开源项目Mono的商业化运作公司,它的跨平台开发工具名也叫Xamarin。Xamarin可以使用C#调用各个平台系统的原生UI和底层API,可以极高程度地保证应用性能和UI流畅性。用Xamarin开发跨平台应用程序,可以方便地使用C#语言的很多先进特性和第三方类库,例如LINQ、Lambdas、XDocument、事件与委托、并行运算、JSON.NET等。在商业版订阅下,还可使用Visual Studio开发,当然也可以使用TFS让团队协作更便捷。需要注意的是,时下最流行的游戏引擎Unity也是主要用C#开发的。
LiveCode是一种相对比较特殊的跨平台开发工具,它使用了近乎人类语言的方式开发应用程序,使得开发简单应用时的效率大幅增加,而且相当亲民。其客户也不乏类似大型航空公司等极重量级的企业。
跨平台开发工具的对比
Web应用可以完全由Web前端工程师开发,只要智能设备连上网络并安装了合适的浏览器就可以通过URL访问“应用”,而Web工程师只要更新服务器上的文件,就可以实现对此“应用”的更新,无论时间成本还是维护成本都非常低廉。但恰恰是Web应用的优点导致了它的如下缺点。
1. Web应用必须连线访问,在网络条件不好的情况下启动速度会极慢。而且每次启动都会因为网络访问和UI资源(比如图片)的下载,造成用户手机流量的浪费,这在2G网络条件下就会尤其明显。优化不好的话,还可能造成用户手机欠费停机。
2. 各平台下的浏览器多种多样,页面渲染效果和JavaScrip的运行效率有较大差异,要想保证UI一致性,需要做大量CSS Hack和JavaScript代码优化工作,但很多情况下你的优化不一定起到正面作用。
几乎无法使用设备本地的API,尤其是底层API,这使得Web应用的能力十分有限。
Hybrid(混合)应用开发模式,兼顾了Web和Native。既有Web应用的低开发成本和跨平台相同UI交互的优点,又可以通过JavaScript访问常见的Native API,还可以利用HTML5的Local Storage技术在本地离线存取数据。但既然称之为混合应用,就无法逃避混合技术的缺点。
1. Web页面的渲染受限于CSS,虽然可以到达各种设备几乎相同的UI交互,但丧失了平台默认的交互习惯,与Native App形成体验差别,增加了单平台用户的学习成本,降低了平台应用认同感。
各种智能手机平台对其内置的浏览器内核大多做过一些定制化“改进”,对于一些事件处理存在差异,尤其是Android系统,在全球有几千款不同的设备,再加上操作系统版本的差别,Web App很难做到真正意义上的跨平台。
2. 虽然是混合应用,但应用界面依然没有脱离浏览器,所以混合应用依然无法达到Native App的性能和流畅性。
3. 对非稳定网络的运行环境难以细化控制,复杂条件下用户体验可能极差。
4. 在内存管理方面近乎无能,常会因此造成应用崩溃。
5. 受JavaScript语言的限制,一些相对底层的功能实现难度明显增加。
Xamarin可以通过C#这一种语言编写主流平台的真正Native App,其通过强大的编译器平衡了应用开发效率和应用执行效率,尤其是对使用C#开发的程序员而言,是莫大诱惑。Google、苹果、微软三大巨头与其都有深层合作关系,这使得Xamarin总能在第一时间推出新平台的SDK。以iOS7为例,iOS7发布当天下午,Xamarin就跟进发布了iOS7 SDK的正式版,这使得App开发商几乎可以零滞后地跟进新系统平台的App开发。在北美市场,Xamarin开发工具已经非常火热。当然,Xamarin目前也存在不少缺点。
1. 相对于HTML、CSS、JavaScript而言,C#的学习成本偏高,无法使无编程经验者达到几天入门的程度。
2. iOS的应用开发虽然可以在Windows上做,但调试过程依然无法脱离Mac系统,团队内至少要有一台Mac系统的机器作为Build Host。
3. 对于iOS、Android、Windows Phone系统平台分别做UI时,尚未推出统一的可视化设计工具。不过庆幸的是,目前Xamarin内部已开发了测试版,相信不久便可以正式公开发布。
4. 对中国个人开发者而言,商业授权版本价格有些偏高,难以大规模普及推广。
5. 中文资料偏少,尚需官方和社区共同参与完善。
跨平台开发工具选型
前面对主流跨平台开发方案做了一些对比,大家应该有了一些基本概念,那么,如何选择最适合自己的跨平台开发工具,则成为了一个不小的难题。这里我根据自己的经验给出一些建议,供大家参考。
1. 选择开发工具就像娶媳妇儿,不要选择最好的,要选最合适的。
2. 如果开发团队成员完全没有App开发经验,客户应用场景也不会受到网络影响,功能主要是数据的增删改查,不需要平台本地API,那么Web App是个不错的选择,尤其是响应式设计,客户接受度会比较高,尤其是企业应用的客户。
3. 如果需要使用少量平台本地API,对应用程序也没有较为严苛的性能要求,Hybrid应用绝对是最佳选择,因为它的性价比极高。
4. 当碰到Web性能瓶颈无法逾越;希望使用完善的应用程序生命周期;希望缩减Native App开发团队成本;希望使用一种开发语言,却还希望使用各平台下特有的第三方类库时,Xamarin是个不错的选择。虽然看起来授权价格不低,但从总体成本来看,节省了不少。
5. 微软在最近的Build大会上将WinJS开源了,并且承诺将会支持iOS、Android等平台。一旦目标达成,这也是一种不错的选择,尤其是对苦逼的Windows Phone开发者们而言。
6. LiveCode从某种程度上来说,更应该算是一种亲民的编程语言,期望让所有人都能轻松开发一个App,但作为一种解释性语言,是否能被专业开发者接受是个值得探讨的问题。
结束语
跨平台开发即将成为主流趋势,作为开发商或开发者,具备跨平台开发能力成为必需。想一想,就连过去最不愿意提及跨平台和开源的微软都敞开胸怀,拥抱跨平台,并且开源和免费了,我们还有什么理由原地踏步,固步自封呢?行动起来,一起迈步进入跨平台开发时代!
本文来自《程序员》杂志电子刊2014年05期。
大量的应用程序构建平台可以创建和开发应用程序,而不会破坏规则或要求使用者知道如何编码。相反地,开发者在使用中可以快速创建移动应用程序,并且可以使用教程和丰富的模板,这些模板无疑也会很棒。所谓最佳工具,对开发者而言无疑是最省时省力地,对企业而言,无疑是花钱最少,东西最好地。以下是TOP 23个最佳移动应用程序开发平台,如果你有更棒的分享,欢迎留言。
1. Appery.io
Appery.io是一个基于云的平台,具有可视化开发工具和集成的后端服务,已经被AT&T,ESPN和三星等企业使用,这是一个强大的和可视化的应用程序生成器工具。
Appery.io提供了许多有用的模板,并支持响应式Web应用程序开发。
2. Appcelerator
Appcelerator的移动平台在其组件市场提供了预集成云服务和广泛的应用程序扩展库。
这非常适合需要利用基于Web技术进行多操作系统应用程序开发的企业。
它还包含令人印象深刻的应用使用情况见解,这意味着监视应用程序性能将变得非常简单
3. AppInstitute
基于Nottingham的AppInstitute成立于2011年,为iOS和Android提供了一个无需编码的应用构建平台。
AppInstitute提供了一系列的应用程序模板和有用的拖放编辑器——更不用说CRM应用程序来监视应用程序销售,推送通知和分析等功能了。
4. AppMachine
AppMachine是声称使应用程序制作变得简单和为任何人所用的工具。它的工作原理是扫描网站并创建内容。然后,AppMachine允许迭代它所谓的“构建块”。
这是获得最小可行产品的一个既经济又便宜的方法。
5. AppMakr
AppMakr将帮助开发者获取内容或服务,并创建本机iPhone和Android应用程序以及HTML5移动网站。
这是一个无代码的解决方案,只需要几分钟的时间,但要注意所有服务的使用要求。
借助AppMakr,开发者将能够利用内置通知,完全自定义和进行实时应用程序更新。
6. AppYourself
AppYourself可以创建一个约50欧元的Android应用程序。
用户可以通过与Open Table和Resmio的合作获益,电子商务功能相对比较简单。AppYourself界面非常易于使用。
它确实为构建应用程序提供了一个流畅且可访问的平台。
7. Appy Pie
Appy Pie允许编辑应用程序,并发布在几乎每个可用的平台。
开发者能够创建适用于Windows手机,黑莓和Fire OS(Kindle)以及Android和iOS的应用程序,这是非常令人印象深刻的。虽然,需要支付一定费用,每个月花费50美元。
如果想制作仅限Android应用程序,则每个月有15美元的基本费用。
8. Bizness Apps
作为面向小型企业的应用程序制造商,Bizness Apps提供了一种简单方法汇总来自网站和社交媒体的现有内容。
开发者可以实时查看更改,绝对不需要任何编程专业知识。这对现在只需要一个应用程序的中小型企业来说是有用的,对于那些以应用程序为中心的人来说,它们的用处不大。
9. Como
Como用户可以选择模板和导航风格,甚至添加自己的个性化内容,可用于创建的主要应用程序以日历,音乐播放器,点餐等为中心,具备一些例如可添加会员卡方案的功能。
10. GameSalad
GameSalad是一个有区别的应用程序制作工具,Gamesalad声称,开发者可以在一个小时内建立一个游戏。
GameSalad支持所有主流操作系统,包括Amazon和Windows。
11. Good Barber
Good Barber是通过简单的四步来建立漂亮的应用程序。与大多数简单的应用程序制造商不同,它将设计放在前面,让开发者稍后添加内容。
这就是说,它的内容管理功能是非常可观的。同时,Good Barber制作应用程序很简单。
12. iBuildApp
借助简单的拖放编辑器,内置的CMS和超过1,000个应用程序模板,iBuildApp在创建设计良好的应用程序方面看起来就像是全能的,开发者只需掌握很少的编码知识。
使用iBuildApp,开发者可以选择所工作的部门并筛选相关模板。根据iBuildApp的统计,全球超过15,000家企业正在使用它,积累了超过200万的用户。
13. jQuery Mobile
作为非盈利软件自由保护协会jQuery开源项目的一部分,jQuery Mobile非常适合那些需要开源移动web框架的企业,这些框架将允许开发者利用现有的jQuery技能。
该框架提供了使用HTML,JavaScript和CSS为一系列智能手机构建交互式移动Web应用的能力,并且可以与PhoneGap一起使用来构建混合移动应用程序。
它没有其他人列出的圆滑感,但它不应该被忽视。
14. Kalipso
Kalipso为Windows,Android和Microsoft操作系统提供移动应用程序开发,重点关注流程,而不是代码。
主要功能包括拖放编辑器,免费运行时,内置GPS,数据库同步,多语言和技术支持。
Kalipso还提供了很多可爱的主题供开发者选择。
15. Kony
Kony于2007年首次推出时,专注于面向消费者的应用程序,但随后增加了B2E功能。
Kony平台非常适合需要在一系列移动设备上使用原生功能的项目。该环境可用于为平板电脑,智能手机,功能手机,移动浏览器甚至桌面浏览器构建应用程序,然后部署到所有设备。
16. LiveBlox
Apulus公司的LiveBlox允许用户通过“Blox”开发无需编码的应用,这些代码块可以链接在一起以创建一个有意义的应用程序。
主要功能包括:拖放编辑器,GUI构建器,视频,导出应用程序,3D引擎和插件系统。
17. Mobile Roadie
Mobile Roadie已经相当有名气了。它与众不同之处在于漂亮的设计模板数量和可用的附加功能。
Mobile Roadie拥有粉丝墙,聊天,音乐播放和定位功能,但是所有这些功能都是有代价的。
18. NativeScript
作为被Gartner在2017年魔力象限中任命为移动应用程序开发的领导者,开源框架NativeScript是一个相当强劲的竞争者。
用户可以使用JavaScript,Agular和TypeScript创建原生应用程序,并且可以轻松地重复使用代码,为开发者节省大量时间。NativeScript从一个代码库创建iOS和Android应用程序,并提供许多有用的指导来帮助缩短学习曲线。
19. Outsystems
Outsystems是一个低代码应用程序平台,旨在创建,部署和管理定制应用程序。
所有应用程序都是安全集成的,所以对于那些希望构建可能包含敏感信息的应用程序来说是一个很好的选择。
20. TheAppBuilder
TheAppBuilder是一个针对企业的移动开发工具。凭借包括Heathrow Airport在内的令人印象深刻的客户名单,TheAppBuilder已经成为应用程序和面向外部的软件构建模式的重要平台。
21. Viziapps
Viziapps是一个易于使用的平台,用于创建商业应用程序。用户可以使用简单的拖放编辑器来设计,测试和发布应用程序,因此非常适合缺乏编码技能的用户。
Viziapps还提供了大量的第三方插件和ViziApps Studio,使用户可以在自己的移动设备上看到他们的应用程序。
22. Verivo Software
Verivo软件专注于轻量级本地客户端应用程序,使其成为企业需要以有限的开发资源支持各种设备类型和平台的强有力的选择。
为了帮助跨平台提供一致的原生用户体验,Verivo提供了可跨平台共享的视觉/功能元素
23. Xamarin from Microsoft
2016年2月,微软收购了移动应用开发平台Xamarin。
开发人员可以使用C#轻松创建应用程序,为iOS,Android和Windows生成原生应用程序。 更重要的是,Xamarin提供了一个交互式仪表盘,提供有关活跃用户,会话和其他有用指标的实时数据。
据说这次收购增加了微软在开放平台上的软件创新动力。
者 | 陈峻
审校 | 孙淑娟
众所周知,根据使用场景的不同,我们往往需要针对智能手机、平板电脑以及可穿戴设备等不同平台,开发相应的应用。如果为每一类应用都去编写独特的程序代码的话,不但耗时,而且无法实现代码的重用。因此,我们需要引入混合应用开发的机制。
通常,我们可以使用各种现成的框架,去编写一个混合应用,然后将其存储在原生的容器中,以实现在不同的平台上,部署此类原生应用。可见,合适的平台框架,能够给混合应用的开发,带来事半功倍的效果。下面,我将向你介绍目前6种最为实用的开发框架。
作为一个JavaScript框架,React Native可以被用于开发跨平台的移动应用。由于该框架带有一种可用于开发用户界面的独特语言—JSX,因此用户可通过React编写出HTML和CSS。同时,它的用户界面组件也被设计成为能够给最终用户带来快速且愉快的体验形式。
与其他大多数需要重新编译代码、或重新启动应用,才能见效的开发框架不同,React Native的诱人之处在于,它能够快速展示应用被更改的效果。
由于React Native在每个平台上都会使用JavaScript引擎,因此你可以去访问由库和开源工具所组成的庞大生态系统。同时,它也允许用户无缝地将部分应用代码移植到另一个平台上。
对于某些具有动态、复杂或高级设计的接口来说,React Native可能并非完美的框架。由于可供你使用的自定义模型数量比较有限,因此你往往需要针对应用中重要的复杂性部分,从头开始开发与构建。初学者则需要花费一段时间,去掌握该框架的全面功能。
总的说来,React Native不但缩短了开发时间,而且能够与第三方应用相兼容,值得大家学习。
曾为NHS(英国国家医疗服务体系)和西南航空等组织提供数百万强大应用的Ionic,是业界领先的混合应用工具包。它允许用户使用单一的代码库,为多个平台开发出混合移动应用。
Ionic拥有一套为移动优化了的HTML库、CSS背景模式以及JavaScript组件。这些基本工具都能够帮助用户构建出用户友好的、交互式的多平台应用。
Ionic的另一个优势是,它包含了一套针对摄像头、GPS以及健康套件的额外功能,以便你增加自己的应用功能集。同时,你也可以在编写代码时,通过测试每个组件,以尽早地发现各种错误与缺陷。
由于Ionic包含了一组高效的响应式部件,因此它在保证了灵活的用户体验的同时,也节省了你在开发过程中花费的宝贵时间和精力。
不过,Ionic最大的局限在于,其开发出的应用程序严重依赖于原生的插件。虽然此类插件旨在达到与原生应用相当的性能,但是并非所有实例都可以用到它们。也就是说,你可能很难为自己正在开发的应用找到其合适的插件。
作为相对较新的原生编译框架,Xamarin可以被用来开发出那些需要保持原有的外观和用户体验的高性能应用。2016年,微软收购了Xamarin项目社区,并使之成为微软生态系统中,用于开发应用程序的流行工具。
由于Xamarin能够使用C语言,以及基于.NET层面的其他原生库,来开发应用程序,因此它可以在不牺牲性能的情况下,将带有原生库的高端应用,部署到不同平台的程序中。这与其他流行的混合框架相比,显然提供了更好的用户体验。
不过,与原生应用相比,Xamarin在性能上存在着一定的局限性。因此,它不一定是某些复杂应用的最佳选择。同时,由于该框架中也不提供热重载的相关功能,因此其某些功能可能无法在特定的平台上被实时更新。
总的说来,作为混合开发需求的一项不错的选择,Xamarin具有强大的支持、全面的资源,并能够让你的应用具有接近原生的性能。
根据Google的定义,Flutter通过一个直观的UI工具箱(其中包括插件库和创新的用户界面),让用户控制应用的组件,进而实现类似原生的性能。例如,Flutter的App Builder就能够让你混合和匹配各种功能。而使用其hotloader特性,你可以在调试代码时,即时进行更改,进而简化了整个开发过程。此外,由于Flutter能够支持开发出不限于Android或iOS的应用,因此它已得到了广泛的使用。
对于初学者来说,由于Flutter使用的是Dart,这种并非针对应用开发的流行语言,因此其学习曲线较为陡峭。而且,虽然由其提供的内置小部件(widgets)对于应用而言非常重要,但是一旦缺少了第三方库,就意味着开发者需要额外地用自己的代码去实现。
总的说来,Flutter仍然是不错的选择。它不但能够通过一流的UI元素来提供字体选项,而且可以通过各种小部件,来改善应用的整体性能与用户体验。
作为一个开源的框架,NativeScript可以让用户使用JavaScript和CSS等Web技能来构建应用程序。而凭借着出色的特性和整体性能,NativeScript能够与最新的移动版本、资源库以及命令行界面相兼容。
该架构的一项实用特性是它可以实时地更新应用,而无需手动刷新。当然,与大多数其他混合应用框架不同,NativeScript并不使用Web技术。
总的说来,该框架不仅功能丰富,便于使用,而且性价比高,能够给开发人员带来流畅的使用体验。
Cordova使用CSS3、JavaScript以及HTML5,来创建跨平台的应用。通过扩展其HTML5和CSS3特性,该框架增加了诸如:加速器、指南针、麦克风以及文件系统等额外功能,从而能够与目标设备协同工作。
同时,凭借着此类额外功能,开发者既可以快速、灵活地构建原生应用,又能够访问第三方的插件和工具箱。
虽然Cordova自身已包含了大量的平台插件与功能,但是就算你没找到合适的插件,也可以轻松地编写出自己的插件,并通过JavaScript代码的形式连接到系统级的代码中,以确保提供原生的性能。
与Ionic类似,该框架也包含了近似原生的小部件、选项卡以及可重排的列表等特性。同时,由于Apache Cordova能够提供两种工作流方法以及一种跨平台的工作流方法(即:CLI),因此由其开发的应用程序可以在不同的移动操作系统上运行。
此外,CLI还提供一个独特的接口以协助开发者将插件植入应用之中。也就是说,以平台为中心的工作流,可以帮助你先构建单个平台应用,然后再将其修改为并不复杂的形式。
综上所述,不同的混合框架有着适合不同应用场景的独特卖点。例如,NativeScript的主要吸引力在于,你不需要事先了解应用会运行在iOS还是Android平台上。你更应该仔细考虑的是,待开发应用的并发性、兼容性以及成本等因素,并据此来选择适合的框架。
原文链接:https://www.makeuseof.com/hybrid-app-development-best-frameworks/
陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。
来源: 51CTO技术栈
*请认真填写需求信息,我们会在24小时内与您取得联系。