对于现在的开发者来说,现在确实是一个比较好的时代,各种技术层出不穷,百花齐放。光是做app也已经演化出了很多方案,有些已经淡出视野,有些还活跃在开发者的世界中。今天主要介绍几种常见的开发app的技术。
原生开发
最基本的开发模式,采用各平台原生语言进行开发,iOS采用objective-c
或者swift
,安卓端采用java
或者kotlin
ios
swift
是14年由苹果发布的编程语言,主要用来开发iOS或者macOS的app,刚推出的时候因稳定性差,市场占有率低饱受开发者诟病,到目前得到比较大的改善,很多公司也开始逐渐适用swift
作为主要编程语言,逐渐取代objective-c
成为原生开发的主流。swift的优势在于代码更容易阅读、代码量更少、对于新手而言也更容易上手。对于新入门而言,比较推荐swift。
android
安卓的开发总08年诞生一直都是采用Java作为主要开发语言,后来jetbrain公司发布了新的语言kotlin
,也因为其简单、安全等特性逐渐蚕食了不少原本属于Java语言的市场份额。而随着谷歌官方宣布kotlin成为安卓开发的主要语言,也让kotlin再次成为焦点,可以说现在的安卓开发就算不会kotlin,也在学习kotlin的路上了。当然Java与kotlin的关系不能简单的理解成swift和objective-c的关系,因为Java作为一门服务器语言市场份额相当客观,Java这门编程语言长期占领排行榜前三。而且由于Java跨平台的特性,很多嵌入式设备也会考虑适用Java作为编程语言,对于安卓开发来说,建议两者都了解。
跨平台开发
对于大部分软件来说,都不可能只是开发iOS或者安卓一个平台,而上面说的技术都无法满足多个平台同时适用的场景,意味着要开发一个app,需要分别配备安卓开发人员和iOS开发人员,一套逻辑写两遍,严重浪费人力物力,对于大部分公司都是一个比较大的负担。也正是因为这个,市面上涌现了很跨平台的解决方案,主要介绍几个比较成熟的:hybrid
、React-Native
、Flutter
。
hybrid
hybrid是使用非常广泛的一项技术,实现原理其实类似于封装一个浏览器,然后提供一些个性化的接口,以弥补H5原生能力不足的缺憾。展现层使用html+css,逻辑层用JavaScript,再通过标准封装,让JavaScript拥有调用原生app的接口的能力,比如蓝牙、文件存储等。其优势非常明显,一个web开发者就可以同时开发安卓和iOS两端的app,开发效率自然提升很多,人才储备方面也节约了不少资金。缺点是效率方面比原生的差很多,可能会存在动画卡顿,随着手机性能的提升,这个缺点会越来越被忽视。事实是,现在越来越多的场景已经开始使用hybrid模式开发。
hybrid很好,那该如何使用呢?目前主要有两种模式:专门找人写原生接口,或者使用市面上比较成熟的框架。前者主要由原生开发人员提供框架层面的接口开发,由web开发人员负责具体业务开发,保证开发效率的同时关键体验也不会太差。如果个人,或者公司不打算招原生开发也是可以实现开发app的,目前有比较成熟的框架:‘cordova’,这个框架封装了写插件的标准,然后提供了标准的运行及打包模式。加上开源社区的强大力量,基本上大部分想要的原生功能插件都可以在上面找到。完成一个完整的app基本上没什么困难,很多公司都会采用这种模式,因为确实方便。
目前我自己的app【书香-得寸进尺】就是采用这种方式开发,效率很高,性能稍差,但也基本上没有太大感知。
react-native
react-native是Facebook公司开源的一个跨平台开发的框架,渲染交给原生,逻辑由JavaScript来控制,实现机制与hybrid稍有不同。hybrid的渲染是有webview完成,而react-native的渲染是由原生组件来实现,渲染效率方面得到比较大的改善。同时也保留了只写一套代码的优势,一经推出就得到了程序员的广泛关注,而且各大小厂商都已经使用这种模式开发。而且组件化开发,很节约开发效率。
17年的时候因为开源协议问题被很多开发者诟病,也因此国内部分公司表示内部严禁使用react-native相关的技术,后来官方修改了开源协议,也不存在太多问题。
之前在公司推过这套开发模式,也做个几个功能,只是后来因为新产品的规划问题没有继续往下推进。整体开发体验还是挺不错的,对于大部分场景都适用,不适用的地方也有很多成熟的免费框架,总之值得尝试。
flutter
flutter是谷歌开源的又一跨平台开发框架,这套框架吸取了react-native的优势,框架提供原生渲染。再次基础上做了更深入的优化:所有运行时代码均编译为原生二进制文件,这就意味着不光是渲染方面效率提升,连逻辑方面也不存在频繁的原生与JavaScript交互的场景,逻辑方面的性能又得到了很大的提升。近期的版本又可以支持web端,如果成型,flutter一套代码搞定安卓、iOS、web开发不是梦。
由于思想确实比较优秀,flutter的推出比起react-native的关注度只高不低,再加上阿里(闲鱼)的深入使用,flutter的崛起势头不可忽视。
当然也不是没有缺点,首先是语言,flutter采用dart作为开发语言,意味着使用这个框架对于原有的任何开发人员都是一个难点,虽然对于程序员来说这点也根本不算什么。第二是还太新了,flutter目前还处于发展阶段,难免存在一些不足,相关的生态也没有得到比较好的发展,导致研发实力不够的公司不太敢入坑。但是后续的发展还是值得关注,照这个势头下去,如果没有更优秀的跨平台框架出现,flutter很有可能会成为大部分人或公司的选择对象。
总结
以上方案各有优劣,根据公司情况不同也会采用不同的方式来实现。而基本上也就是在开发效率和运行性能方面做考量。最后根据开发效率做个参照:hybrid < react-native < flutter < 原生开发,开发效率反过来即可。
个人建议的选择标准是:
小公司(或者研发非主业务的公司)或者个人,选择hybrid。
中等公司,react-native或者原生开发
大公司,还建议什么都可以。
flutter目前还应该观望一下,可以自己先学习,不太建议立即投入生产。
本文为原创文章,转载请保留原出处。原文地址:https:/eatong.cn/blog/13