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

2023 年了,跨平台技术怎么样了?

  •  
  •   hui9000 · 2023-06-28 15:15:47 +08:00 · 12559 次点击
    这是一个创建于 548 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟问一下各位大佬,跨平台技术现在怎么样了? 公司有一个需求:两个设备,一个是 window 平台,一个是安卓平台,想选型一个跨平台的技术,节省成本; 1.其实我的了解夸平台技术长远看并不会节省多少成本,维护成本较高; 2.两个平台只会运行一个程序不会安装其他任何程序,就是要做的这个; 3.了解过 elctron ,但是打包安卓不行,好像得改很多东西,才能打包,容易出现平台运行的程序出现 bug ,也就是 win 没事,安卓不行的情况; 4.flutter 怎么样了,但是学习一门语言或者招聘确实现阶段成本较高,也不好招人(公司在二线城市) 5.补充一下会机器会连接一些设备

    小弟真心求各位大哥给点建议,应该怎么办;

    87 条回复    2023-07-14 19:28:23 +08:00
    lsk569937453
        1
    lsk569937453  
       2023-06-28 15:21:17 +08:00
    我记得没有技术能跨桌面端和移动端,flutter 桌面端存疑。
    yazinnnn
        2
    yazinnnn  
       2023-06-28 15:24:47 +08:00
    compose-multiplatform
    支持的平台

    iOS (Alpha)
    Android (via Jetpack Compose)
    Desktop (Windows, MacOS, Linux)
    Web (Experimental)
    ferrum
        3
    ferrum  
       2023-06-28 15:26:55 +08:00 via iPhone
    Windows 用 Electron ,安卓用 Flutter 。

    两个平台的差异性太大了,设计肯定不同,没必要用一套技术。
    liyang5945
        4
    liyang5945  
       2023-06-28 15:28:10 +08:00
    qt 可以,你可以搜下 GPXSee 这个软件,桌面端和安卓都有,代码在 github 开源的
    dabbit
        5
    dabbit  
       2023-06-28 15:28:21 +08:00
    flutter 在桌面端主要问题还是官方不支持多窗口,但是社区已经有库实现了,可以看看 Desktop_multi_window 。连外设的话不太了解,没做过相关业务
    Muniesa
        6
    Muniesa  
       2023-06-28 15:29:34 +08:00 via Android
    flutter 的确可以,但是得看具体需要的插件跨不跨平台,另外就是在 Windows 上用触摸的 UI 会比较奇怪
    lujiaxing
        7
    lujiaxing  
       2023-06-28 15:30:34 +08:00
    @lsk569937453
    Uno Platform ( https://platform.uno/)
    Open-source UI Platform for building single-codebase applications for Windows, iOS, Android, WebAssembly, macOS, and Linux

    Avalonia UI ( https://avaloniaui.net)
    Avalonia is a powerful framework that enables developers to create cross-platform application using .NET. It uses its own rendering engine to draw UI controls, ensuring consistent appearance and behavior across various platforms, including Windows, macOS, Linux, Android, iOS and WebAssembly

    Electron + Cordova ( https://cordova.apache.org)
    Mobile apps with HTML, CSS & JS
    Target multiple platforms with one code base
    Free and open source

    简直不要太多...
    sentinelK
        8
    sentinelK  
       2023-06-28 15:31:58 +08:00
    主要问题在于说,windows PC 的操作逻辑以及同屏信息量与 Android 的操作习惯截然相反。
    如果两个端用不同的界面逻辑代码,只共用 IO 和业务部分的话,跨平台的意义是否还有这么大。

    如果抛去产品设计的问题,依然选择跨平台的话,flutter 是可以胜任的。
    jones2000
        9
    jones2000  
       2023-06-28 15:32:35 +08:00   ❤️ 10
    web 页面套壳。
    shalingye
        10
    shalingye  
       2023-06-28 15:33:53 +08:00
    electron 做过一点应用,感觉能跨平台的业务基本都是前端,不如就用 H5 解决了。如果要调用系统接口啥的,还是得根据不同平台重新开发。
    lbllol365
        11
    lbllol365  
       2023-06-28 15:34:03 +08:00
    本职 Java 后端,在学 Flutter ,用它做了个 windows 平台的 demo ,flutter build windows 打出 release 包,双击 exe 运行,好多次都是在后台运行,不显示界面,得多点运行几次才行,搞得后台全是这个 demo 的进程。借楼问一下有没有懂的大佬
    dreasky
        12
    dreasky  
       2023-06-28 15:35:50 +08:00
    flutter 现在桌面端也勉强可以 web 才是最省成本
    lujiaxing
        13
    lujiaxing  
       2023-06-28 15:37:18 +08:00
    @shalingye 对. 其实 Pornhub 的方式是最最合适的.
    一个可以放在应用抽屉的快捷方式. 用户点击之后打开的是 chrome. 里面全 H5 展现, 只要网络速度够快完全用起来跟原生 APP 没有任何的区别.

    只不过大部分国内企业做 app 的根本目的并不是提供服务, 而是收集数据喂给自己的广告营销平台. 这点这种 H5 就完全没办法做了.
    qingting
        14
    qingting  
       2023-06-28 15:39:34 +08:00   ❤️ 1
    @lbllol365

    flutter 引擎有 BUG , 在 runner 项目的 flutter_window.cpp 里面修改代码

    // 添加以下代码
    this->Show();

    // 注释以下代码
    // flutter_controller_->engine()->SetNextFrameCallback([&]() {
    // this->Show();
    // });
    lbllol365
        15
    lbllol365  
       2023-06-28 15:42:48 +08:00
    @qingting 谢谢大佬,我去试试
    hui9000
        16
    hui9000  
    OP
       2023-06-28 15:44:21 +08:00
    @dreasky web 的话没办法连接设备吧
    totoro52
        17
    totoro52  
       2023-06-28 15:46:06 +08:00   ❤️ 1
    真正的跨平台:Chromium
    murmur
        18
    murmur  
       2023-06-28 15:46:14 +08:00
    h5 才是王道,至少国内是这样,微信小程序体量爆杀各种跨端技术
    felix0liu
        19
    felix0liu  
       2023-06-28 15:46:21 +08:00   ❤️ 1
    微软的 MAUI 框架,或者用 Unity 也可以,虽然 Unity 是用来开发游戏的,但是单纯用它的 UI 框架也可以当 APP 开发
    NoManPlay
        20
    NoManPlay  
       2023-06-28 15:48:12 +08:00   ❤️ 2
    Tauri 可以关注一下,现在支持 WIndows+MacOS+Linux,2.0 的 Alpha 版本支持了 iOS 和 Android
    NoManPlay
        21
    NoManPlay  
       2023-06-28 15:48:42 +08:00
    NoManPlay
        22
    NoManPlay  
       2023-06-28 15:49:58 +08:00
    AaronLee01
        23
    AaronLee01  
       2023-06-28 15:52:21 +08:00
    UI 设计之类的都不一样,可以用 KotlinMultiplatform 实现 Model 层 和 业务层 的跨平台,UI 层用各自的技术实现即可
    weilanwl
        24
    weilanwl  
       2023-06-28 15:57:40 +08:00   ❤️ 1
    试试 pwa? 不知道实际业务场景允不允许? pwa 是成本最低的了。
    realpg
        25
    realpg  
       2023-06-28 16:26:40 +08:00   ❤️ 1
    你要找的是不是:
    网页
    nikenidage1
        26
    nikenidage1  
       2023-06-28 16:31:59 +08:00   ❤️ 1
    考虑下 avalonia , 可以看他们的 showcase
    https://avaloniaui.net/Showcase
    karott7
        27
    karott7  
       2023-06-28 16:32:45 +08:00
    可以结合 #3 和 #9 的想法,写一套响应式 web ,然后用 electron 和 flutter 套壳
    DOLLOR
        28
    DOLLOR  
       2023-06-28 16:40:37 +08:00
    固定设备的话,windows 平台用 electron ,android 平台用 webview 。
    这样可以共用 UI 交互部分,然后为各自平台开发底层部分。
    unclemcz
        29
    unclemcz  
       2023-06-28 16:57:02 +08:00 via Android
    win 装一个安卓虚拟机。
    meteor957
        30
    meteor957  
       2023-06-28 16:57:14 +08:00
    react-native
    debuggerx
        31
    debuggerx  
       2023-06-28 17:07:52 +08:00 via Android
    我自己拿 flutter 做的小工具(远程系统性能监视器)可以在手机和电脑上完美运行使用,体验一致。
    技术上可行,关键看你要做的东西本身能不能同时适应移动端和桌面端
    UFc8704I4Bv63gy2
        32
    UFc8704I4Bv63gy2  
       2023-06-28 17:15:32 +08:00
    @liyang5945 qt 要开源,商业授权非常昂贵,设计编码 qa 一起差不多又够一个程序员工资了,这仅限桌面和手机,嵌入式更贵,分发还要收钱
    可以选择给聪明的程序员加工资,让他们解决这个问题
    sunnysab
        33
    sunnysab  
       2023-06-28 18:13:28 +08:00
    flutter 拿来跨端没什么问题,上手难度不高的,可以通过招 Java 骗进来再改学 dart (逃

    一种方式是像前面说的套壳 Webview ,但是移动应用平台(尤其苹果)不太喜欢开发者这么搞,太“动态”容易使他们审核机制失效。
    另一种是用原生的方案写 UI ,把逻辑放到动态链接库中,大部分软件是这样做的。
    israinbow
        34
    israinbow  
       2023-06-28 18:27:25 +08:00
    安卓跨平台就没有好的方案, 开发维护一起火葬场, 最好的办法就是不夸写原生. 其他跨平台有邪派 tauri, 我全套 rust 写的 web 服务连 kernel 都能 OTA, OTG; 虽然安卓也支持 rust, 我技术验证过继续全套 rust 也未尝不可.

    坏处就是招不到人, 至于学习成本高, 计算机基础知识掌握牢固的我不信他一个月内写不明白 rust.
    janus77
        35
    janus77  
       2023-06-28 18:33:58 +08:00
    你都跨 windows+安卓了,那只有 flutter 可用了。。。。
    iorilu
        36
    iorilu  
       2023-06-28 18:35:37 +08:00   ❤️ 2
    我研究了一通, 反正桌面端用的 pyside6 , 其实就是 pyqt , 跨平台基本一套代码就够了, 可能有很小改动针对不同 os
    xiangyuecn
        37
    xiangyuecn  
       2023-06-28 18:47:01 +08:00
    除了 UI 部分,其他的不存在什么真跨平台,还不得每个平台单独写适配业务的代码

    UI 完全可以用 h5 搞,简单省事,电脑、手机 分别适配写好本地接口,统一给 h5 撸
    andytao
        38
    andytao  
       2023-06-28 20:29:52 +08:00
    复杂界面,桌面端和手机端真的无法共用,需要在界面层做平台适配,业务逻辑可以尝试共用;
    IDAEngine
        39
    IDAEngine  
       2023-06-28 20:33:48 +08:00
    Jsbridge
    renmu
        40
    renmu  
       2023-06-28 20:42:08 +08:00 via Android
    web 端 pc 和 h5 都要单独做两套,就别想着跨了
    darkengine
        41
    darkengine  
       2023-06-28 20:47:22 +08:00
    要不做个在设备上运行的服务端,用 web 实现客户端
    x77
        42
    x77  
       2023-06-28 21:04:21 +08:00
    刚好有个支持 Android 和 Windows 的 Flutter App ,不是推广,主要看看图,功能实现和 UI 都没问题。

    https://github.com/xinlake/privch-client-flutter
    Mithril
        43
    Mithril  
       2023-06-28 21:25:50 +08:00
    简单的界面可以用 QT ,Avalonia 等等直接做,效果也还行。

    有复杂交互的最好还是直接套 Web ,你招个前端开发远比招个能用这些玩意做出来复杂控件的容易得多。
    flyqie
        44
    flyqie  
       2023-06-28 21:29:31 +08:00 via Android
    移动端跟 PC 端做跨平台。。

    理论上 flutter 可以搞。

    实际上。。很麻烦,因为这俩平台操作逻辑完全是不一样的。
    duke807
        45
    duke807  
       2023-06-28 21:31:21 +08:00 via Android
    先说你设备是什么接口,网络、usb 、串口?
    usb 的话,是 hid 、cdc 、usb 网络?
    qiwuzan123
        46
    qiwuzan123  
       2023-06-28 21:37:19 +08:00
    没有这种的吧。。
    placeholder
        47
    placeholder  
       2023-06-28 21:50:32 +08:00
    只有 win 和安卓的话建议还是分开独立开发,不要合在一起,

    如果跨平台是刚需的话,建议看看 .net MAUI 哈哈哈哈,不过学微软的东西总是怕突然砍
    ac169
        48
    ac169  
       2023-06-28 21:52:20 +08:00
    @ferrum
    @liyang5945
    @dabbit
    @Muniesa
    @lbllol365
    @dreasky
    @debuggerx
    @sunnysab
    @israinbow
    @janus77
    @x77
    @Mithril
    @flyqie

    跨平台应用程序开发框架那家强? https://www.v2ex.com/t/952470 各位大老是否可以移步看看这个帖子,好不容易编辑提交了,发现这有一个相近的帖子!
    roundgis
        49
    roundgis  
       2023-06-28 22:57:13 +08:00 via Android
    手機 pc 是兩種不同的操作方式
    Friday2333
        50
    Friday2333  
       2023-06-28 23:05:13 +08:00
    quasar 了解下
    xylxAdai
        51
    xylxAdai  
       2023-06-29 01:27:27 +08:00
    flutter 、electron 、qt 各类跨端我都详细用过,web 、android 、ios 、win 我都深入写过至少万行的代码。我的推荐是,直接上 webview 套壳,没有任何跨端方案比 web 更好。
    SolidZORO
        52
    SolidZORO  
       2023-06-29 02:09:30 +08:00 via iPhone
    webview 套 pwa ,完美。跨任何端。如果需要小程序,用 taro 可获得 小程序+pwa 双赢。为什么是 pwa 不是 h5 ,因为 webview 套 pwa 加载速度基本是瞬间的,看不出 loading 。
    tool2d
        53
    tool2d  
       2023-06-29 02:16:33 +08:00
    @murmur h5 算什么,opengl 才是王道。我就没看到过有哪一个平台不支持 opengl 的。
    dcsuibian
        54
    dcsuibian  
       2023-06-29 02:37:57 +08:00
    我觉得 windows 和安卓,应该要的是响应式设计技术,这可就难了
    wellerman
        55
    wellerman  
       2023-06-29 06:46:27 +08:00
    React Native
    zhennann
        56
    zhennann  
       2023-06-29 06:57:27 +08:00
    到目前为止,只有 CabloyJS 全栈框架实现了真正意义的“一次开发,到处运行”的跨端跨平台理念。CabloyJS 内部实现了一套 pc=mobile+pad 的自适应布局机制,因此,只需一套代码,即可同时跨端 PC 和 Mobile ,并且 Mobile 端是接近原生体验。可以参见在线演示: https://cabloy.com/zh-cn/articles/demo-online2.html
    WildCat
        57
    WildCat  
       2023-06-29 06:57:56 +08:00
    @dabbit Desktop_multi_window published 10 months ago

    个人建议还是 web view 。参考 Notion/Logseq/Obsidian 体验
    zjsxwc
        58
    zjsxwc  
       2023-06-29 06:59:50 +08:00 via Android
    同一套 js 代码,套 electron 与 uniapp
    tiezlk443
        59
    tiezlk443  
       2023-06-29 07:19:50 +08:00 via Android
    qt 写过,搬项目遇到个野指针,改了下就好了,正常跑,只了解过 electron ,感觉都是浏览器,内存占用有点大
    tsanie
        60
    tsanie  
       2023-06-29 08:24:49 +08:00   ❤️ 1
    .NET MAUI
    dj721xHiAvbL11n0
        61
    dj721xHiAvbL11n0  
       2023-06-29 08:39:06 +08:00
    就俩个平台用夸平台是不是有点,,,话说既然都夸平台了,为什么不去适配苹果?老板怎么想的
    Narcissu5
        62
    Narcissu5  
       2023-06-29 08:52:53 +08:00
    elctron 。。。。。能不能把名词拼对。
    如果是 PC 之间或者移动平台之间跨还好说,问题 PC 和移动端之间,UI 组件交互方式都不相同,真没多少可以复用的地方

    @x2420390517 看第二点显然是专用设备,买台一万多的电脑就跑一个应用?硬件多半还是定制的,你觉得苹果会给你定制?
    yalin
        63
    yalin  
       2023-06-29 08:54:30 +08:00
    各个大佬公司之间的战争
    p1gd0g
        64
    p1gd0g  
       2023-06-29 09:44:09 +08:00
    unity [doge]
    VictorJing94
        65
    VictorJing94  
       2023-06-29 09:52:23 +08:00   ❤️ 1
    .net...
    iOCZ
        66
    iOCZ  
       2023-06-29 09:57:46 +08:00
    只是 UI 跨端而已,其他都需要 bridge native
    dudubaba
        67
    dudubaba  
       2023-06-29 11:05:09 +08:00
    渲染层用 js ,然后套壳 html
    luoway
        68
    luoway  
       2023-06-29 11:43:47 +08:00
    没有额外需求说明的话,最低成本方案是写 PC 、H5 两个页面
    有了非原生不可的需求再考虑 h5 套壳,还是跨平台框架原生开发
    DCELL
        69
    DCELL  
       2023-06-29 12:13:27 +08:00
    记住:能用 JS 的解决的,最终都会被 JS 解决
    maoyikun
        70
    maoyikun  
       2023-06-29 12:28:59 +08:00
    compose-multiplatform
    Ixizi
        71
    Ixizi  
       2023-06-29 13:13:13 +08:00
    不得不推荐 OneKey Wallet 了,这个项目用 Electron + RN 实现了大部分平台的跨平台,并且开源
    https://github.com/OneKeyHQ/app-monorepo
    robo
        72
    robo  
       2023-06-29 13:55:58 +08:00
    楼上好多人提到了 Electron ,最近了解到了 tauri ,想知道 Electron 和 tauri 那个比较好
    dj721xHiAvbL11n0
        73
    dj721xHiAvbL11n0  
       2023-06-29 13:56:21 +08:00
    @Narcissu5 那有意思了,安卓你也去定制硬件是吧,然后自己去搞系统适配是吧。
    robo
        74
    robo  
       2023-06-29 13:56:45 +08:00
    @robo 更正 72 楼,想知道 Electron 和 tauri 哪个比较好?
    lisongeee
        75
    lisongeee  
       2023-06-29 14:01:32 +08:00
    compose-multiplatform 和 Electron 打包逻辑一样

    每个 compose-multiplatform Desktop App 都自带一个 jvm

    目前 compose-multiplatform 还不支持编译到 kotlin-native
    Bijiabo
        76
    Bijiabo  
       2023-06-29 14:06:05 +08:00
    @robo 有复杂业务需求,想长期维护,精力有限的话选 Electron 。

    玩票性质、喜欢折腾,不在意投入产出比,接受随时重写或换框架,选 Tauri 。
    mmdsun
        77
    mmdsun  
       2023-06-29 14:09:00 +08:00
    MAUI , 前身是 Xamarin 已经很多年了十分稳定一直保持更新:

    https://dotnet.microsoft.com/zh-cn/apps/maui
    mogg
        78
    mogg  
       2023-06-29 14:30:18 +08:00
    @Bijiabo 复杂业务用跨平台 UI 框架是伪需求吧

    感觉比较合理的方式应该是 逻辑层用平台无关的技术(比如编译到 wasm ),UI 还是用原生

    说实话我感觉 跨平台带来的复杂度 已经比大部分业务逻辑的复杂度高了(
    hokori
        79
    hokori  
       2023-06-29 14:49:36 +08:00
    qt 是可以的 但是开发成本肯定是大的

    浏览器那种前端打包也是可以,开发成本底。
    ryan4290
        80
    ryan4290  
       2023-06-29 15:09:35 +08:00
    客户端已经死了,ok ?
    hui9000
        81
    hui9000  
    OP
       2023-06-29 16:08:49 +08:00
    @x2420390517 是这样设备资金投入太多了,设备大概要好几千台,很大的一笔投入
    Bijiabo
        82
    Bijiabo  
       2023-06-29 22:31:17 +08:00
    @mogg 那么我换个说法:如果有复杂业务、又要用跨平台 UI 框架,建议选择 Electron 。

    至于不用跨平台 UI 框架,可能不是楼主要讨论的问题啦
    SekiBetu
        83
    SekiBetu  
       2023-06-30 17:57:57 +08:00
    electron 元年
    datafeng
        84
    datafeng  
       2023-06-30 22:23:23 +08:00
    如果电脑同时开了几个 electron 打包的软件不得哭?
    hui9000
        85
    hui9000  
    OP
       2023-07-07 11:22:11 +08:00
    @xylxAdai 大哥 这边经过多天考虑还是选择 electron
    1. 首先抛弃了安卓设备,只用 windows 设备;
    2.考虑到这边没有原生开发人员,招不到人,小地方
    3.这边主要担心是调取设备时的兼容性,electron 是否合适;
    hui9000
        86
    hui9000  
    OP
       2023-07-14 16:20:09 +08:00
    @xylxAdai 您好能否提供联系方式 我这边可以付费进行指导开发
    xylxAdai
        87
    xylxAdai  
       2023-07-14 19:28:23 +08:00
    @hui9000 #85 electron 挺好的啊,其实和 web 区别不大,和后端沟通好,注意一下把设备相关的封装成接口,后期真有需求,转安卓、ios 的 web 套壳也很简单,electron 的平台层还帮你写了很多东西,不需要和纯 webview 一样麻烦。指导就算啦,我就一普通客户端开发。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:35 · PVG 05:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.