请问 kotlin 的跨平台靠谱吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aaorn1201
V2EX    Android

请问 kotlin 的跨平台靠谱吗?

  •  
  •   aaorn1201 2023-06-19 09:25:16 +08:00 15277 次点击
    这是一个创建于 897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现有项目是基于安卓的,用的原生 java 开发,硬件层面有与 usb 、rs485 设备的交互,软件层面有人脸识别 sdk 的调用。如果把这个项目移植到桌面 windows/linux 平台,最小代价是否使用 java 的 kotlin ? qt/nodejs ( electron )需要重新学习。谢谢指教。

    20 条回复    2023-11-11 22:19:35 +08:00
    Helsing
        1
    Helsing  
       2023-06-19 09:28:35 +08:00 via iPhone
    kmm 现在的库比较少,迁移起来估计工作量不小,而且这个主要是用来写业务层代码的

    UI 层你还要用到 Compose
    aaorn1201
        2
    aaorn1201  
    OP
       2023-06-19 09:45:20 +08:00
    @Helsing 请问 jetpack compose 如何调用不同平台的系统功能以及与 usb 、串口等硬件交互的? flutter 是通过把原生平台相应功能封装成插件的形式,compose 是否也是类似的?
    Helsing
        3
    Helsing  
       2023-06-19 09:47:14 +08:00 via iPhone
    @aaorn1201 #2
    这是 KMM 要做的事情吧,用 expect 可以针对不同平台适配
    Masoud2023
        4
    Masoud2023  
       2023-06-19 10:00:37 +08:00
    语言不支持,那就找个支持的语言做 RPC
    aaorn1201
        5
    aaorn1201  
    OP
       2023-06-19 10:04:05 +08:00
    @Helsing kmm 支持 win/linux ?我以为只支持 android/ios 。
    lisongeee
        6
    lisongeee  
       2023-06-19 10:11:11 +08:00
    kmm compose 目前是支持全平台的,#3 说得对,需要使用 expect 实现不同平台的逻辑

    <https://github.com/JetBrains/compose-multiplatform/#readme>
    rosu
        7
    rosu  
       2023-06-19 10:14:25 +08:00 via iPhone
    先把项目的第三方依赖都排一下,看看是不是都支持 kmm……不然迁移到一半发现第三方库不支持就 g
    roundgis
        8
    roundgis  
       2023-06-19 10:17:33 +08:00 via Android
    AaronLee01
        9
    AaronLee01  
       2023-06-19 10:26:20 +08:00
    你想要做的可能是 Compose MultiPlatform, 但是既然你 Android 项目是 Java 写的,如果你没有 Compose 的经验的话,还是要学习的,UI 层可以 Compose 实现 https://www.jetbrains.com/lp/compose-multiplatform/
    rb6221
        10
    rb6221  
       2023-06-19 10:29:24 +08:00
    我觉得你这种情况做不了跨平台,涉及到硬件设备和人脸识别,只有使用原方案提供商提供的各平台 sdk 重新写项目才行
    TArysiyehua
        11
    TArysiyehua  
       2023-06-19 11:09:16 +08:00
    你的核心功能是:硬件层面有与 usb 、rs485 设备的交互,软件层面有人脸识别 sdk 的调用

    这种情况没一个都得单独写 native api ,比如 usb ,安卓,ios ,window 的 api 都是不一样的,都需要单独写代码去适配。这个出后跟 kmm 是没什么关系的了,kmm 是让你写业务代码,它的第三方非常少。
    相关成熟的框架, flutter/qt/electorn 他们在每个平台都有解决方法,你只需要调用对应的第三方库即可, 置于楼上说的 Compose 不过是一个 UI 框架,基本用任意一个跨平台方案都能实现。


    所以你目前应该调查的是上面说的几个跨平台方法中,是否有能支持你说的这几个核心功能的第三方库,如果没有的话,就像 7 楼说的那样,迁移到一半发现某个功能不支持,你就 GG 了
    alwjlola
        12
    alwjlola  
       2023-06-19 11:27:53 +08:00
    不靠谱,没生态
    elechi
        13
    elechi  
       2023-06-19 13:26:49 +08:00
    不靠谱,用 java 重写吧
    aaorn1201
        14
    aaorn1201  
    OP
       2023-06-19 13:39:08 +08:00
    aaorn1201
        15
    aaorn1201  
    OP
       2023-06-19 13:41:27 +08:00
    @roundgis windows 居然是 Tier 3 。。。
    xieren58
        16
    xieren58  
       2023-06-19 13:49:26 +08:00
    win/linux 建议用 https://avaloniaui.net
    roundgis
        17
    roundgis  
       2023-06-19 16:01:21 +08:00 via Android
    @aaorn1201 竟是起步 用的人也不多 需要同行踩坑
    learningman
        18
    learningman  
       2023-06-19 22:07:59 +08:00 via Android
    几乎完全不可用,建议不要上生产。
    或者你能接受你的代码里有 1 万个 work around
    x77
        19
    x77  
       2023-06-20 12:40:49 +08:00
    跨平台的主角是框架,不是语言。

    几乎每种语言都能在不同的硬件 /系统平台上编写软件,都可以适配不同的平台,但是这其中包含了大量的开发和维护工作。开发者为不同的平台进行适配,开发不同平台的软件版本,已经和跨平台框架的意义相差甚远了。

    拿 Flutter 跨平台框架来讲,它最上层通常有一种通用的语言平台无关的 Dart 语言进行开发,框架自己会适配不同的平台(不是浏览器套壳,封装 JS 那种),一般的软件,你只需要写 Dart 就可以在 Windows 、Linux 、Mac 、Android 、iOS 等等系统上(原生)运行。

    跨平台框架能够组织各个平台(各种语言的)底层代码,做统一的抽象在最上层调用。对于 usb 、rs485 设备的交互,你只需要用 C 实现一遍,然后封装成 Flutter 插件就可以,其他第三方 SDK 也类似,做成插件。虽然上层代码都一致,但是在 Windows 上 Flutter 会调用你 Windows 上的底层代码,Linux 上则会调用 Linux 的底层代码。。。

    非常不建议用 Kotlin/Java 去适配不同的平台,这么做不能叫“跨平台”
    driscoll
        20
    driscoll  
       2023-11-11 22:19:35 +08:00
    @x77 KMP 刚推出 stable 版本,现在来看还是这样吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2434 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 15:40 PVG 23:40 LAX 07:40 JFK 10:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86