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

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

  •  
  •   xiaochong ·
    zhichenghou · 220 天前 · 11032 次点击
    这是一个创建于 220 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    1. fluter
    2. react native
    3. 其他

    关心几点:

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

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

    第 1 条附言  ·  220 天前
    补充:
    - 个人项目
    - 目前无太复杂音视频功能,比较基本
    第 2 条附言  ·  220 天前
    目前的推荐情况:
    electron 3
    tauri 4
    flutter 3
    Jetbrains Compose 2
    wails 2
    .NET MAUI 4
    React Native 1
    第 3 条附言  ·  220 天前
    目前看起来 flutter 的推荐最多。

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

    仅提供选项

    巨硬家的东西有个特色,有挺多人骂,一边骂一边用。
    nojsja
        13
    nojsja  
       220 天前
    有个新框架 tauri 可以了解一下,不过得学 rust ,界面就用 react 的 web 生态
    sardina
        14
    sardina  
       220 天前 via iPhone
    flutter
    Scirocco
        15
    Scirocco  
       220 天前
    flutter 我用下来感觉还是移动端为主,就是开发移动端顺便开发一个能用的桌面端这种感觉
    renmu
        16
    renmu  
       220 天前 via Android   ❤️ 1
    electron 就是跨端霸主
    dcsuibian
        17
    dcsuibian  
       220 天前   ❤️ 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  
       220 天前   ❤️ 1
    .NET MAUI +1
    mxT52CRuqR6o5
        19
    mxT52CRuqR6o5  
       220 天前
    RN 感觉不太行,因为桌面端的支持不是官方的,RN 源头上设计时就不会考虑桌面端的各种特性
    相比之下 flutter 的桌面端是官方做的
    lozzow
        20
    lozzow  
       220 天前
    qt ?
    theohateonion
        21
    theohateonion  
       220 天前
    tarui
    licoycn
        22
    licoycn  
       220 天前
    Wails
    Fyne
    Electron
    Tauri
    Flutter
    SingeeKing
        23
    SingeeKing  
       220 天前
    只有纯桌面端的话,tauri 不二之选
    276562578
        24
    276562578  
       220 天前
    只是桌面的话 electron ,加上移动端建议 flutter
    276562578
        25
    276562578  
       220 天前
    当然如果能 web 还是 web
    EvanQu
        26
    EvanQu  
       220 天前   ❤️ 1
    .net 的 maui?
    icyalala
        27
    icyalala  
       220 天前
    只考虑桌面端那就 Electron ,前端技术栈,非常成熟,生态完善,只是打包大。
    还要考虑移动端,那目前只有 Flutter 看上去能用,但生态不如 Electron 成熟。

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

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

    真有复杂需求 dart::ffi 其实也可以解决问题..我觉得 flutter 开发桌面端其实问题不大
    mejee
        51
    mejee  
       220 天前
    会 Java 的话,感觉可以尝试下 flutter ,dart 和 java 很像
    Kasumi20
        52
    Kasumi20  
       220 天前
    前后端分离,exe 跑服务,UI 跑在浏览器里
    WebKit
        53
    WebKit  
       220 天前 via Android
    Jetbrains Compose 不错
    treblex
        54
    treblex  
       220 天前
    manjaro gnome wayland 下,flutter dev 运行还是比 gtk 慢一点,空白窗口有差不多 1 秒
    santom
        55
    santom  
       220 天前
    如果只是简单的小工具,PWA 怎么样?
    debuggerx
        56
    debuggerx  
       220 天前
    @murmur https://github.com/debuggerx01/dde_gesture_manager
    flutter 做的客户端(还有 web 版),dart 写的后端,已经上架 deepin/UOS 的应用商店
    xiaochong
        57
    xiaochong  
    OP
       220 天前
    @debuggerx 学习一下
    duan602728596
        58
    duan602728596  
       220 天前   ❤️ 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  
       220 天前
    关于 tauri ,我觉得主要问题是要用 Rust 写后端,对前端开发者不友好。
    很多人吹 tauri 只是因为它是调用系统 WebView ,不需要自带一个 WebView ,完全没考虑到对前端开发者易用性问题。
    个人认为目前市场需要一个 Node.js+系统 WebView 的框架,但可惜并没有人开发。
    hst001
        60
    hst001  
       220 天前   ❤️ 1
    flutter desktop 目前虽说是 stable ,但有些问题还是蛮影响的,比如字体、platform view
    tauri 从 roadmap 上看,还不够成熟
    目前最成熟的应该还是 electron

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


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

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


    目前已经可以生成:


    1 Windows 上 MSIX 的安装包

    2 Android

    3 iOs

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

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

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

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

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