加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Flutter实现道理及在马蜂窝的跨平台开拓实践

发布时间:2019-03-27 12:59:04 所属栏目:教程 来源:电商客户端团队
导读:一向以来,跨平台开拓都是困扰移动客户端开拓的困难。 在马蜂窝旅游 App 许多营业场景里,我们实行过一些主流的跨平台开拓办理方案, 好比WebView 和 React Native,来晋升开拓服从和用户体验。但这两种方法也带来了新的题目。 好比行使 WebView 跨平台方

相识了 Flutter 工程范例后,我们来看下官方提供的一种混编方案(https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps),即在现有工程下建设 Flutter Module 工程,以当地依靠的方法集成到现有的 Native 工程中。

官方集成方案(以 iOS 为例)

a. 在工程目次建设 FlutterModule,建设后,工程目次大抵如下:

Flutter实现道理及在马蜂窝的跨平台开拓实践

b. 在 Podfile 文件中添加以下代码:

  1. flutter_application_path = '../flutter_Moudule/'  
  2. eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding) 

该剧本首要认真:

  • pod 引入 Flutter.Framework 以及 FlutterPluginRegistrant 注册进口
  • pod 引入 Flutter 第三方 plugin
  • 在每一个 pod 库的设置文件中写入对 Generated.xcconfig 文件的导入
  • 修改 pod 库的 ENABLE_BITCODE = NO(由于 Flutter 此刻不支持 bitcode)

c. 在 iOS 构建阶段 Build Phases 中注入构建时必要执行的 xcode_backend.sh (位于 FlutterSDK/packages/flutter_tools/bin) 剧本:

  1. "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build 
  2. "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed 

该剧本首要认真:

  • 构建 App.framework 以及 Flutter.framework 产品
  • 按照编译模式(debug/profile/release)导入对应的产品
  • 编译 flutter_asset 资源
  • 把以上产品 copy 到对应的构建产品中

d. 与 Native 通讯

  • 方案一:改革 AppDelegate 担任自 FlutterAppDelegate
  • 方案二:AppDelegate 实现 FlutterAppLifeCycleProvider 协议,生命周期由 FlutterPluginAppLifeCycleDelegate 转达给 Flutter

以上就是官方提供的集成方案。我们最终没有选择此方案的缘故起因,是它直接依靠于 FlutterModule 工程以及 Flutter 情形,使 Native 开拓同窗无法离开 Flutter 情形开拓,影响正常的开拓流程,团队相助本钱较大;并且会影响正常的打包流程。(今朝 Flutter 团队正在重构嵌入 Native 工程的方法)

最终我们选择另一种方案来办理以上的题目:远端依靠产品。

Flutter实现道理及在马蜂窝的跨平台开拓实践

图11 :远端依靠产品

iOS 集成方案

通过对官方混编方案的研究,我们相识到 iOS 工程最终依靠的着实是 FlutterModule 工程构建出的产品(Framework,Asset,Plugin),只需将产品导出并 push 到远端客栈,iOS 工程通过远端依靠产品即可。

依靠产品目次布局如下:

  • App.framework : Flutter 工程产品(包括 Flutter 工程的代码,Debug 模式下它是个空壳,代码在 flutter_assets 中)。
  • Flutter.framework: Flutter 引擎库。与编译模式(debug/profile/release)以及 CPU 架构(arm*, i386, x86_64)相匹配。
  • lib*.a & .h 头文件 : FlutterPlugin 静态库(包括在 iOS 端的实现)。
  • flutter_assets: 包括 Flutter 工程字体,图片等资源。在 Flutter1.2 版本中,被打包到 App.framework 中。

Android 集成方案

Android Nativite 集成是通过 Gradle 长途依靠 Flutter 工程产品的方法完成的,以下是详细的集成流程。

a.建设 Flutter 尺度工程

  1. $ flutter create flutter_demo 

默认行使 Java 代码,假如增进 Kotlin 支持,行使如下呼吁:

  1. $ flutter create -a kotlin flutter_demo 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读