写点什么

字节跳动正式开源其 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:146747
用户头像
郭蕾 关注我视频号:极客时间小盖

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

关注

评论

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

【前端面试题】关于一些js的一些面试题(金融行业),我和面试官扯了三个小时

孙叫兽

JavaScript 前端 金融 笔试题

堪称完美!中国Java之父纯手打,阿里首发:多线程与高并发

Java架构之路

Java 程序员 架构 面试 编程语言

使用“零信任”,不惧“内部威胁”!

龙归科技

管理 数据完整性 零信任 内部威胁

区块链电子发票平台,区块链电子发票优势

13530558032

智慧党建信息管理平台系统建设

13530558032

如何批量下载YouTube视频到本地

科技猫

软件 音视频 经验分享 资源分享 工具分享

2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)

比伯

Java 编程 架构 面试 程序人生

电子门锁没电的解决办法

孙叫兽

生活 程序人生 电子锁

GO训练营第11周——DNS&CDN&多活架构

Glowry

LeetCode题解:213. 打家劫舍 II,动态规划(不缓存偷盗状态),JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

收藏!Linux常用命令合集

roseduan

Linux

Java 和 Python 关于 % 的那些坑

与你一起学算法

Java Python

2B营销路径: 9大步骤自我拆解

boshi

营销数字化 七日更

「面试高频」秒杀架构的设计套路,你值得拥有

我爱娃哈哈😍

架构设计 架构设计实战 秒杀架构

Java面试必看!阿里(嵩山版)分布式核心原理笔记来了

Java架构追梦

Java 阿里巴巴 架构 面试 架构分布式

全票通过!微众开源项目EventMesh进入Apache孵化器

微众开源

Apache 开源 Event 事件网格 eventmesh

看了上百份面经,发现每次面试的问题都逃不过这几方面

yes

面试

我看 JAVA 之 引用类型(Reference)

awen

Java ThreadLocal Reference

炸了,炸了!阿里P9纯手打Java面试小抄(21版)在GitHub上已获80万star

Java架构之路

Java 程序员 架构 面试 编程语言

GO训练营第10周——日志&指标&链路追踪

Glowry

EGG Network公链技术创新,EFTalk打造高效全能公链

币圈那点事

区块链

拍乐云推出“实时标注”,助力少儿编程、在线金融等行业场景实现高效互动

拍乐云Pano

音视频 在线教育 互动白板 实时标注 在线金融

寻找被遗忘的勇气(十九)

Changing Lin

3月日更

【LeetCode】设计停车系统Java题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

源中瑞智慧社区解决方案,社区服务平台

13530558032

安卓嵌入式底层开发!整理出这份8万字Android性能优化实战解析,已开源

欢喜学安卓

android 程序员 面试 移动开发

FFmpeg入门篇

Changing Lin

ffmpeg media

跟我学ModelArts丨探索ModelArts平台个性化联邦学习API

华为云开发者社区

联邦学习 API 华为云 modelarts AI算法

快点来学吧!Android性能优化面试题集锦,深度解析,值得收藏

欢喜学安卓

android 程序员 面试 移动开发

冲击大厂!阿里P9纯手打Java面试小抄(21版)在GitHub上已获80万star

Java 程序员 面试

2021 年要了解的 34 种 JavaScript 简写优化技术

LeanCloud

JavaScript 面试 前端

聊聊IO夯的那些事

聊聊IO夯的那些事

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