大数跨境

干货 | 京东技术中台的Flutter实践之路

干货 | 京东技术中台的Flutter实践之路 老马电商圈
2019-10-18
1
导读:添加老马私人微信:13262481111 【了解更多最新的电商资讯】在 2019 年,Flutter 推出了

添加老马私人微信:13262481111 

【了解更多最新的电商资讯】

在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多。Flutter 正在经历从小范围尝鲜到大面积应用的过程,越来越多的研发团队加入到 Flutter 的学习热潮中,京东作为互联网大厂之一也积极参与了 Flutter 的跨端方案研究。本文将介绍京东在 Flutter 上的应用方案和相关优化成果。

为什么考虑Flutter技术方案

其实京东很早就开始研究并实践跨端的开发解决方案,最早使用的是Hybrid App的技术方案,从2015年低开始逐步转向RN技术栈,目前应该是业内RN技术平台应用最广泛、配套设施比较完善的公司之一。从2018年中开始,我们也关注到了Flutter技术,最吸引我们的特性是高性能和兼容性。这两点也是目前RN技术相对不足的地方。高性能指的是复杂场景和交互下的渲染性能,兼容性指的是不同终端平台上的布局和体验的一致性,这点在碎片化严重的android平台上尤其重要。

京东在Flutter的实践

随着2018年底Google正式发布了Flutter预览版本,京东内部也越来越多的研发团队有用Flutter进行开发业务的诉求。我们正式启动研发并内部发布了JDFlutter引擎。在官方Flutter引擎之上,我们做了额外的优化和功能扩展:
  • Flutter工程改造: 对Flutter开发环境和dart代码管理进行优化,可以无缝集成到现有APP中并支持自动化dart编译打包,便于开发和调试。

  • 路由及多页面管理: 对原生页面和flutter页面实现了集中路由管理,可以双向传参、跳转并且进行了共享内存优化。

  • 扩展UI组件库: 官方支持的Material和Cupertino样式不能满足需求,我们内部实现了自定义样式的组件库。

  • 原生能力扩展: 对官方原生能力进行了扩展,封装了包括网络、登陆、埋点等等基础能力的打通并提供了50+原生扩展API。

  • Android端动态化支持: 在Android端实现了动态化支持,可以线上热更新业务。iOS端暂不支持动态化。

目前京东商城、京东视频、京东到家、京东物流、7Fresh等APP都有业务采用JDFlutter进行开发。

JDFlutter框架设计

JDFlutter整体的框架结构,主要包含:基础框架、组件、工具三部分,如图所示:

基础框架

JDFlutter基础框架分为三层架构,包含JDFlutter基础层,通用业务层,业务层。
  • 基础层:提供了Flutter的基础组件支持,包括组件管理,状态管理等;基础层完全独立,对业务没有依赖。

  • 通用业务层:提供了通用型业务组件支持,例如登录组件,支付组件等;通用业务层依赖于基础层。

  • 业务层:即具体业务逻辑实现层,根据业务需要进行不同组件的组合,实现业务页面的快速开发。


核心组件

  • 组件管理:组件之间通过标准的协议接口进行通信,降低组件耦合,便于维护及组件升级;

  • 状态管理:实现数据和界面分离,统一状态管理,以数据的变化来驱动界面的改变,更有利于数据的持久化和保存,同时也有利于UI组件的复用;

  • Hybrid Router:主要解决Flutter和Native之间交叉跳转的问题,减少内存开销,共享同一个Flutter Engine。

工具介绍

  • 编译发布:优化Flutter原有的编译逻辑,管理依赖Flutter原生依赖关联,打包Flutter和原生代码,实现自动化构建发布。

  • 资源管理:管理图片资源,将资源转换成Flutter类,便于资源的读取操作,类似Andorid的R类;

  • 模版代码生成:减少Flutter的代码编写,自动生成Flutter 组件的框架模板代码,提升代码编写效率;

  • JSON转换:将JSON数据转换成Flutter code,并提供json转Flutter对象的API,减少动手编写Flutter code及解析。

JDFlutter业务开发实践

JDFlutter为业务研发团队提供了全流程的开发解决方案:

配置混合工程

Flutter和原生混合开发有两种情况,其一,开发Flutter业务的同学,需要和原生做交互,因此需要有Flutter和原生的混合编译环境;其二,使用原生SDK开发业务的同学,需要和Flutter业务一起集成打包,此时需对Flutter透明,以减少对Flutter编译环境的依赖,并且,只依赖原生编译环境即可,此时我们将Flutter编译成aar依赖,放入原生项目中即可。接下来,我们将重点介绍Android和iOS的混合编译环境配置。


点亮图标

我给温州电商私圈点亮星标 !

3个步骤,把星标点亮,

就能在第一时间获取最喜欢的内容哦!

商务合作


请联系微信\电话 13262481111



会员介绍




点击 ↓↓阅读全文↓↓ 电商干货大全



【声明】内容源于网络
0
0
老马电商圈
1234
内容 851
粉丝 0
老马电商圈 1234
总阅读1.1k
粉丝0
内容851