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 的话,可以在视频号给我私信,我单独发你。
评论