很后悔从后端转到移动端,这个大坑。
头发日渐稀疏的贝壳找房移动端资深工程师 张华峰 如是说。
《Flutter 在贝壳的接入实践》的学习笔记。
Flutter 贝壳接入案例
- Android 工程师,在不熟悉的情况下,Flutter 比原生花费1.1~1.2倍的时间,iOS 端可同步运行
- “海神”监控 Exception 率,原生是万分之0.7,Flutter 低于万分之0.7
Flutter 工程基础
-
SDK
- pub_cache
- bin
- packages
-
工程类型
- Flutter Application - Flutter 标准应用程序
- DartLib
- Android 子工程
- iOS 子工程
- Flutter Plugin - 封装 Native 工程的基础拓展
- Flutter Package - 纯 Dart 库
- Flutter Module - Flutter 作为子 Module
- Flutter Application - Flutter 标准应用程序
-
原生工程接入 Flutter
-
官方方案 - Flutter Module 引入原生项目
- 耦合度高 - 所有的 Flutter 代码都在同一个 Module 里
- 编译成本比较高 - 原生编译 + Flutter Module 编译
-
-
闲鱼接入方案
- Flutter 产物放入远端,当作 Lib 引入到原生
-
贝壳接入方案
- 原生解耦 - 对原生影响最小
- 屏蔽平台 - 工程师会 Dart 和 Flutter UI 即可
- 业务分离 - 同基础,分散业务
- 保证开发效率
- 方便集成 - 减少人工干预,少量维护

开发时,是 Flutter Application,各个业务以 package 存在,运行在原生的壳工程中,速度相对较快。

通过 Target 文件和透传原生的 Flavor 实现不同资源/渠道的打包。
Flutter 接入方案介绍与理论基础
-
Flutter 编译模式

-
Flutter 构建流程 Debug 模式

-
Flutter 构建流程 Release 模式

-
Flutter 构建工具链

-
Flutter 构建工具

-
Flutter gradle 脚本修改

-
Flutter 构建工具 flutter_tools 修改

-
Flutter 日常开发构建流程(Android)

-
Flutter 持续集成构建流程(Android)

Flutter 热更新探索
- 动态产物下载
- 只支持 Android
- 实现简单
- DSL - 动态语言映射 Flutter UI
- 实现复杂
- 在 Flutter 生态中比较危险
- 双端都适用
- 贝壳的热更新方案
- Android - 使用原生的插件化框架将 Flutter 业务做成单独插件
- iOS - 避免审核异常,暂不实现热更新
- Flutter for Web - 和 app UI 几乎完全一致,通过开关控制 Flutter 和 Flutter web 的切换
干货很多,值得认真学习。