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

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

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

    桌面应用开发 delphi/c++ builder 一直是王者
    bluearc
        17
    bluearc  
    OP
       303 天前
    具体功能涉及大量音频处理,除此之外没有什么需要大量计算的地方,会在本地运行用于处理音频的模型;不过我并不是很了解安卓开发,但是还想折腾下用用 npu ,不知道靠谱不靠谱?
    bluearc
        18
    bluearc  
    OP
       303 天前
    @90xchun 是有在考虑
    kneo
        19
    kneo  
       303 天前 via Android
    移动端开发就 flutter 。桌面端优先就 qt 。
    qt 可以搞安卓,有些小坑,我之前听说本地文件打开框有点什么如果你不熟悉。
    Haku
        20
    Haku  
       303 天前
    建议 python 开发后端,自己搞个网页。
    前端可以让 chatgpt 写,我自己就用这个写了个可以用来处理音频的工具,也是 0 前端经验。
    有兴趣可以看下。
    https://aicosers.com/
    Jamy
        21
    Jamy  
       303 天前
    c++ 的话 cocos2d 了解下
    Haku
        22
    Haku  
       303 天前
    @Haku 才发现你也是音频工具,不过我这边是处理过程放到了服务器上进行,异步处理后发送到用户提供的邮箱。总之前端这块 chatgpt 其实可以代劳很多了,自己随便看看代码进行修改下就可以拿来用。
    BORBER
        23
    BORBER  
       303 天前
    tauri 最近 beta 出了 支持 win linux mac Android ios
    joyanhui
        24
    joyanhui  
       303 天前
    你要跨桌面和移动 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  
       303 天前
    补一条 pc 端的菜单实现 flutter 弄也有点坑。
    heora
        26
    heora  
       303 天前
    @bluearc electron 本质还是使用的 html/css ,只要你做好配置,完全可以编译出两套代码,适合 pc 和 客户端的。当然 pc 功能要阉割掉调用原生能力的内容。
    ExplodingFKL
        27
    ExplodingFKL  
       303 天前   ❤️ 1
    来个不那么正常的 :

    Kotlin Multiplatform

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

    js 处理音频比较扯.

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