Flutter - 从现有 android 项目导入

Flutter - Import from existing android project

我目前正在处理一个 android 项目,该项目已完成约 75%。我需要 iOS.

的类似申请

这个工程可以导入flutter吗?怎么样?

另外,flutter会支持我在这个项目中使用的库吗?

据我所见,您可能必须将其大部分移植到 Dart。然而,由于您的 75% 可能包含的不仅仅是编码(例如设计、交互、流程),所以简单的部分将是在 Dart 中重新编码以完成。

Flutter 应用程序的工作方式完全不同,即既不像 Android 也不像 iOS。 Flutter 有自己的架构,因此有自己的插件等。

总结

,您无法将现有的Android代码转换Dart Flutter 的代码,这是启用跨平台行为所必需的,因为 Flutter SDK 使用的所有代码都必须用 Dart 编写。

但是,您可以使用您的 Android 代码,只需将它包含在 Android 文件夹中,然后 尝试 将其与 Flutter SDK 集成,这可能比仅在 Dart 中完全重写它要多得多。这也是 而不是 您通常想要做的事情,因为原生 Android 和 iOS 代码最适合用于启用 Flutter 无法实现的功能,以 plugins.

的形式

还有第三种方法,即保留 Android 代码,仅 添加 Flutter 功能。这更难实现,因为您必须从 Android 代码创建一个 "switch" 到 Flutter 的接口。使用这个你还需要在 Flutter 或原生 iOS 中重写 iOS 的剩余部分,这对你根本没有帮助。

详细说明

对此有一个非常直接的答案。

Flutter 是原生 SDK 顶部 的层。 这意味着可以保留您的代码,因为如果您曾经研究过 Flutter 项目 ,您会看到目前基本上有 三个结构 您可以使用:

  • lib Dart 代码的文件夹 + Flutter 需要的文件,例如包括 插件,简称:Dart 代码 for Flutter

  • iOS 文件夹用于 Objective-CSwift 代码, 其中还包括常用的 iOS 配件

  • android 文件夹用于 JavaKotlin(或 C++)代码和所有其他 gradle 文件等

这意味着如果你愿意,你可以使用本地代码,但是你不需要这样做。

开发时完全可以忽略androidios文件夹`.

您很可能只会修改本机代码中的应用程序图标、名称、版本名称、许可证密钥等方面。

Flutter目标是在Dart中编写所有代码,并且只在Flutter SDK中编写,这意味着您现有的Android 代码 可以 包含在项目中,但它对 iOS 没有任何用处,因为所有跨平台工作都是在 Dart 中使用 Flutter SDK.

结论

如果你真的想转Flutter SDK,最好的选择是完全转Flutter,即重写 Dart中的所有特性].

不可能"import"将"convert"Android代码转为Flutter代码。如果它们是用相同的语言编写的,这甚至行不通,因为 Flutter 架构完全不同,而且您构建应用程序的方式与 Android 应用程序没有远程关系。

如果您认为学习 Dart 并重写您的跨平台应用程序不值得,但您仍然需要 iOS 支持,我建议您使用 iOS 原生编写,但我的对该问题的一般建议是在 Dart 中重写整个应用程序。

Flutter 使用完全不同的渲染架构。所有的渲染都是用 Dart 代码计算的,从未使用过原生元素。

因此,不仅您不能使用本机代码,您也不能使用 "Import native to flutter" 之类的东西。

对于图书馆来说,这是一个复杂的话题。您可以 使用它们。但仅在 Flutter 调用的 Platform channel 内。这是一个 api 以 运行 本身在 OS.

中的代码编写的系统调用

所以像 Firebase 这样的库就可以了。但是组件库或诸如 rxjava 之类的东西已经过时了。您将需要一个类似的飞镖库。

我会说不,没有。 @creativecreatorormaybenot 很好地解释了原因。 我要补充的是,不仅仅是语言差异使它具有挑战性,而且整个 android 本机视图,视图层次结构与 Flutter 的视图层次结构不同。 如果您熟悉 Cocos 框架,它有自己绘制的视图层次结构,那么 flutter 与那个框架相似,只是更好、更丰富并且得到了 Google 的证明(我猜,;))。 发射点在flutter中还是有规律的androidactivity,不过也就这样了。然后控制流向 flutter 以测量和绘制 UI Widgets。 您可能仍然需要实现一些需要系统服务的功能,硬件访问以原生 Java/Kotlin android 风格/ IOS 原生风格编写。

推荐: 在这一点上,我不建议您使用 hackish 方式将 dart 转换为 java/kotlin 并将 Android UI 转换为 Flutter UI 即使您在网上看到一些东西可以做到这一点.原因是,Flutter 本身是 Google 的实验,还没有 Android 成熟。您应该期望经常添加一些细微差别。 由于您已经完成了 75%,我会说全部使用原生(Android 和 IOS)或全部使用 Flutter。

准确回答您的问题: 这个工程可以导入flutter吗? 暂时没有。

另外,flutter会支持我在这个项目中使用的库吗? 有点。 由于您没有提到任何您使用过的库,我将举几个例子来更清楚地说明: - 图片下载库(glide, picasso) 可能被 flutter 的原生 Image widget 替代 - 如果您正在使用要移植到 Flutter 的任何核心 java 库,您可以按照有关 developing packages and plugins 的 flutter 文档进行操作,该文档本质上说要在 dart 和实现中声明 contract/apis [=43] =] 包在 'android' 文件夹中。 IOS 和 android 的合同保持不变。 - 如果你想使用系统级组件,就像我之前提到的那样,包和插件是可行的方法。 Here是Dart团队开发的第一手插件列表。

这个工程可以导入flutter吗?怎么样?

根据我目前的研究,flutter 中没有可用于任何其他框架项目的导入选项。与其他架构相比,Flutter 架构是完全不同和新颖的。我们可以在我们的项目中包含我们现有的 android 代码,但它对 iOS 没有任何用处,因为所有跨平台工作都是在 Dart 中使用 Flutter SDK 完成的。

flutter 会支持我在这个项目中使用的库吗?

不,因为 flutter 提供了自己用 Dart 编写的库。他们每天都在添加新的库,我们需要使用它。

因此,我们需要用dart语言编写完整的项目,并使用flutter现有的库并构建一个新项目。