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

b. 在 Podfile 文件中添加以下代码:
- flutter_application_path = '../flutter_Moudule/'
- 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) 剧本:
- "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
- "$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 工程的方法)
最终我们选择另一种方案来办理以上的题目:远端依靠产品。

图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 尺度工程
- $ flutter create flutter_demo
默认行使 Java 代码,假如增进 Kotlin 支持,行使如下呼吁:
- $ flutter create -a kotlin flutter_demo
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|