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

打算自己做一个小工具,想能 Linux 、Win 和 Android 跨平台,但不清楚具体该用什么框架

  •  
  •   bluearc · 2024-02-04 13:35:17 +08:00 · 7840 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人目前只有 C++、Python 的编程经验,比较熟悉 C++和相关技术;
    以下是最近在考虑的:
    qt:很熟悉,个人比较偏向,但 qt 在 Android 上好像并没有见到什么应用使用,是有什么坑吗?
    flutter:不太了解,但看着好像是性能更好的 electron ?
    electron:最流行的方案,但我并不怎么会 web 开发,js 、html 、css 也没怎么用过

    大伙们有什么建议吗?或者有什么推荐的?
    56 条回复    2024-04-08 16:01:31 +08:00
    codehz
        1
    codehz  
       2024-02-04 13:40:27 +08:00
    qt 在安卓其实也有用,不过都是写工业领域的东西(好像还有人移植了 libreoffice
    williamfzc
        2
    williamfzc  
       2024-02-04 13:42:19 +08:00   ❤️ 1
    先看看你的工具关注的点有哪些(例如浏览器支持、性能、兼容性)
    再去拿需求、商业模型试套下几个框架看看能不能满足
    radiorz
        3
    radiorz  
       2024-02-04 13:46:57 +08:00
    要跨桌面和移动端最好就是 flutter 。
    electron 都搞不了 android 。
    road0001
        4
    road0001  
       2024-02-04 13:58:06 +08:00
    其实最方便的跨平台就是 web 了,而 electron 本身就是基于 web 的,所以使用 electron 是可行的。手机端没有 electron ,但你可以写一个只有 webview 的 app ,然后在里面加载你的页面。用这种方式写的工具,要注意安卓不能用 electron 提供的和系统交互的 API (比如文件系统相关的,比如 node 相关的),要在 app 里为你的工具写和系统交互的 API 。
    FakerLeung
        5
    FakerLeung  
       2024-02-04 14:02:09 +08:00
    跨安卓直接否决了 electron 啊,为啥还有这个选项?
    andyskaura
        6
    andyskaura  
       2024-02-04 14:02:41 +08:00
    具体是什么功能呢?与系统交互较深的应用要求跨端都很折磨
    monsterx2a
        7
    monsterx2a  
       2024-02-04 14:13:06 +08:00
    maui blazor 考虑下
    djnwzs
        8
    djnwzs  
       2024-02-04 14:14:32 +08:00
    qt 或者 flutter ,其他不推荐
    hez2010
        9
    hez2010  
       2024-02-04 14:28:34 +08:00
    又跨移动端又跨桌面端的话可以试试 Avalonia 。
    wjfz
        10
    wjfz  
       2024-02-04 14:31:54 +08:00
    微信小程序。
    90xchun
        11
    90xchun  
       2024-02-04 14:32:39 +08:00
    我觉得 web 跨端最好了,而且学习成本低,更新也快。要不你跳出 cs 模式的软件,搞搞 bs 得,有浏览器就能用
    bluearc
        12
    bluearc  
    OP
       2024-02-04 14:54:24 +08:00
    @codehz 谢谢,这下否决 qt 了(
    bluearc
        13
    bluearc  
    OP
       2024-02-04 14:56:01 +08:00
    @FakerLeung 这样嘛,总是听到移动端很多 app 是 web 套壳,就以为 electron 也可以用了(😂
    qcbf111
        14
    qcbf111  
       2024-02-04 14:59:09 +08:00
    你们都忽略 c#呢?堪称最强跨平台语言,从十多年前暴雪就用 c#做跨平台游戏,到现在做的原神 android ,ios ,windows ,mac ,web ,甚至 ps ,xbox ,switch 都跨,而且性能强悍,算是最强性能跨平台语言之一吧。当然了 这是得益于 unity 因此哪怕不是游戏,但凡做 3D APP 都是最佳选择高性能且轻巧(相对 qq 自带虚幻),如果做传统静态 2D APP 或许不是个好选择。
    bluearc
        15
    bluearc  
    OP
       2024-02-04 15:03:12 +08:00
    @wjfz 应该不适合,用小程序可能要阉割功能了
    mumbler
        16
    mumbler  
       2024-02-04 15:07:33 +08:00
    熟悉 C++,当然是 c++ builder 啊,用 firemonkey 框架通杀 linux,win,android,ios 平台

    桌面应用开发 delphi/c++ builder 一直是王者
    bluearc
        17
    bluearc  
    OP
       2024-02-04 15:12:48 +08:00
    具体功能涉及大量音频处理,除此之外没有什么需要大量计算的地方,会在本地运行用于处理音频的模型;不过我并不是很了解安卓开发,但是还想折腾下用用 npu ,不知道靠谱不靠谱?
    bluearc
        18
    bluearc  
    OP
       2024-02-04 15:16:51 +08:00
    @90xchun 是有在考虑
    kneo
        19
    kneo  
       2024-02-04 15:42:24 +08:00 via Android
    移动端开发就 flutter 。桌面端优先就 qt 。
    qt 可以搞安卓,有些小坑,我之前听说本地文件打开框有点什么如果你不熟悉。
    Haku
        20
    Haku  
       2024-02-04 15:49:46 +08:00
    建议 python 开发后端,自己搞个网页。
    前端可以让 chatgpt 写,我自己就用这个写了个可以用来处理音频的工具,也是 0 前端经验。
    有兴趣可以看下。
    https://aicosers.com/
    Jamy
        21
    Jamy  
       2024-02-04 15:52:30 +08:00
    c++ 的话 cocos2d 了解下
    Haku
        22
    Haku  
       2024-02-04 15:56:14 +08:00
    @Haku 才发现你也是音频工具,不过我这边是处理过程放到了服务器上进行,异步处理后发送到用户提供的邮箱。总之前端这块 chatgpt 其实可以代劳很多了,自己随便看看代码进行修改下就可以拿来用。
    BORBER
        23
    BORBER  
       2024-02-04 15:58:41 +08:00
    tauri 最近 beta 出了 支持 win linux mac Android ios
    joyanhui
        24
    joyanhui  
       2024-02-04 16:07:56 +08:00
    你要跨桌面和移动 flutter ,肯定是首选 。其次只能是 react native 。其他你就别考虑了。

    flutter 和 rn 都可以直接调用 c++ 的动态库,

    react native 的坑并不比 flutter 少。

    不管 rn 还是 electron 你不熟悉 js css 会发现后面你还要学 vue/react typescript,虽然不难,但水也其实也很深也不是看起来那么轻松

    electron 在移动端 不靠谱,直接排除。除非你移动端是 webapp 就可以搞定,但是你不熟悉 js ....所以还是排除

    QT 别人有说了我就不重复了。

    说 flutter 的几个缺点 你自己考量:

    ui 的嵌套地狱,其实也还好,强迫自己适应呗,自己多封装。

    dart 语言的问题,个人认为 dart 除了轮子少(其实现在不少了),其他都还不错,入门简单 装完环境就直接开始写就好了。C# java 很接近 和 C++也相近 。性能也不差。你熟悉 C++压根不用专门学 dart ,装完环境直接开撸就行。有 copilot 直接面向 ai 编程就好了。

    pc 端的 webview ,目前只有简单的实现 没有 electron 那么成熟,可以说还有点不太靠谱,这要看你用不到得到了。移动端的 webview 没问题

    pc 端的多窗口,目前只有第三方实现,但是也能用。这方面我没有了解太多。

    第三方 ui 组件库比较少也比较简陋,很多样式需要自己撸,没法复用 vue react 的轮子。这要看你的项目的 ui 多复杂了。

    flutter 的 StreamBuilder 和 FutureBuilder ValueListenableBuilder 有一些阴间,需要点时间适应。
    joyanhui
        25
    joyanhui  
       2024-02-04 16:11:47 +08:00
    补一条 pc 端的菜单实现 flutter 弄也有点坑。
    heora
        26
    heora  
       2024-02-04 16:15:32 +08:00
    @bluearc electron 本质还是使用的 html/css ,只要你做好配置,完全可以编译出两套代码,适合 pc 和 客户端的。当然 pc 功能要阉割掉调用原生能力的内容。
    ExplodingFKL
        27
    ExplodingFKL  
       2024-02-04 16:27:23 +08:00   ❤️ 1
    来个不那么正常的 :

    Kotlin Multiplatform

    这个不符合楼主的技术栈,但确实是三端支持
    moooxin
        28
    moooxin  
       2024-02-04 16:54:16 +08:00
    不要吧桌面和移动端。用一个给跨了。
    走不通的
    sakuragiit
        29
    sakuragiit  
       2024-02-04 16:55:24 +08:00
    flutter 吧
    bluearc
        30
    bluearc  
    OP
       2024-02-04 16:56:25 +08:00
    @Haku #22 我这个没有用户,自己弄着玩的,所以要本地处理😶‍🌫️
    bluearc
        31
    bluearc  
    OP
       2024-02-04 16:57:18 +08:00
    @joyanhui #24 谢谢您写这么多,基本上是打算用 flutter 了🙇‍
    GreatLiXin
        32
    GreatLiXin  
       2024-02-04 17:07:18 +08:00
    react/electron+reactNative?
    lwjlol
        33
    lwjlol  
       2024-02-04 17:25:27 +08:00
    https://github.com/gskinnerTeam/flutter-wonderous-app 这是 flutter 的 showcase , mac windows android mac
    lujiaxing
        34
    lujiaxing  
       2024-02-04 17:53:18 +08:00 via Android
    @bluearc 啊,那涉及到音频处理的话,那可能就只能推荐 Avalonia 了。。能做高效数据处理,能跨端跨平台,开发简单,就只有这一个选择。

    js 处理音频比较扯.

    不过也可以 C++ 负责处理音频,提供接口给 electron / cordova 调用。跟 QQNT 一样。。。。。不过既然你对 C++ 也不熟,学 C++ 起码半年,我也就不推荐了,
    lujiaxing
        35
    lujiaxing  
       2024-02-04 17:55:12 +08:00 via Android
    @FakerLeung 你是不是没听说过一个叫 Cordova 的东西?
    lujiaxing
        36
    lujiaxing  
       2024-02-04 17:58:29 +08:00 via Android
    @FakerLeung 当然我也不推荐 Electron. 因为他这边涉及音频处理, 必定涉及到大量内存数据运算. 而 Node 在这方面是很弱的. 效率也非常差. 一般像他这种都是 C++ 做算法, 前端套个漂亮的界面来实现相关的功能. 但是既然楼主对 C++ 也不了解,那这种方式显然也不是最优解。
    lujiaxing
        37
    lujiaxing  
       2024-02-04 17:59:53 +08:00 via Android
    哦,看错了,楼主对 C++ 熟悉,既然熟悉那就 C++ 做算法,前端无论是用
    Cordova + Electron
    还是 Avalonia 都无所谓啊
    MRG0
        38
    MRG0  
       2024-02-04 18:19:56 +08:00
    网页套壳
    beginor
        39
    beginor  
       2024-02-04 20:34:03 +08:00 via Android
    会 C++的话,用 C#也会很容易上手的, 跨平台的话可以试试 Avalonia ,还可以 Aot 编译,性能接近原生了
    XiLingHost
        40
    XiLingHost  
       2024-02-04 20:51:47 +08:00
    bevy/egui/slint 都支持多平台了,但是功能都还比较弱,如果对 rust 比较熟悉可以考虑
    Nosub
        41
    Nosub  
       2024-02-04 21:51:23 +08:00 via iPhone   ❤️ 1
    我怎么感觉没有一个人回答到核心问题上面来,就是 OP 想的太多,做的太少,你什么应用需要跨这么多平台,腾讯都不敢这么玩,玩具应用先做自己熟悉,使用的平台就可以了,搞不好你自己写到一半没用户就放弃了,或是等你写完已经有更好的工具出现了,太多这种我要,我全要,却什么也没做的案例,nodepad++,人家只写了 Windows 平台,不是照样非常牛逼。
    zim298247
        42
    zim298247  
       2024-02-04 22:20:07 +08:00
    @codehz qt 在安卓上有个例子是 krita
    changdy
        43
    changdy  
       2024-02-04 22:25:19 +08:00
    @Nosub 哈哈 我也感觉 . 最好想清楚用什么 要做什么成本多大之后再开工.
    roycestevie6761
        44
    roycestevie6761  
       2024-02-04 22:32:18 +08:00
    跨平台是 Linux Windows Mac 这种跨,不是 PC 到移动这种跨。。。
    FakerLeung
        45
    FakerLeung  
       2024-02-04 22:34:03 +08:00
    @lujiaxing 是啊,不知道啊,有问题吗🤣我又不是做移动端的
    lujiaxing
        46
    lujiaxing  
       2024-02-04 23:06:15 +08:00
    @FakerLeung 那可以给你推荐一下. Cordova 可以把 H5 页面直接编译成 Android / IOS 应用. 启动速度快, 添加插件非常方便 (Java), 开发起来非常简单. 只要会 H5 就行.
    FakerLeung
        47
    FakerLeung  
       2024-02-04 23:30:21 +08:00
    @lujiaxing 但是据说 cordave 这玩意环境难整,而且坑多。以前我就知道可以做移动端,但不知道还能配合 electron 。
    1una0bserver
        48
    1una0bserver  
       2024-02-05 00:24:14 +08:00 via Android
    qt 其实也不是不行,Android 上的 kde 全家桶不就是 qt ,比如 elisa ,https://elisa.kde.org/
    anoninz
        49
    anoninz  
       2024-02-05 00:36:09 +08:00
    emmm 其实我最近在研究这个。。
    可惜楼主没有前端技术栈,不然我觉得 react + nodejs-mobile + react-native-webview 应该是一个挺好的技术栈
    yangzzzzzz
        50
    yangzzzzzz  
       364 天前
    quasar 有个网页套壳 可以打包 Electron 、Cordova 、Capacitor
    maemolee
        51
    maemolee  
       364 天前
    真的是小工具的话,真的很建议用 web 开发,浏览器是最便捷的跨平台
    Paranoid1119
        52
    Paranoid1119  
       363 天前
    @qcbf111 我看微软核心库代码要用 rust 重构,是不是也可以跨平台呢
    wanqiangcrack
        53
    wanqiangcrack  
       363 天前
    javafx Qt MAUI
    qcbf111
        54
    qcbf111  
       363 天前
    @Paranoid1119 啥意思?你是指的 rust 跨平台还是啥?
    通常意义上的跨平台就是 JIT ,首先编译到 runtime 私有码如( c#的 IL ,JAVA 字节码),然后开发各个平台的 runtime ,而业务产品开发者不用每个平台都编译一次。而 rust ,cpp 这一类 AOT 的需要每个平台都基于源码重新编译到目标平台 不算是目前大家说的跨平台。
    laters
        56
    laters  
       301 天前
    flutter
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 17:15 · PVG 01:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.