目前移动 APP 主要分为三种开发模式:Native APP、Web APP 和 Hybrid APP。包含以下技术栈:

一、Native APP

1.1 概述

Native APP 也称为原生开发,主要指直接使用相应平台特有的开发工具和语言进行开发。

主流的移动平台主要是 iOS 和 Android。

平台 iOS Android
开发工具 Xcode Android Studio
开发语言 Objective-C/Swift Java/Kotlin
官方资源 developer.apple.com developer.android.google.cn
三方资源 Awesome iOS Awesome Android UIAwesome Android
系统架构 iOS 基于 UNIX 系统,系统架构采用了分层的架构,共分为四层,从高到低分别是可触摸层(Cocoa Touch layer)、媒体层(Media layer)、核心服务层(Core Services layer)、核心操作系统层(Core OS layer) Android 基于 Linux 系统,系统架构采用了分层的架构,共分为四层,从高到低分别是应用层、应用框架层、系统运行库层、Linux 内核层

1.2 优点

  • 可以访问手机所有功能(GPS、摄像头等)、可实现更加全面的功能;
  • 运行速度快、性能高,可以实现最佳的用户体验;
  • 支持大量的图形和动画,不卡顿,反应速度快;
  • 稳定性高,每个代码都是经过开发者精细设计,极少出现崩溃和异常
  • 安全性高,可以有效防止病毒和漏洞的出现;
  • 能够更快速的兼容和实现手机系统最新的功能。

1.3 缺点

  • 开发时间周期长;
  • 开发人力成本较高;
  • 可移植性差,同样的业务逻辑需要 iOS、Android 各自研发人员利用不同开发工具和开发语言实现两次;
  • 对动态化的限制,一旦发布较难变更已实现页面及内容;
  • 功能升级需要至应用商店重新审核,并重新下载安装包进行安装。

二、Web APP

Web APP 也称为 H5 APP(主流的移动 Web APP 依赖 HTML5 开发),主要指通过传统 Web 开发模式来实现手机 APP 开发模式。

Web 语言包括 HTML5、CSS 及 JavaScript(TypeScript),开发工具则相对多样化,包括 VSCode、Sublime Text、WebStorm 等。

2.1 优点

  • 开发时间相对较短;
  • 开发人力成本较低;
  • 跨平台性好,基于 WebView 运行的 H5 APP 通常可以同时运行在 iOS 和 Android 多平台上;
  • 动态性好,通常在服务端部署最新代码后,APP 端可以很快访问实现更新;
  • 不要依赖应用商店审核,直接打开 APP 及可以体验新功能。

2.2 缺点

  • 无法使用很多移动硬件设备的独特功能;
  • 运行速度慢、性能较差,用户体验不好;
  • 无法支持大量的图形和动画,会有较明显卡顿;
  • 稳定性较差,对于不同浏览器兼容性复杂,难以预知风险;
  • 安全性较差,Web 相关的漏洞和风险均可能存在于 Web APP。

三、Hybrid APP

Hybrid APP 也称为混合开发 APP,其产生的原因主要是希望融合原生及 H5 APP 的优点,实现一套代码多端运行,规避各自的缺点。

关于移动端跨平台开发的解析,可以参考《移动端跨平台开发的深度解析》

跨平台技术主要为三类:

  • H5+原生(Cordova、Ionic、微信小程序)
  • JavaScript开发+原生渲染 (React Native、Weex、快应用)
  • 自绘UI+原生(QT for mobile、Flutter)
技术类型级 UI渲染方式 性能 开发效率 动态化 框架代表
H5+原生 WebView渲染 一般 支持 Cordova、Ionic、微信小程序
JavaScript+原生渲染 原生控件渲染 支持 React Native、Weex、快应用
自绘UI+原生 调用系统API渲染 F 高 QT低 默认不支持 QT for mobile、Flutter

混合应用的优点是动态内容是H5,web技术栈,社区及资源丰富,缺点是性能不好,对于复杂用户界面或动画,WebView不堪重任。

另:在游戏开发领域,Unity 技术栈同样实现了跨端开发模式,但通常仅针对游戏领域。

3.1 优点

  • 开发时间相对较短;
  • 开发人力成本相对较低;
  • 跨平台性好,主流的跨端技术栈均支持 iOS 和 Android 平台同时运行;
  • 动态性较好,主流的跨端技术栈均可以实现动态更新,但受限与应用市场审核,非紧急情况下不建议使用;
  • 较好的用户体验,最新的 React Native、Flutter 技术栈均已实现接近原生的用户体验,日常使用过程中用户较难感受与原生的体验区别。

3.2 缺点

  • 开发时间周期较长;
  • 开发人力成本较高;
  • 仍然需要原生侧技术支持实现;
  • 遇到问题可能涉及跨端技术栈及原生技术栈,较难排查;
  • 对于中大型应用实现,仍然存在一定的性能问题。

参考文档