gpt4 book ai didi

android - 用于桌面的 flutter 插件是否必须使用特定于平台的语言编写(例如我们使用 C++ 的 windows 和我们使用 Swift 的 mac)

转载 作者:行者123 更新时间:2023-12-03 03:15:37 25 4
gpt4 key购买 nike

大家好。

我是 flutter 和 dart 的新手,非常感谢您的帮助

我有一个用于 flutter 的插件,目前在 android 目录中用 Java 编写。我希望相同的插件能够在其他平台上运行,如 windows 和 mac。我是否必须用 C++ 为 windows 和 Swift 为 macos 重写这个插件,或者我可以使用这些目录中的 java 文件。

如果我可以使用相同的 Java 文件,有人可以告诉我如何将这些文件移动到其他目录,以及我需要为我的 Flutter 应用做些什么才能为其他平台选择这些插件。

最佳答案

您想要执行的特定操作行不通的原因可能有两个:

  • 桌面平台上的 Flutter 应用程序没有 Java VM,因此您不能使用 Java。
  • Flutter 插件通常用于调用特定平台的功能(或为特定平台编写的第三方 SDK,但效果是一样的)。例如,如果您考虑像 camera 这样的插件,即使您忽略语言问题,您也无法在 macOS 或 Windows 上调用 Android 相机 API,因为它们不是 Android;他们有完全不同的操作系统相机 API。 (有像 sqflite 这样的异常(exception)情况,它包装了一个已经跨平台的库,但这不是常态)。

但是,对于您是否必须使用文档中描述的特定语言的一般性问题,答案在技术上是否定的:

  • 在 Windows 和 Linux 上,插件(目前)只是具有特定 C 接口(interface)的共享库。理论上,您可以使用任何可以编译为 C 兼容共享库的语言编写整个插件,例如 Go 或 Rust(尽管您必须进行自己的方法 channel 编码/解码)。或者,您可以使用 C++ API 作为薄胶层来处理平台 channel ,并调用编译为 C 兼容形式的底层代码。
  • 在 macOS 上,插件是一个模块,因此外层必须是 Swift 或 Objective-C。但是,Objective-C 是 C 兼容的,因此在 Objective-C 中仅使用方法 channel 胶水而在任何具有 C 接口(interface)的任何代码中使用其余代码的相同选项也适用于 macOS。

但是,除非您正在处理现有的跨平台库,否则这可能不是一个好主意。如果您正在编写非特定于平台的新代码以在 Flutter 中使用,您几乎总是最好将其作为常规包在 Dart 中编写,它可以在所有当前和 future 的 Flutter 平台上运行。

关于android - 用于桌面的 flutter 插件是否必须使用特定于平台的语言编写(例如我们使用 C++ 的 windows 和我们使用 Swift 的 mac),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com