Flutter中文社区Flutter圈子Flutter

Flutter 开发 (2)优雅的 Flutter 组件化 混编

2018-12-26  本文已影响50人  ForestSen

背景

此篇文章,主要针对想要在原有Native工程的基础上集成Flutter的需求,所提供的混编方案的探讨。

Flutter 官方已经给出了混编方案:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps#ios 这种方案有 优点,也有 缺点

1. 官方方案的优缺点

(1)优点:
(2)缺点:

2. Flutter 组件化混编方案

(1)优点:
(2)缺点
(3)混编方案 实现核心思想
(4)Flutter 核心编译产物

目录

一、Flutter组件化 - 混编方案

1. Git仓库存放 - 示例说明

主要分为3个仓库,分别存放Native项目、Flutter 工程源码、Flutter 编译产物私有pod库。
flutter 工程创建,使用 flutter create -t module my_flutter 命令

2. 项目目录 - 示例
3. 混编方案说明
有组件化环境 - 混编方案说明

(1)在 flutter 项目目录下,执行 flutter build ios 针对 Flutter 项目进行编译打包,生成 Flutter 编译产物。

Flutter 的产物分为两种模式,一个是 Debug 模式,采用 JIT(Just In Time)的方式,好处是可以支持热更新,方便调试,,但是性能比较慢。
另一种是 AOT(Ahead Of Time)release 模式,好处是性能比较好。

通过 flutter build ios --debug 可打包出 Debug 下的 Flutter 编译产物。

flutter build ios 命令依赖于 Flutter 生成的 Runner 工程,所以要确保 Runner 工程能够编译成功,这样才能生成 flutter 编译产物。如果遇到编译失败,可以检查下 bundle id 修改一下,使用自己的证书。如下图示例:

(2)针对编译产物,制作 Flutter SDK 私有库, podspec 指定 App.framework、engine、flutter_assets 路径。

# podspec 有省略
Pod::Spec.new do |s|
  s.name         = "FlutterSDK"
  s.vendored_frameworks = 'Framework/*.framework', 'Framework/engine/*.framework'
  s.resources = 'Framework/flutter_assets'
end

(3)上传 Flutter SDK 私有库项目到云端私有pod索引库。(如何制作私有 pod 索引库,可搜索查看相关资料,这里不细说了)

(4)iOS 主项目指定 Podfile ,拉取云端Flutter私有库到本地。

没有组件化环境 - 混编方案说明
4. 最后效果

如下图,可以看到最终工程只引用了一个私有 pod 库。

总结

二、Flutter 组件化 - 断点调试

因为是编译后的资源接入,我们还需要保证 Flutter 开发的同学可以正常调试。

目录

注意点:
1. 单独运行 Flutter 工程调试 (只适合和 Native 没有太多关联的工程,比较少用)

使用 Android Studio 打开 Flutter 工程目录

选择好真机或者模拟器,然后点击 Run 按钮

这样 Run 起来后,我们就可以在 Flutter 项目中打断点调试。这种方法 只适合和 Native 没有关联的工程,比较少用。

2. 同时调试 iOS 和 Flutter(不支持Flutter断点的方式)

这种方法,需要先打开 Xcode 运行到 Flutter 页面,再进行附加 Flutter 端口号。

flutter: Observatory listening on http://127.0.0.1:60455/

Gif 演示

总结

3. 同时调试 iOS 和 Flutter(同时支持Flutter 和 Xcode断点的方式)

这种方法,需要先打开 Android Studio 选择 Attach Debugger to Android Process 等待 Flutter 页面连接,然后在 iOS 端,运行到 Flutter 页面,Android Studio 就会附加成功。

注意坑点

演示 Gif

总结

三、Flutter组件化 - 发布更新

发布大概流程

(1)对 Flutter 工程 执行 flutter build ios 或 flutter build ios --debug 生成编译产物。
(2)把编译产物复制移动到 Flutter 私有库目录下。
(3)打包 上传更新私有库内容。
(4)主工程拉取最新版本。

版本更新说明

四、一些坑点

(1)FlutterViewController 不释放
(1)不支持x86_64

其它

下一篇文章 (主要涉及到 Flutter 开发的一些知识)

参考文章

上一篇下一篇

猜你喜欢

热点阅读