JDFlutter 京东跨平台开发框架!

京东技术中台的Flutter实践之路(1) 其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。 阅读详情

点击上方“开发者技术前线”,选择“星标”
13:21 在看 真爱
作者: 京东商城共享技术部 | 来源:京东商城技术团队

责编: 可可

前言

JDFlutter 是商城共享技术部-多端融合技术部推出的新一代跨平台开发框架,可快速集成至现有 Android/iOS 工程,开发者可借助 JDFlutter 平台快速完成 Flutter 业务开发。JDFlutter 平台提供了大多数京东样式 UI 组件库以及丰富的原生 API,可满足复杂业务需求。未来 JDFlutter 会和 JDReact 一起构成京东 ARES 跨端应用开发平台的双引擎!

Flutter 简介

Flutter 是 Google 公司2018年2月27日发布的第一个开源跨平台软件开发工具包 (SDK),支持Android、iOS两个平台,可实现高性能、高保真的应用程序开发。开发者借助 Flutter 开发平台可轻松实现自己的应用,其开发框架默认支持了 Material(类似 Google 设计风格)和 Cupertion(类似 iOS 设计风格)两种风格,且无论从UI样式、用户体验上都非常接近原生应用。经过近7个月的优化改进2018年9月19日 Google 公司在上海正式发布非常接近1.0正式版本的 Flutter Release Preview 2,基于其优越性能 Flutter 有望成为未来应用开发的主流工具。

Flutter 类似且优于 Html、React Native、Weex 等跨平台解决方案。ReactNative 将 JSX 生成的代码最终都渲染成原生组件,JS 与原生通过 JSBridge 传递数据。而 Flutter 则采用完全不同的设计,底层是一套独立的渲染引擎–Skia,所有组件也都是独立于平台的 Widget 组件,可以在最大程度上保证了跨平台体验的一致性。

京东目前已经有非常成熟的跨平台解决方案 JDReact,如何在 JDReact 与 Flutter 中选择合适的开发方案?我们认为如果是需要进行线上业务包升级、热修复等动态更新的情况,优先选择 JDReact;没有动态更新需求的可以选择 Flutter。

目前闲鱼 APP 和美团 APP 已在部分页面尝试接入 Flutter,根据公开的信息我们对比了三家 Flutter 方案:

集成与调试

1Flutter包集成

现阶段如要开发一个全新的 App,Flutter 是个很好的选择,作为新一代跨平台解决方案,使用 Flutter 官方提供的创建脚本、创建工具即可开发完成。然而在大多数情况下,我们面临的是现有 APP 已上线很久,新的页面或者部分页面的改造需要尝试去使用 Flutter 开发,在这种情况下,我们需要创建一个 Flutter 模块,用于完成 Flutter 页面开发,并为现有 APP 作为宿主工程添加对 Flutter 模块的依赖。

兼顾到不需要 Flutter 开发环境的同事,我们对编译脚本进行了修改:

▲编译开发环境配置

Flutter 开发需要在本地配置完整的开发 SDK,并增加 jdFlutter.debug 标志,如果开发人员不是做 Flutter 开发的就不用设置此标志,如果是开发 Flutter 的研发则需要配置一下此标志进行本地代码开发。通过这样的方式,可以做到 Flutter 开发不影响现有工程的编译。Flutter 业务代码采用 git submodule 的方式进行代码管理,Android、ios 工程仅需设置好对Flutter的依赖即可。

▲git 库管理

2JDFlutter 设计框架

▲JDFlutter 架构图

最底层提供了灰度、降级容灾、数据统计等功能,这些功能都统一接入后台管理系统。

中间层为核心开发包:JDFlutter-core-widgets 为 JDFlutter UI 组件库,样式等都满足了京东设计规范,目前支持了 Button、CheckBox、Dialog、mage、Loading、NavgationBar、Text、PullToRefresh 等。Flutter 框架内集成了两种风格的 UI 组件库:一种是 Google Material 设计风格,另一种为 Apple Cupertion 设计风格。这两种设计风格可以很好满足开发者对样式的需求,与原生页面无异。然而当集成到京东客户端时,这些样式并不能满足需求,因此我们提供了适合手机京东(京东 APP)的 UI 组件库(不断完善中)。

JDFlutter-core-lib 为 Dart 与原生之间通信的桥梁,我们提供了原生接口,如:网络请求 JDNetwork、设备相关 JDDevice、页面跳转 JDJumping、埋点 JDMta、分享 JDShare、异常上报 JDReporter 等。

最上层为接入层,包含了业务开发集成、Android/iOS 两端客户端的集成。

▲JDFlutter 提供的组件库和 API demo

3打通 JDReact Native API

在 Flutter 之前,京东已有了非常成熟稳定的跨平台开发解决方案 JDReact。在 JDReact 框架中,已经封装了非常多的 Native API,通过 JSBridge 传递原生与 JS 之间的数据。

为使 Flutter 具备众多京东 App Native API 访问能力,有以下办法:

按照官方 platform channels(https://Flutter.io/platform-channels/)写法,封装 Flutter Api;

按照 Plugin 的方式,将每一个 Native API 写成 plugin;

全部复用 JDReact 已有 Native API。

目前 JDReact 提供的 Native API 有上百个,并且都经过了严格的测试。如果按照前两种方式,想要逐渐对标 JDReact native 能力,工作量将会变的很大,且需要大量的测试工作。因此我们采取了最后一种方式,全部复用现有 JDReact Native API:通过定义统一接口的方式,对原有 JDReact 框架进行了改造,如下图为改造后的框架架构图:

▲JDFlutter 复用 JDReact API 框架

Adapter 层中 Native 代码分别实现了 React Native 与 Flutter 对应接口,JDReact 通过 JSBridge 将 Native API 暴露给 JS,JDFlutter 通过 MethodChannel 将 Native API 暴露给 Dart。为了后续的开发方便,我们分别在 JS 与 Dart 侧进行了二次封装,保证了在无需知晓原生实现的情况下可以顺利的进行业务开发。

4业务集成

目前 Flutter 业务包集成还不支持类似 JDReact 拆分打包–不同的业务自己打自己的,相同的 lib 部分不打进去的分包机制,解决办法是将所有业务都打成一个包,解析原生传递的路由及跳转参数信息,由内部路由决定跳转逻辑。

▲业务路由与参数传递

main.dart 为主入口,接受原生传递的跳转协议,进行参数解析,并决定业务路由,进行路由分发,同时将跳转参数 params 传递至各业务入口。

▲业务集成目录

为了实现业务包的线上集成,所有的业务代码都位于 lib 目录下。同时为保证不同开发者之间互不影响,每个业务都在 lib 目录下单独管理,相应的与自身业务相关的图片资源也独立管理。assets 文件夹存放的是公共资源,不同的业务都可直接引用位于该目录下的资源。

5调试

很多开发 JDReact 的小伙伴都是前端开发对 Android/iOS 原生 APP 有可能不熟悉。为了开发与调试的方便我们在 MarsWorks 后台增加了 JDFlutter 调试功能,如下图:

▲开发调试 IDE

Flutter 业务开发只需要在手机上安装好我们提供的 apk 安装包,手机连接电脑后,点击“启动 Flutter 调试”绑定手机,修改代码后点击“Reload”按钮即可实现 Flutter 热加载。

未来我们会增加对 ios 模拟器的支持,点击“启动 Flutter 调试”即可启动模拟器直接跳转到对应的页面。

6Demo 演示

这是手机京东使用 JDFlutter 改造的签到排行榜页面,页面原先使用 JDReact 实现。改造后的页面操作很流畅,整体的用户体验非常接近原生,几乎很难分辨是用原生还是 Flutter 实现。接下来逐步会有更多的页面、场景来尝试使用 JDFlutter。

▲JDFlutter 签到排行榜

数据统计

JDFlutter 对线上数据进行统计主要包括业务数据和异常数据,无论是哪一方面的数据出现异常,都要及时采取措施。

1业务数据统计

业务数据主要包含业务的 DAU、UV、PV 等基础数据,有以下方案可以统计:

▲数据统计

方案1:在原生跳转入口处增加埋点。

方案2:在Flutter入口main路由中增加页面埋点。

方案3:在Flutter业务页面中增加埋点。

以上3种方法都可以统计出页面数据,方案1可以统计出入口的数据,方案2可以统计出除降级以外的业务数据,方案3可以统计出更精确的业务数据,同时可以提供更详细的其他字段如进入页面时从后台下发的数据。

JDFlutter 框架已经默认支持了方案1和方案2两种数据统计,对这两种数据进行分析不仅可以看出降级率,也可以看到 JDFlutter 页面启动情况;第3种方式的数据需要接入的业务根据需要完成添加。

2异常数据监控

业务上线后会遇到各种各样的问题,异常收集与分析就显得尤为重要。我们通过收集以下几种异常来对异常进行分析:

▲异常监控

后台收集到的异常为了能够更好的分析是哪一块业务代码出现问题,我们在异常数据中加入了业务名称,以及跳转时的参数信息,可以做到有针对性的对 dart 代码的异常进行分析,如果某个业务异常量暴增,我们会对其进行降级处理。

降级容灾

▲JDFlutter 业务降级容灾图

其中降级容灾池数据由后台下发,包含每一个线上业务的降级情况,这其中包括:JDFlutter 业务名称,对应业务的 JDReact 名称,以及该 JDReact 业务的降级 h5 url。降级的过程为:从降级容灾池中取出与之对应的 JDReact 业务名,判断是否可以对该 Flutter 业务降级至 JDReact 业务。

若JDReact业务可用,降级至JDReact业务

若JDReact业务不可用且有h5降级页,则降级至h5页面

若JDReact业务不可用且无h5降级页,JDFlutter统一错误页

若无JDReact业务可降级且有h5降级页,降级至h5页

其他情况,统一显示JDFlutter统一错误页

以上的降级容灾图包含了所有可能的异常。这里值得一提的是为什么我们首先降级至 JDReact:由于我们目前 JDReact 的业务接入已有140多个,可能对这些业务部分优先尝试使用 JDFlutter,为了避免线上会遇到的各种问题,我们首先将其降级至原来的 JDReact 页面不仅可以保证业务的正常运行,用户体验也可以得到保证。

对未来的展望

目前 JDReact 多端融合平台仍然是京东 APP 主要的跨平台开发方案,京东内部接入 JDReact 的 App 有十几个,接入的 JDReact 业务已有140多个,未来会有更多的 JDReact 业务接入。JDFlutter 作为我们接入的第二个跨平台引擎,将来会不断有新业务接入,会有更多新场景使用 JDFlutter 实现。

未来我们会继续完善 JDFlutter 这个新一代的跨平台开发方案,将多端融合平台打造成一个具备 ReactNative 和 Flutter 双引擎开发的平台。

参考文献:

名词解释
JSX:是 react native 的语法格式

JSBridge:原生与 js 之间通过 jsbridge 传递数据

Skia:Flutter 的渲染引擎

Widget:是 Flutter 组件

桥接:就是原生与 Flutter 之间通信的桥梁

分包机制:就是把不同的业务自己打自己的,相同的 lib 部分不打进去

Native Api 能力:就是 Flutter 可以调用京东 App 原生方法的能力

Plugin:是 FLutter 原生与 dart 通信的一种方式,还有一种是 methodchannel
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
历史阅读

腾讯新闻前端性能监控实践
知乎客户端跨平台 Hybrid 调试实战
移动帝国的消亡史,这十年经历的技术风雨

好文就点个好看吧

京东技术中台的Flutter实践之路,深入分析 eval(File.read(File.join(flutter_application_path, ‘.ios’, ‘Flutter’, ‘podhelper.rb’)), binding) 安装pod pod install 打开工程(***.xcworkspace) 配置build phase,为编译Dart 代码添加编译选项打开iOS项目,选中项目的Build Phases选项,点击左上角+号按钮,选择New Run Script Phase,将下面的shell脚本添加到输入框中: “$FLUTTE 阅读详情

相关推荐

京东flutter——底部菜单栏1

import 'package:flutter/material.dart'; import 'package:fultter/flutter_jdshop/pages/tabs/Cart.dart'; import 'package:fultter/flutter_jdshop/pages/tabs/Category.dart'; import 'package:fultter/flutter_jdshop/pages/tabs/Home.dart'; import 'package:fultter/f.

weixin_38107457的博客 288

阿波罗JDFlutter实战系列1:从0-1集成组件

一、概述 本文主要汇总介绍基于Google Flutter封装的JDFlutter,用于组件开发的整体流程,快速准确的定位组件开发的有效信息,为新手小白提供参考; 以下基于 Mac 开发,其中前置准备为相关资料文档,对于0开发经验小白而言,可重点关注熟悉 Dart 语言开发规范,初步掌握之后,可跳过并开始环境构建步骤,逐步带你开发起来~ 二、前置准备 Dart 为 Flutter 开发用语言,Pub 用于提供官方和其他开发者提供的开源插件仓库,yaml 为 Flutter 工程的插件配置文件。 1、开发语言

qq_29262131的博客 343

jdflutter:基于Getx仿写的京东商城项目

flutter_jdshop 一个新的Flutter应用程序。 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程,示例,有关移动开发的指南以及完整的API参考。

京东技术中台Flutter实践之路(二)

移动互联网历经高速发展的黄金10年,多样的市场需求催化了前端技术不断升级改造,真正的前端大统一时代正在来临,不管你愿不愿意相信,大前端技术的发展趋势已是定势,前进的脚步无可改变。众所周知...

京东科技开发者 846

JDFlutter:JDFlutter

JDFlutter 例子 要运行示例项目,请克隆存储库,然后首先从Example目录运行pod install 。 要求 安装 JDFlutter可通过。 要安装它,只需将以下行添加到您的Podfile中: pod 'JDFlutter' 作者 jiedi, 执照 JDFlutter在MIT许可下可用。 有关更多信息,请参见LICENSE文件。

flutter构建widget树demo,flutter资料学习demo,dart语言学习基础

flutter基础学习demo,该demo中利用widget树原理构建复杂的布局和效果,其中使用了动态路由,以及手势;通过该demo可以很好的学习的如何布局,手势的使用以及动态路由的使用,通过这些可以很快的了解到跨平台flutter的魅力所在

springboot 接入京东sdk_京东技术中台Flutter实践之路(二)

Flutter是大前端时代的必经之路移动互联网历经高速发展的黄金10年,多样的市场需求催化了前端技术不断升级改造,真正的前端大统一时代正在来临,不管你愿不愿意相信,大前端技术的发展趋势已是定势,前进的脚步无可改变。众所周知,iOS、Android、Web分别代表着前端技术需要考虑的必要方向,传统的移动互联网开发需要同时考虑多个平台对应的技术研发资源储备,公司开发同一个业务,需要至少三个独...

weixin_39652136的博客 260

机器学习之性能度量

废话不说,本文分为两个部分: 第一部分,我对周志华教授《机器学习》这本书中性能度量知识点中疑难点的学习感悟;第二部分,我感觉该书2.3节 性能度量 中最后部分的代价曲线表述有误,苦于没找到联系教授的正确方式,故希望与广大网友一起探讨。

hustqb的博客 4628

探索京东商城Flutter版:一个跨平台的移动应用框架实践

探索京东商城Flutter版:一个跨平台的移动应用框架实践 在如今的移动开发领域,跨平台是开发者们普遍追求的目标,以实现代码复用和降低维护成本。而Flutter作为Google推出的高效、现代化的UI工具包,正日益受到广大开发者的喜爱。今天我们要介绍的是一个基于Flutter构建的京东商城示例应用——。这是一个开源项目,旨在为开发者提供学习和参考,帮助他们更好地理解和运用Flutter进行实际项目...

gitblog_00040的博客 1145

MATLAB2021b详细安装教程

1.下载 2.安装 下载安装包后打开iso文件,若是无法打开请用解压软件打开。 ①打开MATLAB_R2021b_win64,双击软件开始安装 ② 一直点击下一步,直到步骤③ ③选择我已有我的许可证的文件密钥,并输入62551-02011-26857-57509-64399-54230-13279-37181-62117-65158-40352-64197-45508-24369-45954-39446-39538-16936-10698-58393-44718-32560-10501-40

惜洛-Jankin的博客 9万+

5G NR切换测量事件解析:从A1到B2的实战应用指南

本文深入解析5G NR切换测量事件,从A1到B2的实战应用指南。详细介绍了系统内切换事件(A1-A6)和系统间切换事件(B1-B2)的触发条件与配置建议,帮助优化网络性能。通过实际案例分享,展示如何调整参数提升切换成功率和降低乒乓切换率,适用于5G网络优化工程师。

tcp8optimizer的博客 514

Flutter仿京东商城APP底部导航实现

【代码】Flutter仿京东商城APP底部导航实现。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 668

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操)

本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。

weixin_29264201的博客 1208

【Taro】开发跨平台小程序的利器

Taro 是由京东前端团队开发并开源的一款跨平台开发框架,旨在通过统一的开发框架,实现不同平台间的代码复用。它支持将同一套代码转换为微信小程序、支付宝小程序、H5、React Native 等多种平台的应用程序。Taro 的核心是一个编译器,它会将开发者的代码转换成不同平台的代码,从而避免了手写多个平台代码的麻烦。Taro 的核心理念是“一次开发,多端运行”。开发者只需使用 Taro 提供的 API 编写应用,框架会根据目标平台自动转换生成对应的代码,极大提高了开发效率。

lph159的博客 2232

MT9V034摄像头学习笔记(一)_mt9v034摄像头循迹代码(1)

函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)* 函数名称:uint8 SCCB_SendByte(uint8 Data)* 函数名称:uint8 SCCB_ReadByte(void)* 修改时间:2018年3月4日。* 修改时间:2018年3月4日。

2401_87555661的博客 908

1篇1章3节:R 语言的产生与发展轨迹(更新2024/08/14)

药物的研究阶段包括靶标确定、生物学模型建立、新化学实体的发现和优化新化学实体四个关键环节。每个环节都在药物研发过程中发挥着至关重要的作用。通过科学严谨的方法和技术手段,研究人员能够在药物研发过程中不断探索和优化,从而发现和开发出具有高效、安全性的候选药物,为疾病治疗提供更多的选择和希望。

MD Code 2669

国内大厂在移动端跨平台的框架接入分析

本文通过对国内各大厂旗下知名的应用进行分析,大致统计分析各大厂在移动跨平台开发领域的接入情况,同时分析 Android 端应用的 arm 框架、 kotlin 和 androidx 的使用状态。 因为效(tou)率(lan)问题,这里只分析 Android 端,因为 Android 使用的情况下 iOS 基本也会接入对应的跨平台架构。 因为是个人统计,如有错误或遗漏还请指出。 1、微信(v7.0.15) arm框架: arm64-v8a 包含 kotlin、androidx 跨平台框架:flutter

恋猫de小郭的博客 2156

【WRF-Urban】Registry.EM_COMMON文件概述及urban有关变量

Registry.EM_COMMON文件概述及urban有关变量

WW、forever的博客 1595

Taro 3 正式版发布!京东推出开放式跨端跨框架方案,这些React、Nerv、Vue、jQuey都能支持上了!...

点击“开发者技术前线”,选择“星标????”在看|星标|留言, 真爱来源:凹凸实验室编辑部:可可Taro 是什么?Taro 是由凹凸实验室打造的一套遵循 React 语法规范的多端统...

开发者技术前线-DevolperFront 1512

YOLOv13改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 588

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

京东跨端统一框架 Taro 1.3 正式发布:引入Flutter Doctor ,全面支持React Hooks和JSX,快应用...

点击“开发者技术前线”,选择“星标????”13:21 在看|星标|留言, 真爱来源:凹凸实验室开发者技术编辑部:可可Taro 是什么?Taro 是由凹凸实验室打造的一套遵...

开发者技术前线-DevolperFront 1206

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

推荐文章:【解锁跨平台应用新体验】—— 使用 Uni-NutUI 创建京东风格的应用

推荐文章:【解锁跨平台应用新体验】—— 使用 Uni-NutUI 创建京东风格的应用 随着前端技术的迅速发展,跨平台开发成为了提升效率、降低成本的重要手段。在此背景下,一款结合了京东设计美学与强大功能的开源组件库——Uni-NutUI 应运而生,它基于NutUI,经过适配后完美兼容uni-app框架,让开发者能够更便捷地构建京东风格的应用程序,无论是小程序、H5还是原生App,都能轻松实现。 项目...

gitblog_00062的博客 529

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

2024年国内大厂在移动端跨平台的框架接入分析,2024年最新请把这些学完再去面试

分享一份工作1到5年以上的Android程序员架构进阶学习路线体系,希望能对那些还在从事Android开发却还不知道如何去提升自己的,还处于迷茫的朋友!阿里P7级Android架构师技术脑图;查漏补缺,体系化深入学习提升**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记有任何问题,欢迎广大网友一起来交流网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取。

2401_84545339的博客 2126
上一篇: Google Python 编码规范
下一篇: 知乎客户端跨平台 Hybrid 调试实战
DevolperFront
博客等级 码龄8年 465粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值