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

请问 kotlin 的跨平台靠谱吗?

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

    现有项目是基于安卓的,用的原生 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/
    janus77
        10
    janus77  
       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  
       359 天前
    @x77 KMP 刚推出 stable 版本,现在来看还是这样吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:23 · PVG 17:23 · LAX 01:23 · JFK 04:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.