移动开发:史爱武解析技能需求

发表时间: 2023-04-05 07:00

来源于微信公众号:计算机大学生

技能要求

当前,市面上的移动操作系统无非是iOS和Android,而开源的Android操作系统可能用户更多些。传统的移动App开发基本都是原生开发,需要iOS工程师和Android工程师分别开发一个App——Android端App使用的是JAVA或Kotlin开发,iOS端使用的是Objective-C或者是Swift开发。这种原生开发模式也是早期最常见、最主流的开发模式。

在移动互联网发展初期,业务场景并不复杂,原生开发还可以应对业务应用的产品迭代需求。近些年,随着手机等移动用户的爆炸式增长,以及移动互联网和物联网应用的广泛普及,传统的纯原生开发已经不能满足日益增长的业务需求,主要表现在:动态更新应用内容的需求增大。当需求发生变化时,纯原生应用需要通过版本升级来更新内容,但移动应用App审核、上架是需要时间的,移动App上架的等待时间在高速变化的互联网时代就有些难以接受了。所以,“不发版也可以更新应用内容”的需求就变得越来越急迫了;业务需求变化快,企业的成本压力增大。原生开发一般要组建Android、iOS两个开发团队,版本迭代时,无论是两个原生开发团队的人力成本,还是测试成本都会随着版本变化而变大。版本升级越频繁,企业的成本压力越大。

总之,为了解决原生开发面临的上述两个问题,一些跨平台的移动应用开发框架诞生了。本质上,跨平台开发是为了增加代码复用,减少开发者对多个移动操作系统适配的工作量,降低开发成本,让开发人员更加关注移动业务逻辑。所以,近年来,随着移动互联网高速发展以及智能手机的用户越来越多,移动开发从传统的Android、iOS原生应用开发,转向了跨平台的混合App开发。

相对于原生开发,跨平台移动App开发具有“一套代码可以在多个平台运行”、开发成本低、开发周期短、开发难度小等诸多优点。所以,越来越多的移动开发者也意识到跨平台开发框架的好处和重要性,越来越多的知名移动应用App也是基于跨平台的框架开发完成的,比如京东、淘宝、今日头条等APP。本节也重点介绍跨平台的混合App开发所需的技能要求。


下面是一个招聘网站的移动应用开发的技能要求描述。

技能要求:

1、精通React Native、Ionic、Cordova等开发框架之一,混合开发经验优先考虑。

2、掌握H5、CSS、JavaScript等前端开发技术;

3、熟悉前端功能测试和性能测试的方法,熟悉前端性能优化;

4、熟悉模块化,组件化;

5、有原生iOS和安卓开发经验优先,熟悉打包上架流程;

6、有微信小程序、公众号等开发经验者优先;Uni-App开发移动应用经验者优先。

现在跨平台App开发已不是新鲜事了,跨平台框架百花齐放,各有千秋。不管什么跨平台开发框架,移动应用开发团队还是要选择最适合自身的业务需求的。虽然市面上基于跨平台开发框架开发的移动应用App在性能上和原生App有一定的差距,但还是瑕不掩瑜,跨平台移动App的优点更受市场专注和广泛接受。而且并不是所有公司都能长期承担起原生App开发与维护的成本,这也是目前来看,跨平台App开发市场接受度超过原生开发的重要原因之一。

跨平台移动开发需要依赖各种跨平台开发框架,比如 Cordova、Ionic、React Native、Flutter、Uni-App、Weex、APICloud,等等。其中,也不乏国内厂商推出并维护的优秀跨平台移动开发框架,比如,Uni-App是国内DCloud公司推出的;Weex是阿里巴巴于2015年推出的一款跨平台开发框架;APICloud是用友网络旗下的。各个框架的品质也良莠不齐,老框架就不说了,新框架的开发文档和教程少、开发时容易掉到坑里,面对这么多的跨平台移动开发框架,移动开发人员就需要慎重选择了,最起码要选择背后有大厂支持和活跃社区的开发框架。

目前来看,跨平台移动应用开发框架还没有像Web前端开发框架那样,市场上已经形成了“三足鼎立”的格局,也就是Vue、React和Angular。从近三年的下载量来看,我们可以更多关注React Native、Uni-App和Flutter,至少要掌握这三种跨平台移动开发框架之一。

1. React Native

React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React在原生移动应用平台的衍生产物,至今一直在积极维护和使用,它支持iOS和Android两大平台。React Native使用JavaScript语言、类似于HTML的JSX、以及CSS来开发移动应用,支持丰富的前端生态(比如RN使用React.js极大地方便了UI的创建),熟悉Web前端开发的开发人员只需很少的学习就可以进入移动应用开发领域。

React Native包含一个热更新功能,根本原理就是更换js bundle文件,并重新加载,新的内容就完美的展示出来了;React组件封装现有的原生本地代码成为API接口,并通过React的声明性UI范式和JavaScript与这些API进行交互;React Native的这些特点大大加快了移动App的开发速度并降低了开发成本。

React Native的架构整体上分为三部分:Native、JavaScript 与 Bridge。其中,原生层(Native)管理UI 更新及交互;JavaScript代码层调用原生能力实现业务功能;桥接层Bridge在二者之间传递消息,原生代码与JavaScript代码通过桥接层进行交互,这是一个异步的批量串行处理过程。

React Native的工作流程如下:用户输入、计时器、网络请求和响应等事件注册在原生代码中。React Native在原生层收集事件产生的数据,串行处理后通过桥接层传给JavaScript层。JavaScript层拿到数据后处理并生成一系列指令,这些指令由整型、字符串等数据类型构成,同样经过批量串行处理后传回原生层。桥接层的原生端决定哪个原生模块负责处理传回的指令并调用相应的方法,同时在需要的情况下更新UI。这种架构提升了React Native应用的性能。

2. Uni-App

Uni-App是由国内DCloud公司团队推出的使用Vue.js开发的跨平台应用的前端框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序、快应用等多个平台。

Uni-App几乎是为国内的开发者量身定制的移动开发前端框架,几乎可以生成目前国内所有主流平台的应用和小程序,包括iOS、Android、Web、微信小程序、支付宝小程序、百度小程序、字节跳动小程序、快应用、QQ小程序、360小程序、钉钉小程序、京东小程序等十多种。

Uni-App的优势是让开发者只关注代码本身,使用Vue.js就可以开发全套的跨平台应用。对于一些公司来说,可以节省很多的开发时间。和其他的跨平台移动应用开发框架一样,基于Uni-App框架开发的移动应用App的性能还是比不上原生App。但是大多数场景下,一些复杂的业务逻辑基本上都不会在移动端处理,所以从最终用户角度来看,性能基本没啥区别。

3.Flutter

Flutter是Google 推出并开源的跨平台、高性能的移动应用开发框架。它使用Dart为开发语言,一套代码同时运行在iOS和 Android平台,利用Skia绘图引擎,直接通过CPU、GPU进行绘制,不需要依赖任何原生的控件,相比React Native(依赖中间者JSCore引擎)性能更高。Flutter正在被越来越多的开发者和组织使用。2021年,国外的一个统计数据表明,Flutter的使用率第一次超过React Native,成为被开发者使用最多的跨平台开发框架。

Flutter包含了许多核心的Widget和工具,如滚动、导航、图标和字体等,这些都可以在iOS和Android上达到原生应用一样的性能。Flutter的热重载可帮助快速进行测试、构建UI、添加功能并更快地修复错误。在iOS和Android模拟器或真机上可以瞬间重载,并且不会丢失状态。

Flutter所采用的开发语言为Dart语言,Dart是面向对象的、类定义的、单继承的语言,它的语法类似C语言,可以转译为JavaScript,并且具有AOT(提前编译)与JIT(即时编译)编译器。Dart语言的最大优势在于速度,比JavaScript快2倍,不过Dart是一种较新的语言,开发者如果熟悉其他开发语言(如Java、C或C++)则更容易上手。

Flutter既不用WebView进行组件渲染,也不使用原生组件进行渲染,它的渲染引擎依靠跨平台的Skia图形库来实现,手机平台只需要提供一块画布即可。同时,使用既支持JIT又支持AOT的Dart开发语言,既提升了执行效率,也为支持动态化提供可能。

简单来讲,Flutter 从上到下可以分为三层:框架层、引擎层和嵌入层。框架层是一个纯 Dart实现的 SDK基础库。引擎层是用 C++ 实现的Flutter核心层,包括了Skia 引擎、Dart 运行时、文字排版引擎等。嵌入层主要是将 Flutter 引擎 “嵌入” 到特定平台上。因为Flutter 最终渲染、交互是要依赖其所在平台的操作系统 API,所以嵌入层采用了当前平台的语言编写,比如,Android平台的嵌入层使用的是Java和C++语言开发;iOS 和 macOS 使用的是 Objective-C 和 Objective-C++;Windows和Linux使用的是 C++。Flutter 已包含了各种主流平台的嵌入层,如果Flutter未来要支持新的平台,则需要针对新的平台编写一个嵌入层即可。

上述三种跨平台移动应用开发框架的总结如下:

技术学习难度和成本来看,React Native要学习React框架,Uni-App要学习Vue框架,Flutter要学习Dart语言,总的来说,Uni-App的学习难度和学习成本最低,其次是React Native。

性能来说,Flutter的性能最好,React Native的性能优于Uni-App。如果对性能要求比较高,可以考虑Flutter框架。

开发生态来看,对于国外的开发者,React Native、Flutter的生态肯定比Uni-App好,但国内的开发者,Uni-App生态可比React Native和Flutter丰富多了,它的插件市场有数千款插件,不能说应有尽有,但确实是最丰富的跨平台开发框架生态了 。