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

从头开发一个多平台应用,大家会考虑哪种技术栈?

  •  1
     
  •   1217950746 ·
    oneo-me · 2022-06-12 23:07:47 +08:00 · 5086 次点击
    这是一个创建于 896 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不考虑项目历史因素,仅从自己最理想的情况下选择技术栈,大家更愿意用哪些?

    在需要支持主流平台( iOS 、Android 、macOS 、Windows 、Linux )的情况下,更愿意选择 跨平台 技术,还是使用平台 独立技术栈 开发?

    53 条回复    2022-11-07 22:27:42 +08:00
    vacker
        1
    vacker  
       2022-06-12 23:09:19 +08:00 via Android
    quasar
    jpacg
        2
    jpacg  
       2022-06-12 23:09:23 +08:00
    flutter?
    foam
        3
    foam  
       2022-06-12 23:10:20 +08:00
    一个人开发太累了,还是跨平台好。
    桌面 electron
    移动端 ReactNative
    服务端:node.js / golang
    villivateur
        4
    villivateur  
       2022-06-12 23:14:17 +08:00 via Android
    当然是 .Net 啦
    fuis
        5
    fuis  
       2022-06-12 23:14:19 +08:00
    Electron 或者只有 web
    yuuko
        6
    yuuko  
       2022-06-12 23:15:29 +08:00
    下次我想选 rust ,虽然我不会
    1217950746
        7
    1217950746  
    OP
       2022-06-12 23:17:02 +08:00
    @foam 桌面端我有考虑过 Tauri 、Wails 之类的,好像也不错
    1217950746
        8
    1217950746  
    OP
       2022-06-12 23:19:15 +08:00
    @villivateur .Net 我还是很擅长的,类 WPF 的平台 Avalonia UI 跨平台组件我自己做了一套了,但是感觉性能还是差点意思,微软的 MAUI ,以及其他的 Uno 简直不敢考虑用
    1217950746
        9
    1217950746  
    OP
       2022-06-12 23:20:00 +08:00
    @yuuko Rust 语法不太喜欢,我前段时间折腾 Tauri 的时候,顺便学习过一点
    1217950746
        10
    1217950746  
    OP
       2022-06-12 23:21:11 +08:00
    @fuis 要说 Js 写桌面平台,还是 Electron 最方便,虽然大,毕竟全都有
    dcsuibian
        11
    dcsuibian  
       2022-06-12 23:26:07 +08:00 via Android
    得看是干啥应用,离线的还是在线的?
    icyalala
        12
    icyalala  
       2022-06-12 23:31:10 +08:00
    如果说同时支持这五大平台,目前 "流行" 的技术栈就只有 Flutter 了吧(要不然就直接 Web )。
    icyalala
        13
    icyalala  
       2022-06-12 23:31:35 +08:00
    对了,还有 Unity (狗头)
    xieqiqiang00
        14
    xieqiqiang00  
       2022-06-12 23:33:54 +08:00
    就按 web 开发,手机用 uniapp ,电脑 electron
    pengtdyd
        15
    pengtdyd  
       2022-06-12 23:46:40 +08:00
    跨平台个人感觉是伪命题,随着业务的增加,必然设计调优,调优的天花板还是原生
    1217950746
        16
    1217950746  
    OP
       2022-06-12 23:51:04 +08:00 via iPhone
    @icyalala Unity 那是魔法吧🐶
    1217950746
        17
    1217950746  
    OP
       2022-06-12 23:51:58 +08:00 via iPhone
    @pengtdyd 共享代码还是很舒服的,各自平台特性优化只包含了部分工作量,当然也会存在妥协
    closedevice
        18
    closedevice  
       2022-06-13 00:04:38 +08:00
    底层 rust ,前端 flutter 吧
    shijingshijing
        19
    shijingshijing  
       2022-06-13 00:32:51 +08:00
    Qt ?
    jones2000
        20
    jones2000  
       2022-06-13 00:39:33 +08:00   ❤️ 1
    具体看你的应用预算了, 预算充足就一个平台一个开发组单独开发。 没钱就怎么省钱怎么来了,直接 h5 页面搞搞就可以了。
    em70
        21
    em70  
       2022-06-13 00:41:54 +08:00
    delphi firemonkey
    roundgis
        22
    roundgis  
       2022-06-13 02:24:28 +08:00
    跨来跨去最后都要写 web
    akaHenry
        23
    akaHenry  
       2022-06-13 02:42:15 +08:00   ❤️ 5
    推荐 flutter + rust 方案.

    - flutter 只做 UI 层, 跨平台.
    - rust 做 core lib 层跨平台.

    > 优点:

    1. flutter UI 开发效率高, 现在已经是 flutter 3.0 版本了. 兼容性做的已经非常好. 放心使用.
    2. 主要功能层, 尽量下沉到 rust 来实现. (可以分 2 步走, 第一阶段是 flutter 原生, 后续逐步用 rust 替换)
    3. rust 实现 core lib, 好处是, 以后 UI 层, 不使用 flutter, 也可以改造其他方案( iOS/Android 原生, or 其他方案)
    4. rust 的性能和跨平台能力优秀. (上手门槛略高, 不过是值得的).

    > PS:

    有条件就 flutter + rust, 没条件用 flutter.
    不过建议从项目结构设计早期, 就做好拆分.
    区分 UI 层 和 core lib 层. 方便后续改造.
    Alan1978
        24
    Alan1978  
       2022-06-13 09:10:26 +08:00 via Android
    @1217950746 请问性能哪些地方差呢
    NoNewWorld
        25
    NoNewWorld  
       2022-06-13 09:38:54 +08:00
    以前 qt 。现在我用 flutter
    nightwitch
        26
    nightwitch  
       2022-06-13 09:45:43 +08:00
    桌面端的跨平台的话 Qt 。
    要再跨移动端的话就很麻烦了。。考虑 web 技术吧
    MinQ
        27
    MinQ  
       2022-06-13 10:41:56 +08:00
    需要性能就 Avalonia UI ,不需要就 electron
    1217950746
        28
    1217950746  
    OP
       2022-06-13 10:59:08 +08:00
    @orzglory Flutter + Rust 都挺有兴趣去学习的
    1217950746
        29
    1217950746  
    OP
       2022-06-13 10:59:53 +08:00
    @nightwitch
    @NoNewWorld
    @shijingshijing

    QT + C++ 这一套对开发人员要求太高了
    1217950746
        30
    1217950746  
    OP
       2022-06-13 11:01:46 +08:00
    @Alan1978
    @MinQ

    界面上对大量控件的场景不太想,我说的也不太对,不是 Avalonia UI 在 macOS 下边性能差,只能说是分辨率越高越差,macOS 都是高分屏,性能就下来了。

    目前我桌面端正在使用 Avalonia UI ,比较想换到如 Flutter 、Web 之类的架构
    akaHenry
        31
    akaHenry  
       2022-06-13 11:03:43 +08:00
    @1217950746

    关于 Flutter 和 Rust 学习. 可以看我的博客.

    https://github.com/hhstore/blog/labels/Rust
    https://github.com/hhstore/blog/labels/Flutter

    Good luck. 😄
    1217950746
        32
    1217950746  
    OP
       2022-06-13 11:06:17 +08:00
    @orzglory 佩服写博客的,我也正在搭建网站准备写博客了
    MinQ
        33
    MinQ  
       2022-06-13 11:19:54 +08:00
    @1217950746 我们有大量数据图表展示的需求,得用那个 ScottPlot ,高分屏反倒不考虑,最大就 1080p 了
    flutter 啥的反而不适合这种场景
    1217950746
        34
    1217950746  
    OP
       2022-06-13 11:23:00 +08:00
    @MinQ 有些界面避免不了大量控件,大数据量渲染倒是好解决(界面虚拟化、数据虚拟化)结合用就行,和 WPF 差不多
    MinQ
        35
    MinQ  
       2022-06-13 11:27:14 +08:00
    @1217950746 是的,这是 WPF 的强项,但不是 web 的强项
    1217950746
        36
    1217950746  
    OP
       2022-06-13 11:29:26 +08:00
    @MinQ Web 也可以做,道理一样的
    Dart
        37
    Dart  
       2022-06-13 12:26:20 +08:00
    请个人啊
    xsen
        38
    xsen  
       2022-06-13 12:54:45 +08:00
    Qt 对人员要求高,开发效率也是差很多,很多复杂些的控件都要自定义
    比较适合的方案如楼上提的 Flutter + Rust (当然,我是选择 Flutter + Go )
    reallittoma
        39
    reallittoma  
       2022-06-13 16:59:21 +08:00
    我之前用 Xamarin.Forms 做过几个应用,体验一般般,有时候会遇到一些比较棘手的坑。

    最近在尝试 MAUI ,只能说……还不太行,基础功能缺胳膊少腿的……
    不过看 roadmap ,以及代码上的一些设计,如果以后完善了,用它来写应用应该挺舒服的。
    1217950746
        40
    1217950746  
    OP
       2022-06-13 18:52:49 +08:00
    @reallittoma MAUI 在手机上的底层是不是就是 Xamarin.Forms ,我也没仔细研究过这个
    wingkwanli888
        41
    wingkwanli888  
       2022-06-13 20:51:29 +08:00
    只開發 web 就好了,當然要寫好 mobile/desktop css
    分發 android 和 ios 時,直接用 webview 打包
    reallittoma
        42
    reallittoma  
       2022-06-13 21:34:22 +08:00
    @1217950746 #40 底层的话,Android 是 Mono Android ,iOS 是 Xamarin.iOS 。MAUI 跟 Xamarin.Forms 属于平级关系,前者实际上是后者的升级版。
    AyaseEri
        43
    AyaseEri  
       2022-06-13 22:14:34 +08:00
    Desktop 走 Web ,mobile 走小程序
    00244396
        44
    00244396  
       2022-06-13 22:55:35 +08:00
    compose 据说可以支持桌面以及 web 了 IOS 不清楚
    1217950746
        45
    1217950746  
    OP
       2022-06-13 23:15:50 +08:00
    @reallittoma 这个想等正式版了去试试,现在好像还是 GA 状态
    1217950746
        46
    1217950746  
    OP
       2022-06-13 23:16:06 +08:00
    @AyaseEri 小程序不考虑,Web 方案不错的
    1217950746
        47
    1217950746  
    OP
       2022-06-13 23:16:39 +08:00
    @00244396 据说都支持,但是这些框架对 Web 都不太行,打开就需要加载很大的依赖
    7gugu
        48
    7gugu  
       2022-06-14 00:38:01 +08:00
    实践下来,如果不差钱和时间,还是优先平台原生代码的。跨端还是做不到开箱即用,有很多东西都需要自己用原生代码给跨端代码做支撑。其实花这些时间折腾下来,跟独立开发感觉省不了多少时间。跨端更多的优势是团队协作的时候,可以降低开发门槛。
    1217950746
        49
    1217950746  
    OP
       2022-06-14 18:50:10 +08:00
    @7gugu 最佳方案肯定是原生代码,我思考过很多,每种方案都有他的优缺点,想省精力,还是跨平台方、做出一些妥协的方案最效率
    7gugu
        50
    7gugu  
       2022-06-14 21:34:06 +08:00
    @1217950746 其实跨端框架最省不了精力,我现在就是在做这方面的东西,所有音视频和渲染相关的东西都要自己造,真的是太麻烦了,有大腿的时候还算凑活着能解决问题,如果是自己单枪匹马的,建议别碰跨端😂。
    checkz
        51
    checkz  
       2022-11-07 14:50:32 +08:00
    @reallittoma 直接把官方的 sample 下载下来,真机运行 listView/collectionviewdemo 不是卡顿就是无法下拉,样式也未适配,感觉这是用实力在劝退。
    https://github.com/dotnet/maui-samples
    reallittoma
        52
    reallittoma  
       2022-11-07 16:59:07 +08:00
    @checkz #51 是的,无论是稳定性还是跨平台 UI 、API 的统一性,微软官方做得还不如第三方的 Uno 框架。Uno 还是跑在 MAUI 上的……
    1217950746
        53
    1217950746  
    OP
       2022-11-07 22:27:42 +08:00
    @reallittoma 我最近用 Avalonia 还可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4411 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:09 · PVG 12:09 · LAX 20:09 · JFK 23:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.