Flutter – 从现有的android项目导入
我目前正在开发一个大约75%完成的android项目。 我需要一个类似的iOS应用程序。
我可以导入这个项目来扑动吗? 怎么样?
另外,flutter会支持我在这个项目中使用过的库吗?
Flutter应用程序完全不同 ,即不像Android,也不像iOS。 Flutter有自己的架构,因此有自己的插件等。
概要
不 ,您无法将现有的Android代码转换为Flutter的Dart代码,这是启用跨平台行为所必需的,因为Flutter SDK使用的所有代码都必须使用Dart编写。
但是 ,您可以通过将其包含在Android文件夹中并尝试将其与Flutter SDK集成来利用您的Android代码,这可能比仅仅在Dart中重写它可能要多得多。 这也不是您通常想要做的事情,因为原生Android和iOS代码最有意义的是用插件forms启用Flutter无法实现的function。
还有第三种方法,即保留Android代码并仅使用Flutter 添加function。 这很难实现,因为您必须创建一个从Android代码“切换”到Flutter的界面。 使用此function,您还需要在Flutter或本机iOS中重写iOS的剩余部分,这对您没有任何帮助。
精
对此有一个很直接的答案。
Flutter是原生SDK 之上的一层 。 这意味着你可以保留你的代码,因为如果你曾经看过一个Flutter 项目 ,你会发现其中有一个基本上可以使用的三种结构 :
-
用于Dart代码+文件的
lib
文件夹Flutter需要包括插件 ,简称: Flutter的 Dart代码 -
用于Objective-C或Swift代码的
iOS
文件夹,其中还包括通常的iOS附件 -
用于Java或Kotlin (或C ++)代码和所有其他gradle文件等的
android
文件夹。
这意味着您可以根据需要使用本机代码 ,但不需要这样做。
如果你想要,你可以在开发过程中完全忽略android
和ios
文件夹 。
您很可能只是在您的本机代码中修改应用程序图标,名称,版本名称,许可证密钥等方面。
Flutter的目标是在Dart中编写所有代码,并且仅在Flutter SDK中编写,这意味着您现有的Android代码可以包含在项目中,但它对iOS没有任何用处,因为所有跨平台工作都在飞镖利用Flutter SDK 。
结论
如果你真的想切换到Flutter SDK,你最好的选择是完全切换到Flutter,即重写 Dart中的所有function。
将“Android”代码“转换”为Flutter代码没有“导入”可能性。 如果它们是用相同的语言编写的话,这甚至都不会起作用,因为Flutter架构完全不同,而且构建应用程序的方式与Android应用程序没有太大关系。
如果您认为学习Dart并重写您的跨平台应用程序是不值得的,但您仍然需要iOS支持,我建议您使用iOS本机编写,但我对该问题的一般建议是在Dart中重写整个应用程序。
颤动使用完全不同的渲染架构。 所有渲染都是使用Dart代码计算的,而不使用本机元素。
因此,不仅你不能使用本机代码,你也不能拥有像“导入本机来振动”这样的东西。
对于图书馆来说,这是一个复杂的话题。 你可以使用它们。 但只有在Flutter称之为平台频道的内部。 这是一个api,用于在OS中本机运行的代码中编写系统调用。
所以像Firebase这样的库很好。 但组件库或rxjava之类的东西都已经出局了。 你需要一个类似的飞镖库。
从我所看到的情况来看,你可能不得不将它移植到Dart大部分时间。 但是,由于您的75%可能包含的不仅仅是编码(例如设计,交互,流程),因此简单的部分将重新编码在Dart中完成。
我会说不,没有。 其原因很好地解释了@creativecreatorormaybenot。 我想补充的是,不仅仅是语言差异使得它具有挑战性,而是整个android原生视图,视图层次结构与Flutter的视图层次结构不同。 如果您熟悉Cocos框架,它有自己的View层次结构,那么颤动类似于Google的更好,更丰富和certificate(我猜,;))。 启动点仍然是常规的Android活动,但这就是它。 然后控制流向颤动以测量和绘制UI窗口小部件。 您可能仍然需要实现一些需要系统服务的function,硬件访问以Native Java / Kotlin android风格/ IOS本机风格编写。
建议:此时,我不建议您使用hackish方式将dart转换为java / kotlin和Android UI到Flutter UI,即使您在网上看到了这样做。 原因是,Flutter本身就是Google的一项实验,并且还不像Android那样成熟。 您应该期望经常添加一些细微差别。 由于你已经完成了75%,我会说全部原生(Android和IOS)或所有Flutter。
要准确回答您的问题: 我可以导入此项目以进行扑动吗? 现在不行。
另外,flutter会支持我在这个项目中使用过的库吗? 有点。 由于你没有提到你使用过的任何库,我将举几个例子来说明它: – 图像下载库(glide,picasso)可以被flutter的原生图像小部件取代 – 如果你使用任何你想要移植到Flutter的核心java库,你可以按照flutter关于开发包和插件的文档来实现,这些文件实际上是在dart中声明contract / apis,并在’android’文件夹中实现java包。 IOS和android的合同保持不变。 – 如果你想使用系统级组件,就像我之前提到的那样,包和插件是可行的方法。 以下是Dart团队开发的第一手插件列表。
我可以导入这个项目来扑动吗? 怎么样?
到目前为止,我已经研究过,没有任何导入选项可用于任何其他框架的项目。 与其他架构相比,颤振架构完全不同并且是新的。 我们可以在我们的项目中包含我们现有的Android代码,但它对iOS没有任何用处,因为所有跨平台工作都是在Dart中使用Flutter SDK完成的。
会颤动支持我在这个项目中使用的库吗?
不,因为flutter提供了自己用Dart编写的库。 他们每天都在添加新的库,我们需要使用它。
因此,我们需要用dart语言编写完整的项目,并使用flutter现有库并构建一个新项目。
- 检测到用户使用Android / iOS设备进入了物理位置
- WebApp使用webRTC在iOS浏览器和Android Chrome中实现跨平台video聊天
- 离子初始屏幕不加载
- 检测phonegap应用程序中的卸载事件
- 将现有的PHP / MYSQL /网站转换为本地IOS / Android应用程序
- 是否有可能把一个类似Facebook的button放在一个移动应用程序中,当使用时,它会喜欢我的网站url?
- 在聊天应用程序中使用什么通知系统?
- Firebase:我可以使用Facebook的新帐户套件对应用用户进行身份validation吗?
- 如何在CLI 5.2 / PGB下使用phonegap-facebook-plugin