V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaochong
V2EX  ›  程序员

2022 年, desktop app 开发(macos, windows, Linux )的跨平台框架是什么?

  •  
  •   xiaochong ·
    zhichenghou · 2022-08-25 11:18:30 +08:00 · 13749 次点击
    这是一个创建于 582 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人 JAVA 后端,有一些 react 的前端经验。打算开发一个 mac os 的小工具 app ,想了解下目前的跨平台框架对 desktop 的支持咋样?

    1. fluter
    2. react native
    3. 其他

    关心几点:

    1. 成熟度和活跃性,未来发展
    2. 通用性,能否向 mobile ( ios ,android )和 tv ( tvOs 等)迁移

    能沿用现在技术栈最好,也不很排斥新语言。感谢!

    第 1 条附言  ·  2022-08-25 11:53:09 +08:00
    补充:
    - 个人项目
    - 目前无太复杂音视频功能,比较基本
    第 2 条附言  ·  2022-08-25 14:51:16 +08:00
    目前的推荐情况:
    electron 3
    tauri 4
    flutter 3
    Jetbrains Compose 2
    wails 2
    .NET MAUI 4
    React Native 1
    第 3 条附言  ·  2022-08-25 18:42:31 +08:00
    目前看起来 flutter 的推荐最多。

    还有提到 PWA 的,这个目前成熟了吗?
    124 条回复    2023-05-15 11:14:43 +08:00
    1  2  
    zhangxzh
        1
    zhangxzh  
       2022-08-25 11:21:31 +08:00
    Compose for Desktop ??
    做过后端的话, 也不需要学新语言
    hex2en
        2
    hex2en  
       2022-08-25 11:22:19 +08:00   ❤️ 7
    electron?
    xiaochong
        3
    xiaochong  
    OP
       2022-08-25 11:25:02 +08:00
    typo : flutter
    xiaochong
        4
    xiaochong  
    OP
       2022-08-25 11:25:20 +08:00
    @zhangxzh 去了解一下
    dreasky
        5
    dreasky  
       2022-08-25 11:34:55 +08:00
    electron flutter 现在对桌面支持还不太好 还有个 rust 的 tauri
    huohei
        6
    huohei  
       2022-08-25 11:38:38 +08:00
    如果想迁移到移动端,flutter 可以考虑
    Vaspike
        7
    Vaspike  
       2022-08-25 11:38:38 +08:00   ❤️ 1
    推荐一楼说的 Jetbrains Compose
    在这上面我已经产出多个软件,跨平台 Kotlin 走的 jvm 生态没得说,移动端的话,这个框架本身就是 Compose Jetpapck 移植到桌面端的
    zhuweiyou
        8
    zhuweiyou  
       2022-08-25 11:40:04 +08:00
    公司项目还是个人项目? 公司不要用偏门技术,招不到人来接手.
    Bijiabo
        9
    Bijiabo  
       2022-08-25 11:42:51 +08:00
    建议明确一下需求,如果涉及到一些非界面相关的技术,例如音频、视频等,可能还要考虑硬件加速等场景,可能跨平台的开发相比选择特定平台相关的技术来说,更加痛苦。
    stoluoyu
        10
    stoluoyu  
       2022-08-25 11:54:27 +08:00
    最近看到个 wails ,还比较新。
    ysc3839
        11
    ysc3839  
       2022-08-25 11:59:39 +08:00
    只考虑 Windows 和 macOS 的话可以试试 React Native ,否则建议 Web
    respawn
        12
    respawn  
       2022-08-25 12:09:28 +08:00   ❤️ 1
    .NET MAUI

    仅提供选项

    巨硬家的东西有个特色,有挺多人骂,一边骂一边用。
    nojsja
        13
    nojsja  
       2022-08-25 12:11:49 +08:00
    有个新框架 tauri 可以了解一下,不过得学 rust ,界面就用 react 的 web 生态
    sardina
        14
    sardina  
       2022-08-25 12:13:13 +08:00 via iPhone
    flutter
    Scirocco
        15
    Scirocco  
       2022-08-25 12:16:56 +08:00
    flutter 我用下来感觉还是移动端为主,就是开发移动端顺便开发一个能用的桌面端这种感觉
    renmu
        16
    renmu  
       2022-08-25 12:22:02 +08:00 via Android   ❤️ 1
    electron 就是跨端霸主
    dcsuibian
        17
    dcsuibian  
       2022-08-25 12:43:35 +08:00   ❤️ 1
    /t/861083
    从功能实现上来说,那 Electron 应该是第一,毕竟 web 天生的跨平台优势。但是卡,要不是卡也就不需要别的了。

    只有追求性能才考虑其它的。如果是 Flutter on Desktop 和 React Native for Windows + macOS 。那还是选前者吧。
    1 、这俩都是移动端为主的,桌面端都还不咋样
    2 、前者是 Flutter 官方在搞,后者是巨硬在搞而不是 Facebook 本家
    3 、React Native 的原理是转成原生组件,安卓和 IOS 的差异已经是个问题了,现在 Windows 和 macOS 再来,不敢想。
    thtznet
        18
    thtznet  
       2022-08-25 12:50:29 +08:00   ❤️ 1
    .NET MAUI +1
    mxT52CRuqR6o5
        19
    mxT52CRuqR6o5  
       2022-08-25 12:54:37 +08:00
    RN 感觉不太行,因为桌面端的支持不是官方的,RN 源头上设计时就不会考虑桌面端的各种特性
    相比之下 flutter 的桌面端是官方做的
    lozzow
        20
    lozzow  
       2022-08-25 13:04:07 +08:00
    qt ?
    theohateonion
        21
    theohateonion  
       2022-08-25 13:13:05 +08:00
    tarui
    licoycn
        22
    licoycn  
       2022-08-25 13:22:25 +08:00
    Wails
    Fyne
    Electron
    Tauri
    Flutter
    SingeeKing
        23
    SingeeKing  
       2022-08-25 13:22:58 +08:00
    只有纯桌面端的话,tauri 不二之选
    276562578
        24
    276562578  
       2022-08-25 13:23:01 +08:00
    只是桌面的话 electron ,加上移动端建议 flutter
    276562578
        25
    276562578  
       2022-08-25 13:23:19 +08:00
    当然如果能 web 还是 web
    EvanQu
        26
    EvanQu  
       2022-08-25 13:33:29 +08:00   ❤️ 1
    .net 的 maui?
    icyalala
        27
    icyalala  
       2022-08-25 13:46:19 +08:00
    只考虑桌面端那就 Electron ,前端技术栈,非常成熟,生态完善,只是打包大。
    还要考虑移动端,那目前只有 Flutter 看上去能用,但生态不如 Electron 成熟。

    其他更不成熟的方案,我看好 Compose ,也是 skia 渲染,能保证平台一致性。至于 tauri ,那又用回系统 WebView 了。。
    murmur
        28
    murmur  
       2022-08-25 13:48:38 +08:00
    你们真用过 flutter 开发的桌面 app 、
    sinnosong1
        29
    sinnosong1  
       2022-08-25 13:50:45 +08:00   ❤️ 1
    Maui ,或者 Avaloina 。写 java 的 1 周内学不会 C#可以直接不要干这行了
    zhailei2011
        30
    zhailei2011  
       2022-08-25 13:52:34 +08:00
    tarui+1
    xiaojun996
        31
    xiaojun996  
       2022-08-25 14:49:42 +08:00
    electron
    wanguorui123
        32
    wanguorui123  
       2022-08-25 14:52:40 +08:00
    electron 套壳
    zjsxwc
        33
    zjsxwc  
       2022-08-25 15:03:45 +08:00
    electron
    elechi
        34
    elechi  
       2022-08-25 15:15:43 +08:00
    flutter 或 Jetbrains Compose
    tarui 太新,说不准有啥坑
    maui 桌面不行,目前默认不支持 exe 生成
    churchill
        35
    churchill  
       2022-08-25 15:22:47 +08:00
    有没有可能 C++ & ImGui
    跨平台+高性能
    coolair
        36
    coolair  
       2022-08-25 15:25:02 +08:00   ❤️ 2
    说实话,不在乎性能可以上 electron ,对性能有要求只有 QT ,其他都不行,花里胡哨+追新技术并不适合做产品,玩玩还可以。。
    0312birdzhang
        37
    0312birdzhang  
       2022-08-25 17:06:52 +08:00   ❤️ 2
    竟然只有 2 个说 Qt 的🥲
    murmur
        38
    murmur  
       2022-08-25 17:11:47 +08:00   ❤️ 2
    @0312birdzhang 那毕竟 QT 是真的干活的,QT 可是有 wps 这种级别的软件撑着,我感觉 flutter 这些东西在国内完全是为了绩效而生,他没有 h5 的生态基础,没有 html 、jsx 这些遍历的语法,错过了 app 野蛮发展的时期,等 flutter 吹起来的时候,国内 app 进入减量时代,反倒是小程序嘎嘎爆杀
    LindsayZhou
        39
    LindsayZhou  
       2022-08-25 17:13:12 +08:00
    我比较喜欢 QT 一点。
    LindsayZhou
        40
    LindsayZhou  
       2022-08-25 17:16:49 +08:00   ❤️ 1
    @LindsayZhou 如果去问 archcn 社区的人,估计不会给你推荐 electron ,因为 wayland 的支持现在还不太好,特别是中文输入法,现在我的 chromium 的 fcitx5 中文候选框都乱跑。
    (本来想换行的,按到 Ctrl 了,所以分了两条回复)
    iamqk
        41
    iamqk  
       2022-08-25 17:19:48 +08:00
    似乎有梯子是用 qt 做的,感觉 mac 下凑合用
    zjsxwc
        42
    zjsxwc  
       2022-08-25 17:20:28 +08:00
    limiter
        43
    limiter  
       2022-08-25 17:21:08 +08:00
    @murmur c++学习成本太高了,时间不等人,看好 flutter
    obwj
        45
    obwj  
       2022-08-25 17:24:30 +08:00
    flutter
    whoami9894
        46
    whoami9894  
       2022-08-25 17:26:20 +08:00
    QT 。

    @theohateonion #21 @zhailei2011 #30 @elechi #34
    一个人 typo ,两个人复制粘贴
    flowerpiggy
        47
    flowerpiggy  
       2022-08-25 17:26:32 +08:00
    nw.js
    zyxk
        48
    zyxk  
       2022-08-25 17:28:36 +08:00
    为什么这么多推荐 tauri 的, 且不说需要学 rust , 10 及以下系统还要装运行库, 这点就不适合小工具了吧.
    youxiachai
        49
    youxiachai  
       2022-08-25 17:30:48 +08:00
    @murmur flutter 3.0.5 准备走微软应用商店流程上架了
    youxiachai
        50
    youxiachai  
       2022-08-25 17:35:05 +08:00
    @murmur 我是上一年看了这篇文章后面试一下用 flutter 做桌面 app
    https://blog.whidev.com/native-looking-desktop-app-with-flutter/

    真有复杂需求 dart::ffi 其实也可以解决问题..我觉得 flutter 开发桌面端其实问题不大
    mejee
        51
    mejee  
       2022-08-25 17:39:52 +08:00
    会 Java 的话,感觉可以尝试下 flutter ,dart 和 java 很像
    Kasumi20
        52
    Kasumi20  
       2022-08-25 18:00:27 +08:00
    前后端分离,exe 跑服务,UI 跑在浏览器里
    WebKit
        53
    WebKit  
       2022-08-25 18:18:17 +08:00 via Android
    Jetbrains Compose 不错
    treblex
        54
    treblex  
       2022-08-25 18:27:58 +08:00
    manjaro gnome wayland 下,flutter dev 运行还是比 gtk 慢一点,空白窗口有差不多 1 秒
    santom
        55
    santom  
       2022-08-25 18:34:49 +08:00
    如果只是简单的小工具,PWA 怎么样?
    debuggerx
        56
    debuggerx  
       2022-08-25 18:48:50 +08:00
    @murmur https://github.com/debuggerx01/dde_gesture_manager
    flutter 做的客户端(还有 web 版),dart 写的后端,已经上架 deepin/UOS 的应用商店
    xiaochong
        57
    xiaochong  
    OP
       2022-08-25 18:51:05 +08:00
    @debuggerx 学习一下
    duan602728596
        58
    duan602728596  
       2022-08-25 18:54:46 +08:00   ❤️ 4
    根据 electron 好几年的开发经验,我推荐 electron ,原因如下:
    1. 从数据持久化上来讲,浏览器原生支持 localStorage 、sessionStorage 、IndexedDB 等,不需要在自己引入本地存储的解决方案
    2. 开启多线程比较容易,原生 WebWorker 支持
    3. 因为你使用了 react ,可以说复杂的界面的切换就很容易了(HashHistory)
    4. 打包跨平台,在 mac 上可以编译 mac 、linux 、window
    5. 可以在主线程开启子线程,启动其他服务
    6. electron 原生支持一些系统功能,比如文件选择器、多窗口等等
    7. 可以使用 electron-store 这种来存储相关配置
    反正你选择的时候也要考虑到周边的功能,有的时候这些反而会阻碍你的开发
    ysc3839
        59
    ysc3839  
       2022-08-25 19:00:57 +08:00
    关于 tauri ,我觉得主要问题是要用 Rust 写后端,对前端开发者不友好。
    很多人吹 tauri 只是因为它是调用系统 WebView ,不需要自带一个 WebView ,完全没考虑到对前端开发者易用性问题。
    个人认为目前市场需要一个 Node.js+系统 WebView 的框架,但可惜并没有人开发。
    hst001
        60
    hst001  
       2022-08-25 19:13:56 +08:00   ❤️ 1
    flutter desktop 目前虽说是 stable ,但有些问题还是蛮影响的,比如字体、platform view
    tauri 从 roadmap 上看,还不够成熟
    目前最成熟的应该还是 electron

    如果要考虑未来发展,那无疑是 flutter ,背靠大树
    grewer
        61
    grewer  
       2022-08-25 19:21:06 +08:00
    tauri
    roundgis
        62
    roundgis  
       2022-08-25 19:23:58 +08:00 via Android
    @Vaspike 調用系統 api 硬件接口方便嗎?
    AItsuki
        63
    AItsuki  
       2022-08-25 19:41:32 +08:00
    electron, 几乎不用考虑别的了,如果你不想折腾的话。
    0xZhangKe
        64
    0xZhangKe  
       2022-08-25 19:52:24 +08:00
    Jetpack Compose
    seakingii
        65
    seakingii  
       2022-08-25 21:19:08 +08:00   ❤️ 1
    微软的.Net MAUI 可能会有比较好的发展前景,不过目前还不是很成熟,至少以下两点还不行:


    1 Windows : 不能生成单独的一个 EXE

    2 Linux : 还不能生成 Linux 的包, 目前只有微软的一个工程师在做探索


    目前已经可以生成:


    1 Windows 上 MSIX 的安装包

    2 Android

    3 iOs

    4 MacOs
    xuweifeng1987
        66
    xuweifeng1987  
       2022-08-25 21:42:56 +08:00
    有 java 基础,首推 javafx 啊,分分钟就上手了
    fox0001
        67
    fox0001  
       2022-08-25 21:46:54 +08:00 via Android
    本来想玩玩 QT ,只是需要 C++…
    nick0x01
        68
    nick0x01  
       2022-08-25 22:37:25 +08:00
    当然是 Qt6 ,而且高分辨率适配也做的挺好了
    reallittoma
        69
    reallittoma  
       2022-08-25 22:39:52 +08:00
    看下来只有一个人提到 Avalonia ,我觉得它是目前最稳定好用的类 WPF 跨平台方案了。
    duke807
        70
    duke807  
       2022-08-25 22:42:12 +08:00 via Android
    純 html5
    或者 html5 + python 後台
    或者 wxWidgets
    reeco
        71
    reeco  
       2022-08-25 23:35:32 +08:00 via iPhone
    你在这问不就是盲人摸象吗,有几个人开发过这玩意
    Bijiabo
        72
    Bijiabo  
       2022-08-25 23:52:45 +08:00
    看了需求补充,感觉优先 Electron ,可以尝试 React Native ,绝对不要用 Flutter
    RickyC
        73
    RickyC  
       2022-08-26 00:25:14 +08:00
    跨端方案

    桌面: electron
    移动端: flutter
    观望中: webview2, maui
    dixeran
        74
    dixeran  
       2022-08-26 00:46:32 +08:00
    Tauri/Wails/Electron 是一类东西吧..自带浏览器和调用系统浏览器的区别,习惯哪个语言的 binding 选哪个。没有特殊理由不要选 QT ,人家大厂能组自己的控件库,个人开发者在 QT 上折腾 UI 基本上没有做得好看的。
    jones2000
        75
    jones2000  
       2022-08-26 01:02:03 +08:00
    看项目预算了,钱少就上 web 。 预算充足就可以考虑 QT 什么的了。
    Vaspike
        76
    Vaspike  
       2022-08-26 08:49:22 +08:00
    @roundgis #62
    我调的比较多的是串口,最好的库是: https://github.com/java-native/jssc
    其他的我觉得也问题不大
    likeme
        77
    likeme  
       2022-08-26 08:53:55 +08:00
    用过 electron 开发的的桌面端软件好多,推荐 electron 。
    MeteorCat
        78
    MeteorCat  
       2022-08-26 09:07:36 +08:00 via Android
    electron ,默认跨平台还得开发简单我就选他
    murmur
        79
    murmur  
       2022-08-26 09:13:47 +08:00
    @reeco 网易云音乐,钉钉这些新一批跨平台桌面应用都是 electron 或者类 electron ,不是 electron 也是 cef
    不同的是

    1 、他们的 cef 或者 electron 有没有魔改过?
    2 、除了 cef 或者 electron ,别人自行或者使用的第三方库有多少?

    至于 web 部分用什么不重要,先排除一个 flutter ,用 vue 都比 flutter 开发网页应用靠谱
    99999999999
        80
    99999999999  
       2022-08-26 09:19:24 +08:00
    公司用的 qt ,也是为了跨平台。二次开发用 swig 生成其它语言接口
    YUyu101
        81
    YUyu101  
       2022-08-26 09:20:11 +08:00
    electron 不想折腾
    rocododd
        82
    rocododd  
       2022-08-26 09:26:27 +08:00
    compose +1
    zhangxzh
        83
    zhangxzh  
       2022-08-26 09:29:02 +08:00 via Android
    好厉害,qt 都出来了
    missdeer
        84
    missdeer  
       2022-08-26 09:31:10 +08:00
    居然没人提到 Qt ,我刚刚搜了一下硬盘上的 Qt5Core.dll ,发现腾讯会议,企业微信,罗技,微软 OneDrive 都用到 Qt 了,远超我想像
    newmlp
        85
    newmlp  
       2022-08-26 09:35:36 +08:00
    @missdeer 因为 op 不会 cpp
    marcong95
        86
    marcong95  
       2022-08-26 09:38:55 +08:00
    @zyxk #48 好像微软已经通过 Windows Update 推这东西了,刚查了下,我公司的电脑也在几天前的自动装上了。家里那台应该更早,因为家里有用 365

    Microsoft 365 Apps 开始提供依赖于 Microsoft Edge WebView2 的新功能或改进功能。将从 2021 年 3 月 8 日开始安装 WebView2 Runtime 。
    angrylid
        87
    angrylid  
       2022-08-26 09:40:56 +08:00 via Android
    也算是 v 站月经问题了。从你的技术栈出发最舒服的方式就是后台挂个 Java HTTP Server 然后打开 localhost:3000 里面是个 React SPA
    如果就是写个小工具足够了。
    当然这样的东西要分发就麻烦了,迁移到移动端似乎也不太可行。
    Chenhe
        88
    Chenhe  
       2022-08-26 09:42:56 +08:00 via Android
    有点期待 compose desktop 。也有点期待 flutter web 。(真的很不喜欢 js/ts ,学不下去)
    debuggerx
        89
    debuggerx  
       2022-08-26 09:44:03 +08:00
    @murmur 网易云音乐,钉钉 这些能叫新?牛逼。。
    移动端 flutter 是稳的,桌面和 web 不好说,但是 electron 肯定要被淘汰的
    pkwenda
        90
    pkwenda  
       2022-08-26 09:47:24 +08:00
    真的强烈推荐楼主深入调研 flutter ,现在真的不错,万一以后写移动端呢
    murmur
        91
    murmur  
       2022-08-26 09:53:38 +08:00
    @debuggerx 不新么,现在是减量市场,其余的东西我没有需求干嘛要安装,你做出来没用啊
    mh
        92
    mh  
       2022-08-26 09:54:02 +08:00
    qt 、electron 路过
    debuggerx
        93
    debuggerx  
       2022-08-26 09:56:41 +08:00
    @murmur 都是老古董了,而且在 linxu 下都有一堆问题。越是减量市场,还能保持发展的,越是说明优越性。按照你的说法,其实大家都不要写桌面程序了,LZ 也没必要选了,反正没人用
    lijy91
        94
    lijy91  
       2022-08-26 09:57:03 +08:00   ❤️ 2
    我已经为各位填了一年的坑了,用 flutter desktop 的可以看看这里 https://github.com/leanflutter
    debuggerx
        95
    debuggerx  
       2022-08-26 09:59:38 +08:00
    @murmur qt 、electron 、flutter 的桌面应用我都做过,都是小工具级别,都是同时保证三个桌面可用,不会乱说话。哪怕就只是做给自己用,作为开发,我也得选问题少的、写着爽的吧
    murmur
        96
    murmur  
       2022-08-26 10:01:39 +08:00
    @debuggerx 有道理,所以有没有可能,跨平台是最大的问题,比如苹果他自己就不出应用,safari 和 itunes 都不给 windows 更新了,更别提 linux 支持
    debuggerx
        97
    debuggerx  
       2022-08-26 10:06:27 +08:00
    @murmur 专有软件和通用软件能一样?所有还是要否定 LZ 的问题是伪命题?——跨平台开发是错误的
    murmur
        98
    murmur  
       2022-08-26 10:12:23 +08:00   ❤️ 1
    @debuggerx 跨平台是个伪命题,这个词把人忽悠瘸了,应该叫复用,最多是复用多少,尤其是移动端和桌面端复用,这本身就是个难题,界面都得大改
    ufan0
        99
    ufan0  
       2022-08-26 10:22:41 +08:00
    @murmur #98 深刻体会到你说的场景,个人开发起初若太重视跨平台是非常痛苦的。归根结底还是复用的多少。
    qianlifeng
        100
    qianlifeng  
       2022-08-26 10:25:55 +08:00
    @lijy91 很赞, 之前就关注了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2803 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.