如何提高架构的稳定性、可扩展性和易用性等能力?点击看大咖分享 了解详情
写点什么

字节跳动正式开源其 Flutter 调试工具 UME

  • 2021 年 7 月 27 日
  • 本文字数:1828 字

    阅读完需:约 6 分钟

字节跳动正式开源其Flutter调试工具UME

7 月 21 日,字节跳动正式在 GitHub 开源了他们的 Flutter 应用内调试工具 UME。UME 工具的目的是在脱离 Flutter IDE 与 DevTools 的情况下,为开发者提供应用内的调试能力


在字节跳动,UME 内部版已打磨了近一年时间,服务了近二十个 App,众多插件功能广受开发者好评。本次发布的开源版 UME 提供了 10 个不同功能的调试插件,覆盖 UI 检查、性能工具、代码查看、日志查看等众多功能。


Pub 地址:https://pub.dev/packages/flutter_ume

GitHub 地址:https://github.com/bytedance/flutter_ume


为了进一步了解 UME 相关的信息,InfoQ 采访了字节跳动 Flutter Infra 团队软件工程师赵瑞。以下为具体内容。


InfoQ:当时你们为什么要考虑研发 UME?具体是想解决哪些问题呢?


赵瑞:决定开发 UME 的时候还是在 2020 年的夏天,西瓜视频有数十个业务使用了 Flutter 进行构建,工程师吐槽较多的一个问题就是 Flutter App 的研发工具并不完善,像 iOS 上的 FLEX、Android 上的 Hyperion,这类工具在 Flutter 的领域完全是空白的。


我们对内部的开发者也进行了一些调研,他们遇到的一些问题,比如脱离了计算机无法对 Flutter 应用进行调试;内部分发的测试包,需要一些必要的调试工具,以便产品经理、设计师进行需求验收;Flutter 应用的网络请求不像 Native 应用一样容易抓包。这些问题都指向了同一个需求:Flutter 需要一系列能在应用内实现调试能力的工具。当时我们基础技术的同学一拍即合,决心投入人力开发这样一款工具。


InfoQ:根据你的了解,行业内其他公司有做类似 UME 这样的工具吗?


赵瑞:社区里面之前是没有的,在 UME 上线了几个月后发现社区里有些原本只有 Native 版本的调试工具推出了 Flutter 的版本。我们也很欣慰,这一现象说明不只我们的业务有这种需求。


InfoQ:UME 的设计理念是?


赵瑞:与其说 UME 是一个调试工具,不如说是调试工具平台。强调“平台”,是想告诉大家,UME 允许用户自行开发插件并集成进平台。


UME 框架本身是一个去中心化的 Flutter package,提供了基础的插件管理能力、通用的插件 UI 容器、通用的 VM Service 访问接口等。我们本次发布的开源版 10 个插件都是互相独立、没有耦合的包,用户可以根据自己的需求,选择性接入所需插件,甚至基于 UME 自行开发适合业务的插件。


在字节跳动内部,就有一些业务基于 UME 开发了各种实用工具与插件,如“视频的 videoID 查看插件”、“登录信息查看工具”、“测试环境切换工具”等。


接下来也会开放插件的通用协议,允许插件基于协议通信,实现插件之间互相调用的能力,敬请期待。


InfoQ:现在你们团队大概有几个人开发或者维护 UME?大概有哪些业务使用?支持哪些版本的 Flutter?


赵瑞:目前 UME 由字节跳动 Flutter Infra 团队维护,诸多能力是由团队中负责不同方向的同学一起攻坚出来的成果。截至目前,公司内部有近 20 个业务接入了 UME,除了大家耳熟能详的产品之外,很多新业务也接入了 UME,并且开发者反馈较好,新特性也在持续迭代中。

本次开源的 UME 支持 1.12 至 2.2 版本的 Flutter,几乎覆盖了所有主流的 Flutter 版本。这几天支持空安全特性的版本也发布了,能够在 2.x 版本中开启健全的空安全特性。


InfoQ:我看到官方说明里,你们内部用的,和开源的版本不是一套?未来会统一吗?


赵瑞:内部版本和开源版本在结构上、理念上是一致的,框架主体的代码是完全复用的,但插件的数量、插件的实现会有一定的差异。这里主要原因是内部版很多功能依赖了引擎的改动,其中一些特性涉及的改动又很大,难以合入官方的仓库中,因此暂时无法拿出来贡献到社区中。


比如说内部版允许通过自定义标记,在 Release 模式下选择接入或剥离 UME,这就依赖了 Conditional import 特性;网络请求的插桩收集与 Mock,依赖了自定义 Transformer。


未来会保持内部版和开源版的同步迭代;对于一些内部版独有的功能我们也会考虑通过解除引擎耦合、寻找替代组件、引擎改动合入官方仓库等方案,将这些内部版功能带给社区,打造更强大的开源版本。


InfoQ:接下来这个开源项目有什么中长期计划吗?


赵瑞:主要是三个方向,首先会保持并提升开源项目的品质,尽量保持对 Flutter 版本的较大范围兼容;第二加强与社区的交流与合作共建,集思广益为 UME 增加更多实用功能;第三将 UME 内部版的独有功能,努力带给社区,为 Flutter 的生态添砖加瓦。


字节跳动资深软件工程师王凯曾经在 GMTC 详细分享过他们内部的 Flutter 高可用建设体系,如果你想看他的 Slides 的话,可以在视频号给我私信,我单独发你。



2021 年 7 月 27 日 14:147245
用户头像
郭蕾 关注我视频号:极客时间小盖

发布了 219 篇内容, 共 123.3 次阅读, 收获喜欢 175 次。

关注

评论

发布
暂无评论
发现更多内容

Gitlab Java API 使用示例

Java gitlab 4月月更

统计代码耗时的工具

Rubble

4月日更 4月月更

消息队列存储消息数据的 MySQL 表格设计

李大虾

#架构实战营 「架构实战营」

都是分布式操作系统,Laxcus和鸿蒙有何不同?

LAXCUS分布式操作系统

分布式计算 分布式存储 集群架构 鸿蒙系统 分布式操作系统

JavaWeb之Cookie和Session技术(四)

爱好编程进阶

Java 面试 后端开发

市场进展不断,STI 包括ZB等一系列上线预示着什么?

西柚子

模块8-设计消息队列存储消息数据的 MySQL 表格

卡西毛豆静爸

#架构实战营

架构实战营作业 8

zh

架构实战营

week6作业

Asha

模块八作业:设计消息队列存储消息数据的 MySQL 表格

炎彬

「架构实战营」

模块8作业

Mr小公熊

第八个模块作业

achilles

模块3 作业

KennyQ

作业八

Geek_f3e842

架构实战营

浅谈项目中的需求管理

秋去冬来春未远

需求管理 需求分析 需求和问题

Java中的复用类

爱好编程进阶

Java 面试 后端开发

消息队列数据存储表设计

随欣所遇

架构训练营5期

性能分析优化的道与术

老张

性能优化 性能分析

尤达 DDD 领域驱动设计思想课程总结

代廉洁

尤达DDD领域驱动设计思想

消息队列存储消息数据的 MySQL 表格

阿卷

架构实战营

微信小程序开发设计需要注意的五个点

源字节1号

前端 后端 软件开发 小程序开发

商业分析:SheIn是怎样成功的?

石云升

跨境电商 商业分析 4月月更

消息队列存储消息数据的mysql表设计

五月雨

架构实战营 「架构实战营」

多系统信息化实施项目注意事项

秋去冬来春未远

数字化 信息化 系统集成 ERP 多系统

Java中高级核心知识全面解析——Linux基本命令

爱好编程进阶

Java 面试 后端开发

【国产化替代专题】星环科技春季新品发布周

星环科技

GitOps多环境部署问题及解决方案

俞凡

研发效能 gitops

JavaWeb快速入门--Servlet(2)

爱好编程进阶

Java 面试 后端开发

你好spring-cloud-kubernetes

程序员欣宸

4月月更

架构实战营:模块八作业

刘璐

“芯”有灵“蜥” 走进 Intel MeetUp

“芯”有灵“蜥” 走进 Intel MeetUp

字节跳动正式开源其Flutter调试工具UME_语言 & 开发_郭蕾_InfoQ精选文章