很后悔从后端转到移动端,这个大坑。
头发日渐稀疏的贝壳找房移动端资深工程师 张华峰 如是说。
《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的切换
干货很多,值得认真学习。
通过Target文件和透传原生的Flavor实现不同资源/渠道的打包。