现有项目是基于安卓的,用的原生 java 开发,硬件层面有与 usb 、rs485 设备的交互,软件层面有人脸识别 sdk 的调用。如果把这个项目移植到桌面 windows/linux 平台,最小代价是否使用 java 的 kotlin ? qt/nodejs ( electron )需要重新学习。谢谢指教。
1
Helsing 2023-06-19 09:28:35 +08:00 via iPhone
kmm 现在的库比较少,迁移起来估计工作量不小,而且这个主要是用来写业务层代码的
UI 层你还要用到 Compose |
2
aaorn1201 OP @Helsing 请问 jetpack compose 如何调用不同平台的系统功能以及与 usb 、串口等硬件交互的? flutter 是通过把原生平台相应功能封装成插件的形式,compose 是否也是类似的?
|
4
Masoud2023 2023-06-19 10:00:37 +08:00
语言不支持,那就找个支持的语言做 RPC🤣
|
6
lisongeee 2023-06-19 10:11:11 +08:00
kmm compose 目前是支持全平台的,#3 说得对,需要使用 expect 实现不同平台的逻辑
<https://github.com/JetBrains/compose-multiplatform/#readme> |
7
rosu 2023-06-19 10:14:25 +08:00 via iPhone
先把项目的第三方依赖都排一下,看看是不是都支持 kmm……不然迁移到一半发现第三方库不支持就 g
|
8
roundgis 2023-06-19 10:17:33 +08:00 via Android
|
9
AaronLee01 2023-06-19 10:26:20 +08:00
你想要做的可能是 Compose MultiPlatform, 但是既然你 Android 项目是 Java 写的,如果你没有 Compose 的经验的话,还是要学习的,UI 层可以 Compose 实现 https://www.jetbrains.com/lp/compose-multiplatform/
|
10
janus77 2023-06-19 10:29:24 +08:00
我觉得你这种情况做不了跨平台,涉及到硬件设备和人脸识别,只有使用原方案提供商提供的各平台 sdk 重新写项目才行
|
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 了 |
12
alwjlola 2023-06-19 11:27:53 +08:00
不靠谱,没生态
|
13
elechi 2023-06-19 13:26:49 +08:00
不靠谱,用 java 重写吧
|
14
aaorn1201 OP 了解了,感谢各位的输入。
|
16
xieren58 2023-06-19 13:49:26 +08:00
win/linux 建议用 https://avaloniaui.net
|
18
learningman 2023-06-19 22:07:59 +08:00 via Android
几乎完全不可用,建议不要上生产。
或者你能接受你的代码里有 1 万个 work around |
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 去适配不同的平台,这么做不能叫“跨平台” |