字節跳動正式開源其Flutter調試工具UME

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"7 月 21 日,字節跳動正式在 GitHub 開源了他們的 Flutter 應用內調試工具 UME。"},{"type":"text","marks":[{"type":"strong"}],"text":"UME 工具的目的是在脫離 Flutter IDE 與 DevTools 的情況下,爲開發者提供應用內的調試能力"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在字節跳動,UME 內部版已打磨了近一年時間,服務了近二十個 App,衆多插件功能廣受開發者好評。本次發佈的開源版 UME 提供了 10 個不同功能的調試插件,覆蓋 UI 檢查、性能工具、代碼查看、日誌查看等衆多功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Pub 地址:https:\/\/pub.dev\/packages\/flutter_ume"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"GitHub 地址:https:\/\/github.com\/bytedance\/flutter_ume"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了進一步瞭解 UME 相關的信息,InfoQ 採訪了字節跳動 Flutter Infra 團隊軟件工程師趙瑞。以下爲具體內容。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:當時你們爲什麼要考慮研發 UME?具體是想解決哪些問題呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":決定開發 UME 的時候還是在 2020 年的夏天,西瓜視頻有數十個業務使用了 Flutter 進行構建,工程師吐槽較多的一個問題就是 Flutter App 的研發工具並不完善,像 iOS 上的 FLEX、Android 上的 Hyperion,這類工具在 Flutter 的領域完全是空白的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們對內部的開發者也進行了一些調研,他們遇到的一些問題,比如脫離了計算機無法對 Flutter 應用進行調試;內部分發的測試包,需要一些必要的調試工具,以便產品經理、設計師進行需求驗收;Flutter 應用的網絡請求不像 Native 應用一樣容易抓包。這些問題都指向了同一個需求:Flutter 需要一系列能在應用內實現調試能力的工具。當時我們基礎技術的同學一拍即合,決心投入人力開發這樣一款工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:根據你的瞭解,行業內其他公司有做類似 UME 這樣的工具嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":社區裏面之前是沒有的,在 UME 上線了幾個月後發現社區裏有些原本只有 Native 版本的調試工具推出了 Flutter 的版本。我們也很欣慰,這一現象說明不只我們的業務有這種需求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:UME 的設計理念是?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":與其說 UME 是一個調試工具,不如說是調試工具平臺。強調“平臺”,是想告訴大家,UME 允許用戶自行開發插件並集成進平臺。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"UME 框架本身是一個去中心化的 Flutter package"},{"type":"text","text":",提供了基礎的插件管理能力、通用的插件 UI 容器、通用的 VM Service 訪問接口等。我們本次發佈的開源版 10 個插件都是互相獨立、沒有耦合的包,用戶可以根據自己的需求,選擇性接入所需插件,甚至基於 UME 自行開發適合業務的插件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在字節跳動內部,就有一些業務基於 UME 開發了各種實用工具與插件,如“視頻的 videoID 查看插件”、“登錄信息查看工具”、“測試環境切換工具”等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來也會開放插件的通用協議,允許插件基於協議通信,實現插件之間互相調用的能力,敬請期待。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:現在你們團隊大概有幾個人開發或者維護 UME?大概有哪些業務使用?支持哪些版本的 Flutter?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":目前 UME 由字節跳動 Flutter Infra 團隊維護,諸多能力是由團隊中負責不同方向的同學一起攻堅出來的成果。截至目前,公司內部有近 20 個業務接入了 UME,除了大家耳熟能詳的產品之外,很多新業務也接入了 UME,並且開發者反饋較好,新特性也在持續迭代中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本次開源的 UME 支持 1.12 至 2.2 版本的 Flutter,幾乎覆蓋了所有主流的 Flutter 版本。這幾天支持空安全特性的版本也發佈了,能夠在 2.x 版本中開啓健全的空安全特性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我看到官方說明裏,你們內部用的,和開源的版本不是一套?未來會統一嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":內部版本和開源版本在結構上、理念上是一致的,框架主體的代碼是完全複用的,但插件的數量、插件的實現會有一定的差異。這裏主要原因是內部版很多功能依賴了引擎的改動,其中一些特性涉及的改動又很大,難以合入官方的倉庫中,因此暫時無法拿出來貢獻到社區中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"比如說內部版允許通過自定義標記,在 Release 模式下選擇接入或剝離 UME,這就依賴了 Conditional import 特性;網絡請求的插樁收集與 Mock,依賴了自定義 Transformer。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"未來會保持內部版和開源版的同步迭代"},{"type":"text","text":";對於一些內部版獨有的功能我們也會考慮通過解除引擎耦合、尋找替代組件、引擎改動合入官方倉庫等方案,將這些內部版功能帶給社區,打造更強大的開源版本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:接下來這個開源項目有什麼中長期計劃嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"趙瑞"},{"type":"text","text":":主要是三個方向,首先會保持並提升開源項目的品質,儘量保持對 Flutter 版本的較大範圍兼容;第二加強與社區的交流與合作共建,集思廣益爲 UME 增加更多實用功能;第三將 "},{"type":"text","marks":[{"type":"strong"}],"text":"UME 內部版的獨有功能,努力帶給社區"},{"type":"text","text":",爲 Flutter 的生態添磚加瓦。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章