V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NueXini
V2EX  ›  程序员

2022 年过一大半了 , 请问有什么跨平台开发框架推荐吗

  •  2
     
  •   NueXini · 2022-07-15 16:01:48 +08:00 · 9017 次点击
    这是一个创建于 892 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我目前了解到的跨平台开发框架有

    • Electron
    • Flutter
    • Qt

    我入门的编程语言有

    • C
    • C++
    • Html5 + Css3 + JavaScript
    • shell
    • python

    目前大一在读,专业是游戏开发相关的, 自己也经常写点小程序,现在想学一些跨平台开发,请问有框架推荐嘛?

    Thanks for replying~

    64 条回复    2023-04-18 22:17:31 +08:00
    acidsweet
        1
    acidsweet  
       2022-07-15 16:06:50 +08:00   ❤️ 1
    大一的学生好强鸭;
    结合你的技术栈,首推 Electron 了;
    结合你的年级,可以尝试一下 Flutter ,就当一乐呗;
    Qt 我想不到选择的理由;
    ysc3839
        2
    ysc3839  
       2022-07-15 16:07:00 +08:00
    建议 Electron
    xygod
        3
    xygod  
       2022-07-15 16:07:58 +08:00
    可以用 ue 做(逃
    NueXini
        4
    NueXini  
    OP
       2022-07-15 16:11:03 +08:00
    @acidsweet 我看过同类似的跨平台开发框架推荐,都推荐的 electron,但是都说性能渣,内存占用大,我就没敢学
    janus77
        5
    janus77  
       2022-07-15 16:26:00 +08:00
    看起来你不需要移动端。那就 electron 一把梭
    RockShake
        6
    RockShake  
       2022-07-15 16:28:32 +08:00
    反正写个 Demo 也不需要多少时间,都尝试一下就知道优劣了,Electron 虽然性能渣,内存占用大,但是打包方便啊,只要网页写出来,应用程序基本也出来了
    timothyye
        7
    timothyye  
       2022-07-15 16:29:35 +08:00
    最近比较活的应该是 Tauri ?
    https://tauri.app/

    打包出来的包比 Electron 小很多
    timothyye
        8
    timothyye  
       2022-07-15 16:29:55 +08:00
    活 -> 火
    wangtian2020
        9
    wangtian2020  
       2022-07-15 16:33:44 +08:00
    https://quasar.dev/
    quasar 全家桶。vite 毫秒级热更新开发体验,JavaScript 一把梭。electron 、web 、cordova webApp 全都有
    stevexu
        10
    stevexu  
       2022-07-15 16:36:39 +08:00
    acidsweet
        11
    acidsweet  
       2022-07-15 16:39:59 +08:00   ❤️ 1
    @NueXini 年轻多去试,没什么不敢的;再说这是目前最主流的方案,人家商业公司都敢,你哪不敢了
    HFX3389
        12
    HFX3389  
       2022-07-15 16:48:26 +08:00
    直接上 electron 啊
    tanranran
        13
    tanranran  
       2022-07-15 16:53:14 +08:00
    electron 没有之一
    flyqie
        14
    flyqie  
       2022-07-15 16:56:25 +08:00 via Android
    PC 端,对性能 /占用 /兼容性没有过多要求的话选 electron ,否则 qt 。

    移动端,目前来看似乎 flutter 不错,小程序什么的有需求的话最好上 uniapp 这类的。
    icyalala
        15
    icyalala  
       2022-07-15 16:57:11 +08:00
    目前来说,偏重移动端就 Flutter ,否则 Electron 。
    相对 Native 开发来说,上面方案在包体积、内存等性能指标上肯定差些,如果你非常在意那还是 Native 。
    dcsuibian
        16
    dcsuibian  
       2022-07-15 16:57:15 +08:00
    ①游戏开发相关,性能要求高 ② 跨平台 ③个人学习
    这种情况能放心推荐 Flutter

    HTML 、CSS 、JS 确实是目前比较好的跨端方案,但写的一般就是增删改查应用。
    cyp0633
        17
    cyp0633  
       2022-07-15 17:00:54 +08:00
    electron 毕竟省事点,上手了解一下也不亏
    asuraa
        18
    asuraa  
       2022-07-15 17:02:30 +08:00
    跨平台?
    开发框架?

    boost
    ysc3839
        19
    ysc3839  
       2022-07-15 17:04:51 +08:00
    @timothyye 个人觉得 Tauri 主要问题是要用 Rust 写后端,但是目前 Rust 各类库没有 Node.js 那么完善,写起来可能会遇到一些坑,甚至要自己造轮子。
    pengtdyd
        20
    pengtdyd  
       2022-07-15 17:10:31 +08:00
    pc 已死,客户端技术没啥搞头
    musi
        21
    musi  
       2022-07-15 17:11:01 +08:00
    移动端 flutter ,桌面端 Electron
    另外跨平台不是银弹,或多或少都有各种各样的问题,就看你能不能忍了
    southsala
        22
    southsala  
       2022-07-15 17:24:02 +08:00
    flutter
    NoNewWorld
        23
    NoNewWorld  
       2022-07-15 17:32:22 +08:00
    直接 flutter
    IGJacklove
        24
    IGJacklove  
       2022-07-15 17:57:30 +08:00 via iPhone
    游戏开发搞这玩意干啥…
    rusteer
        25
    rusteer  
       2022-07-15 18:01:58 +08:00
    Tauri 牛逼,我猜你们不知道这是个啥
    dssxzuxc
        26
    dssxzuxc  
       2022-07-15 18:27:21 +08:00
    等你毕业了 tauri 发展好的话差不多也有岗位了
    kinboy
        27
    kinboy  
       2022-07-15 18:40:44 +08:00 via Android
    @ysc3839 Tauri ,Electron 的替代品
    q474818917
        28
    q474818917  
       2022-07-15 18:50:10 +08:00
    瞎折腾啥,谈谈恋爱,好好享受大学时光不好吗
    ysc3839
        29
    ysc3839  
       2022-07-15 18:52:51 +08:00
    @kinboy 个人觉得 Tauri 主要问题是要用 Rust 写后端,但是目前 Rust 各类库没有 Node.js 那么完善,写起来可能会遇到一些坑,甚至要自己造轮子。
    zuosiruan
        30
    zuosiruan  
       2022-07-15 18:55:57 +08:00 via iPhone
    现在大学都有游戏开发岗位了?
    iwdmb
        31
    iwdmb  
       2022-07-15 19:10:14 +08:00
    flutter
    shoreywong
        32
    shoreywong  
       2022-07-15 20:12:12 +08:00 via Android
    capacitor
    1more
        33
    1more  
       2022-07-15 20:35:11 +08:00
    Tauri ,唯一的不便之处是需要 rust 生态支持,上手难度可能大一些
    duke807
        34
    duke807  
       2022-07-15 21:35:33 +08:00 via Android
    wxWidgets 或 web page
    u823tg
        35
    u823tg  
       2022-07-15 21:58:08 +08:00
    @ysc3839 #29 不是有 js api 么
    iloveios
        36
    iloveios  
       2022-07-15 22:12:31 +08:00 via iPhone
    tarui 注定小眾 還是得 js 生態的東西
    beginor
        37
    beginor  
       2022-07-15 22:38:09 +08:00 via Android
    游戏开发难道不考虑 unity3d
    ysc3839
        38
    ysc3839  
       2022-07-15 22:55:59 +08:00 via Android
    @u823tg 但只是 js ,不是 Node.js
    424778940
        39
    424778940  
       2022-07-15 22:57:58 +08:00
    游戏 还要跨平台 难道不应该先考虑 unity 么
    Qt 跨平台没问题 游戏就算了
    immerink
        40
    immerink  
       2022-07-15 23:00:11 +08:00
    使用 Kotlin 一把梭的 JetBrains/compose-jb ;使用 golang+前端技术的 wailsapp/wails 。
    u823tg
        41
    u823tg  
       2022-07-15 23:23:46 +08:00
    @ysc3839 #38 Node.js for running the CLI (deno and pure rust are on the roadmap)
    看下文档很难么。

    你还是没仔细看过,我两个都没用过但是看文档这两个区别是
    Interface Service Provider WRY Chromium
    Backend Binding Rust Node.js (ECMAScript)

    rust 为 wry 的后端,node.js 为 chromium 的后端。

    剩下代码用 node.js rust deno 都可以。 闲的蛋疼可以自己弄 python 。php ,对接下 rust 封装的后端就行
    NueXini
        42
    NueXini  
    OP
       2022-07-15 23:26:49 +08:00
    非常感谢大家的回复,我看推荐`Electron`和`Flutter`占据多数,其次是`Tauri`我会优先尝试他们两个,我虽然是游戏开发方向,但是偶尔也写写其他一些小工具,所以像 UE 和 Unity 也是我的必修课,会在往后的时间学习的
    u823tg
        43
    u823tg  
       2022-07-15 23:53:41 +08:00
    @NueXini #42 你要是学 Unity 肯定学 c#, 建议 maui 、Avalonia 。
    damowang777
        44
    damowang777  
       2022-07-16 00:16:33 +08:00 via Android
    Electron/Tauri 并没有完全的跨平台,而是把 web app 打包成 desktop app (给 Windows, Linux 和 MacOS )。Web App 直接打包成 Desktop App 通常是比不上 Native App ,需要做很多修改。所以到最后你会有两个 codebase ,学习过程也较为复杂。如果有些特化需求,还得自己写插件。。。(所以要学 web 和 desktop 的沟通方式等等)

    Flutter 才是真正意义上的跨平台,但生态还在发展,虽然该有的都有,还有待完善。玩玩可以,不然每次更新都给你来个大改版。

    你既然都学 Unity 了,直接用 Xamarin 不香吗?最近新的.Net MAUI (跨平台)就是基于 Xamarin 的。

    其实上面几个大佬说的在理,客户端已死,大家都活在手机里了,Web 搞起来。按着脉络发展下去,再不久,手游都可以像原生环境,直接在 web 运行了。
    minami
        45
    minami  
       2022-07-16 00:18:54 +08:00
    游戏开发不应该折腾 SDL 、GLFW 、Godot 、Unity3D 这些吗。。。如果只是自己写一些小程序,imgui 就挺好的了
    ysc3839
        46
    ysc3839  
       2022-07-16 00:43:13 +08:00
    @u823tg 我看了文档呀,文档里 JavaScript / TypeScript 部分完全没提到 Node.js 好吧?里面的 API 全都是 Tauri 自己在 JS 基础上搞的,根本不是 Node.js 。https://tauri.app/v1/api/js/modules/app

    再者进行搜索也能找到一个 discussion:
    “Tauri doesn't use nodeJS for server stuff, in fact Tauri doesn't use a localhost server, you have to use Rust crates and redo your SQLite logic with the rust backend”
    https://github.com/tauri-apps/tauri/discussions/2592

    你说的这句话“Node.js for running the CLI”我在文档里也找不到,而且 CLI 也指的是生成 Tauri app 的命令行工具吧?不是指最终生成的 app 中的后端。

    至于你说“闲的蛋疼可以自己弄 python 。php ,对接下 rust 封装的后端就行”,那正好印证了我说的“目前 Rust 各类库没有 Node.js 那么完善,写起来可能会遇到一些坑,甚至要自己造轮子。”关键不是可不可行,而是没有现成的轮子,要用户自己去适配这些东西,那还不如直接用 Electron 呢。
    secondwtq
        47
    secondwtq  
       2022-07-16 00:55:45 +08:00
    快五十楼只有一个 imgui ...
    ysc3839
        48
    ysc3839  
       2022-07-16 00:56:19 +08:00
    @u823tg 我又去搜索了下,原来你提到的那几句话是在 README 中,官网 tauri.app 反而没有。
    去看 CLI 的 README 可以看到“Written in Typescript and packaged such that it can be used with npm, pnpm, and yarn, this library provides a node.js runner for common tasks when using Tauri, like yarn tauri dev.” https://github.com/tauri-apps/tauri/tree/dev/tooling/cli/node
    就只是个辅助脚本来的,根本不是 Electron 那样在 app 中用 Node.js 跑后端代码。
    u823tg
        49
    u823tg  
       2022-07-16 01:06:01 +08:00
    @ysc3839 #46 额,我感觉你连这两原理都没搞懂。

    tauri 完全可以用 nodejs 的生态啊
    Electron 和 tauri 两个最根本的区别一个直接封装 chromium , 一个是把主流的浏览器内核做了个抽象层。 至于用啥语言没啥区别。
    别人说的是 Tauri 需要 rust 生态的意思是类似于 Electron 之于 nodejs 的 c++插件
    ysc3839
        50
    ysc3839  
       2022-07-16 01:27:16 +08:00
    @u823tg
    “tauri 完全可以用 nodejs 的生态啊”
    那你说说现在怎么用?该不会是理论上可行,只是没人实现吧?
    我说的问题就是没人实现,所以目前要用 Tauri 就必须会写 Rust ,但是目前 Rust 各类库没有 Node.js 那么完善,写起来可能会遇到一些坑,甚至要自己造轮子。还有学习新语言成本的问题。

    在我看来 Electron 和 Tauri 最根本的区别是后端语言的区别,Electron 能火很大程度上是因为后端语言是 Node.js ,搞前端开发的人简单学习就能上手。在 Electron 之前的 node-webkit 用的就比较多了,曾经很火的代码编辑器 Brackets 也是选择 CEF+Node.js 。同期用 CEF 配合 C++方案的应用则非常少,目前我只知道网易云音乐和 Spotify 仍在持续开发。
    u823tg
        51
    u823tg  
       2022-07-16 01:39:06 +08:00
    @ysc3839 #48 好我的大哥啊,给你说了后端语言用啥没关系。 上面再封装一层就可以了。人家也封装了 js api
    最主要是你写的代码通过后端语言封装和界面去通信。

    或者你可以去 github 搜搜肯定有用 Tauri 写的开源 app

    Tauri 这玩意真除了界面,其他都得 rust 。 这就成了 rust 社区一个玩具。没必要对标 Electron 。它不配
    ysc3839
        52
    ysc3839  
       2022-07-16 01:46:36 +08:00
    @u823tg
    “给你说了后端语言用啥没关系”
    问题是搞开发的人有关系,这就是我说的问题,需要用 Rust 写后端,那就得学习 Rust ,而且 Rust 本身的生态可能也不一定好,最终要实现某些功能可能没有现成的代码,还得自己造轮子。
    感觉你一直再强调技术上可行,我当然知道技术上可行,但是实际开发还得看成本的。“最主要是你写的代码通过后端语言封装和界面去通信”,那你说说为啥用 CEF 配合 C++方案的应用那么少?
    u823tg
        53
    u823tg  
       2022-07-16 02:07:20 +08:00
    @ysc3839 #52 https://juejin.cn/post/7110842588852125710 自己去搜下这种教程。或者自己实际操作下。

    都没用过,我大概搜了 CEF 只对 Chromium 做了精简和封装。提供最基本的。

    Electron ( nodejs->Electron api )

    cef (就提供了 JavaScript 和 C++互操作) 好多工作得开发者做。 你完全可以自己封装出来 Electron api 类似的,只不过绝大多数人没能力而已


    Tauri Electron 这两个是对标的啊。

    建议你文档看不明白,试试 Tauri 和 Electron ,实际操作下。
    klo424
        54
    klo424  
       2022-07-16 08:22:59 +08:00
    c#.NET
    newmlp
        55
    newmlp  
       2022-07-16 10:57:57 +08:00
    @pengtdyd 这话我上大学就听的耳朵生茧了,现在都工作 8 年了还干的好好的。。。。
    zxCoder
        56
    zxCoder  
       2022-07-16 12:34:16 +08:00
    tauri
    chuhemiao
        57
    chuhemiao  
       2022-07-16 13:17:32 +08:00
    先学好 C++和 Rust 吧, 其它的慢慢实践.
    Roojay
        58
    Roojay  
       2022-07-16 13:39:00 +08:00 via Android
    推 tauri 的别坑新手了,这个现在生态不完善,做起来费时费力
    lightjiao
        59
    lightjiao  
       2022-07-16 14:10:00 +08:00
    我都用 Unity 做跨平台客户端开发的
    然后 C# 最近推出了跨平台的 MAUI 可以了解一下
    最后,目前最强的桌面跨平台开发平台是 QT (性能和兼容性),要加上移动端的话似乎是 Flutter 或者 Electron 这种基于 web 的(我没了解过)?
    Features
        60
    Features  
       2022-07-16 15:33:00 +08:00
    - 我精通各种跨平台框架
    - Electron 还是 Flutter
    - Uniapp
    - 噗...
    tairan2006
        61
    tairan2006  
       2022-07-16 15:56:52 +08:00
    Qt > Flutter > Electron
    nicevar
        62
    nicevar  
       2022-07-16 19:50:49 +08:00
    真正想要做东西肯定是 Qt ,想要自己爽就 Electron ,把痛苦留给用户,Electron 只要是 c++/rust 有相应能用的软件,肯定就直接删除了,之前用 Electron 给一个软件做了个外壳,安装后 490M ,modules 就到 300M 。
    FrankHB
        63
    FrankHB  
       2022-07-16 20:17:38 +08:00
    要是实际项目,如果甲方有意见,你没本事洗甲方爸爸脑子,那就该用啥用啥,要么跑路撂担子。

    自己玩倒是随便。反正知道这些东西的缺陷也都要轮一遍。(除了你已经知道的性能问题。)但是不建议没项目需求就浪费时间在具体一种上。
    需要提醒的是,这里没给出项目背景就随便推荐的理由(什么生态……)多数不上道,你得多长点心眼。特别是不要遗漏不会对你的长期发展有好处,反而会锁死技术栈的风险。

    其实有些重要问题不需要多熟练就能看出来,特别是你已经有很多不同基础技术打底的情况下。
    比如性能问题……为什么会有?

    嗯,很好,正好有人推荐 Flutter……就顺带有部分答案了。
    https://github.com/dart-lang/language/issues/490
    (1/1)

    另外 imgui 这种画网页不鸟 DOM 一样不鸟 WIMP metophor 的 GUI 之耻就算没人提我也要比 Flutter 多黑一下的。当然,我不反对观摩一下所谓 immediate mode 的实现,这样才能理解它们如何拉胯。
    xmsz
        64
    xmsz  
       2023-04-18 22:17:31 +08:00
    我最近需要开发一个 PC 端的套壳应用
    首选 electron 生态好 也不用学些新东西
    但是这玩意其实就是安装了一个浏览器,所以对于用户环境还是蛮尴尬的,大小还好,主要是内存占用

    那优化就是用 tarui ,但是这玩意除了大小和内存变小,带来的更多的问题,比如生态,比如需要学习 rust ,比如有很多 webview2 的限制...

    根本还是不能代替...


    现在蛮卡壳的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 713ms · UTC 11:32 · PVG 19:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.