2021年底跨平台技术比较和选型指南(也许是最全的)

2021年马上就结束了,回看这一年。
年初的时候,跨平台你说是伪需求吧,其实也有用,你说是硬需求吧,其实有点伪。
年末再来总结一下,大项目不缺原生程序员,不需要跨平台,小项目人手不够为了占领多平台才是硬需求。
我觉得国内最大的跨平台需求在小程序,毕竟那么多相差不大的平台,实在不应该写那么多套代码。
如有错误请指出,我核实后改正。如果抬杠就是你说的对。说别人项目是 KPI 项目的时候,请你也发布一个 KPI 项目。
企业的技术在不断迭代,新技术成熟以后放弃旧框架维护是人之常情,没有人会用大量时间维护和自己完全没有利益关系的东西。

小弟正在找工作,帮小弟点个 star 和关注呗。
小弟的 GitHub 主页
小弟的开源项目 grpcman 这是小弟之前的开源项目,是一个 gRPC 调试工具。

以下排名不分先后,按照我的熟悉排序。

MP 相关的跨平台方案

其实 2021 年底小程序已经不是那么火了,但是小程序跨平台框架已经慢慢发展成为全端框架了。就算哪天小程序死了,H5 和 App 肯定一直活着,学会了总是有点用的。

Uniapp [MP & web & APP]

https://uniapp.dcloud.io/
小程序出现之前只知道他们公司的 5+Runtime,说实话在这之前我一直觉得跨平台没什么意义。直到有一天要写小程序,直到有一天要小程序和H5双版本的需求,才感觉这种框架存在的意义,减少了一半的工作量都不止。而且官方有插件市场,抄起来也很爽。感谢各位有奉献精神的大佬。

Taro [MP & web & APP]

https://taro-docs.jd.com/taro/docs/README
说实话没实际做过项目,之前只支持 React 语法的时候跑过一些 Demo,后来是因为没有官方组件库,我没那么多时间自己做组件,而且我对 Vue 比 React 熟悉,所以就被我放弃了。现在有了 Taro UI,同时支持 React 和 Vue,尤其是最近支持 React Native 了,大家可以试试。

小程序框架比较

框架 写法 案例 腾讯 阿里 字节 快手 百度 京东 360 快应用 web APP 存活
Uniapp Vue 丰富 ⭕️ ⭕️ ⭕️ ⭕️ ⭕️
Taro 通用 丰富 ⭕️
Rax React
Mpx wxml ⭕️
remax React
kbone 通用
omi omi
MINA(官方) wxml 丰富
Tina wxml
anu(nanachi) React ⭕️ ⭕️ ⭕️ ⭕️ ⭕️❌
Chamelon cml ❌⭕
wepy Vue 丰富
mpvue Vue 丰富 ⭕️
megalo Vue ⭕️ ⭕️
Okam Vue

各框架支持图更新于2021年11月8日,其实看到各个框架的支持图,选型还是比较简单的。
存活度我只能直接看 commit,存活 ⭕️ 死亡 ❌ 半死不活 ⭕️❌ 没有凉透 ❌⭕️
只要不是活跃项目都建议别用,迟早是个坑。你说只更新 README 算活着吗?

做京东小程序只能选 Taro,做 360 小程序只能选 Uniapp。

做腾讯、阿里、字节、百度这四家小程序的可选的比较多,根据技术栈和个人喜好随便选
建议闭着眼选 Uniapp 或 Taro,用的人多,搜索引擎资料多。

不管你做什么小程序,需要导出 App,只能根据技术栈从 Uniapp、Taro、Rax 里边三选一
Rax 来头很大,相关生态也大,飞冰那一大套东西,还有最近的北海渲染器。没上过项目,不敢评价。

如果你只做微信小程序和H5,那么微信官方的解决方案 kbone 可以看看。
如果你只做支付宝小程序、微信小程序和H5,那么支付宝官方的解决 remax 可以看看。

由于 nanachi 框架交给去哪儿公司以后维护不是很积极,所以不推荐。

Tina 和 Mpx 本身都是针对 MINA 语法的增强,用 wxml 开发过小程序的人可以尝试一下。
还有就是 **Tina 仅支持微信小程序,Mpx 用途则更加广泛,**根据价值来看 Mpx 更合算

omi 来头很大,但是做小程序优势不大,目前有更好的选择,如果你学习 Web Compnent 可以试一试。

APP 相关的跨平台方案

Flutter [mobile & web & desktop]

https://flutter.dev/
不会 Flutter 都不好意思说我是时代弄潮儿,弄到最后咸鱼的大佬们升官发财了,我还在找工作的路上。讲真的第一次用的时候真的很惊艳,从没有过的感觉,不过现在声明式语法烂大街了,就不觉得惊艳了。现在最让我惊艳的就是生态,你能想到的端,Flutter 都能编译出来。但是这个 Flutter web 是最令我印象深刻的,打开控制台,整个网页就是个 Canvas,不得不惊叹 Flutter 渲染引擎开发者的强大。

React Native [mobile]

https://reactnative.dev/
最流行的手机 APP 跨平台方案了吧,褒贬不一,有些大厂已经放弃了。但是不得不说,当你做跨平台 APP 不知道选什么的时候,选这个准没错。

Hippy [mobile]

https://hippyjs.org/
据说比 React Native 快,还比 React Native 小,鹅厂在手机 web 这方面的功底可谓是非常深厚,X5 内核大名鼎鼎。看起来用户都是鹅厂用户,厂外人员持续观望中。

Kraken 北海 [mobile & web & desktop]

https://openkraken.com/
嚯,基于 Flutter 的渲染引擎,前些日子不是传出说阿里放弃 Flutter 了嘛,现在看来是没放弃,只是改做上层建筑了。
其实就是在 web 和 Flutter 中间又加了一层 Kraken,让不同前端框架都可以享受 Flutter 渲染器。
小程序方案里边我写了 Rax,其实它对 APP 的支持就是 Kraken 实现的。

.NET MAUI [mobile]

https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui
mobile 端其实就是之前 C# 开发者都熟悉的 Xarmain.Form。
主要是写出来的 APP 丑,不然当年早火了,哪有 React Native 这种 web 技术栈什么事情呀,更没有 Flutter 这种后起之秀了。目前看来变化不大,微软改名部诚不欺我。希望 Xarmain.Form 回炉重造以后能一雪前耻。

Jetpack Compose & SwiftUI [不跨平台,但是记录一下]

https://developer.android.google.cn/jetpack/compose
声明式语法,听到声明式是不是觉得非常熟,自从跨平台声明式 UI 框架 Flutter 火了以后,iOS 的原生 UI 框架 SwiftUI 和 Android 新一代原生 UI 框架 Jetpack Compose 都变成了声明式 UI 框架了。
但是论体验,SwiftUI 拖拽组件的 UI 布局方式还是更利于开发者的。

选型推荐

如果你是 React 开发者,甚至你只要是 web 开发者,就可以毫不犹豫的选 React Native,这是目前最好的选择。
Hippy 虽然也是 web 技术栈的,但是网上的例子比较少,遇到错误只能去 QQ 群问了。可以先练习,暂时不要用于正式项目
由于 Dart 是一门新的语言,如果你之前是 Flutter 开发者,可以继续使用 Flutter,如果还没开始学,请不要选 Flutter。
软粉和 C# 开发者,以及其他玩一玩的人可以试试 .NET MAUI,毕竟500强 APP 没几个 .NET MAUI 写的。

桌面相关的跨平台方案

Electron [desktop]

https://www.electronjs.org/releases/stable
现在已经有基于 Vite + React 的方案了,开发体验不错,但是运行速度仁者见仁了。

NW.JS [desktop]

https://nwjs.io/
对他唯一的了解就是微信开发者工具是用这个框架写的,对比 vscode 是 Electron 写的,看来都可以作为企业级复杂项目的选型,看个人喜好了,我觉得 Electron 更火一点。

Desktop support for Flutter [desktop]

https://flutter.dev/docs
Flutter 手机开发已经从黑走到红,从红又走到黑了,但是Desktop support for Flutter 才刚刚 beta 不久,几乎可以用了。听说咸鱼的很多页面又从 Flutter 换成原生了,所以国内用的人也不多了。但是开发 Ubuntu 应用或许是不错的选择。

React Native for Windwos + macOS [desktop]

https://microsoft.github.io/react-native-windows/
React Native for Windows + macOS 毕竟基于 Web 技术栈,这么快就成熟了,但是离 Electron 还差一截,太年轻了。

.NET MAUI [desktop]

临时文档 https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui
微软一统天下的框架,如果出来了,个人比较看好。首先 C# 是一门很完善的语言,而且老一代的 C# 开发者人数众多且稳定,或许能这一代人能再吃一波微软生态红利。

Compose for Desktop [mobile & desktop]

https://www.jetbrains.com/zh-cn/lp/compose/
这还是一个饼,除了 Jetbrains Toolbox 没有人用。发布了也是对安卓开发者吸引力比较大,毕竟 Kotlin 用户几乎是安卓开发者,Compose 也是新一代安卓开发技术。

JavaFX [pc]

https://wiki.openjdk.java.net/display/OpenJFX
如果说 Java 老矣尚能饭否,Java GUI 直接就是挂了,救也救不活的那种。官方宣布除了 JavaFX 其他都不维护了。但是JavaFX 又迟迟无法接棒 Swing。你看 Jetbrains 甚至让 Swing 焕发了第二春。

Qt [without web]

https://www.qt.io/
手机、桌面、车机、工控你说到的它几乎都能写,但是作为个人用户来说这个用户协议有点难受,不过个人用户不多,企业用户不在乎这点钱。现在有了 Qt for Python,上手难度比 C++ 低了很多。

选型指南

如果你是 web 开发者,可以毫不犹豫的选 Electron,当然 NW.JS 也是一中选择。
Java 开发者已经没有选择的余地了,新项目直接上 Fx,稍微学一下 Scene Builder 就行,老项目就维持 Swing。
.NET MAUI 还没发布,如果你公司只做 Windows desktop 而且你是** C# 开发者,WPF 依然是目前最好的选择。**
React Native for Windwos + macOS 跑起来没什么问题,对 native API 的支持还是差了一些,基于 Web 的技术栈目前 Electron 更完善。
Compose for Desktop 还是一张大饼,别说熟不熟了,还没摊开呢。
Desktop support for Flutter 完成度不错,但是还没正式发布,技术雄厚的大厂还没踩完坑,不建议商用。
Qt 不熟,不敢评价,但是据说在工业和物联网领域第一无二的存在。
笼统的说,出于便捷性和拓展性的需求,传统 desktop UI 框架最终都走向了 xml 语法。html 开发者对 xml 很熟悉,有那么点大前端的意思了。
或许不久的将来,WebAssembly 成为主流,Javascript 不再统治前端。更多其他语言的开发者一起共享和丰富前端生态,让 web 的性能更上一层楼。到那个时候,就不需要区分原生还是 web 了。

上一篇:Flutter多线程


下一篇:使用JAVA POI类生成WORD/EXCEL实战