对于一款由多只程序猿协同开发的app,存在着一个不小的挑战,那就是几乎不可能有某一只猿能通盘熟悉整个项目的所有模块。(对于单只猿来说)这种碎片化、过于单一的知识将在新功能开发、bug排查或者性能调优等工作上带来巨大的困难。为了帮助Facebook的程序猿能更好地处理这个坑爹的问题,他们开发了一款叫Sonar的跨平台调试工具。Sonar提供给架构狮和程序猿一个可视化的界面,用来调查框架使用者的重要信息。如今Facebook正逐步完善并且开源Sonar(https://fbsonar.com/) 来帮助其他程序猿加速应用程序开发。借助Sonar,程序猿们将拥有高度灵活度、更直观的方式来检查和理解他们的iOS和Android应用程序的结构和行为。Facebook相信Sonar可以通过提供更直观和更具互动性的体验来改进当前的工具,这些体验是可扩展的,能适配程序猿的特定需求。
Sonar
这个项目始于三年多前,当时Facebook发布了一款基于Chrome开发工具的Android调试神器——Stetho(http://facebook.github.io/stetho/)。通过Sonar,Facebook想在Stetho的基础上,设计出一种更具扩展性、拥有更丰富的用户体验的工具,并在iOS和Android上都能使用。随着Sonar(https://github.com/facebook/Sonar/)的发布,Facebook正在与开源社区共享这项工作。在大多数使用情况下,Facebook建议使用Sonar代替Stetho。当程序猿需要一个尚未在Sonar中实现的特定特性(例如dumper上的的命令行工具)时,他们可以继续使用Steho。
Sonar的扩展性
Sonar使Facebook程序猿能够更容易地检查应用程序的行为。它已经在许多项目中使用,示例包括:
通过Litho和ComponentKit组件,为程序猿提供“更精确”、“与他们正在使用的特性和功能类似”的访问视图层次结构的能力。
与原生网络事件相反,对GraphQL请求可视化
实时跟踪性能标记,允许开发人员更容易地研究性能问题。
Sonar从设计之初就专注于可扩展性的特点,于是,程序猿们开发了一堆插件,有些是通用的有些则是针对Facebook定制化的。在Sonar平台上,Facebook开源了他们认为对开源社区最有价值的插件。随着Sonar的发布,程序猿们将能够检查他们的应用程序的布局,无论应用程序是用标准的Android /iOS视图还是Litho/ComponentKit组件构建的,还能查看来自他们的应用程序的网络流量和系统日志。
(由于)从一开始就与Facebook内部框架组和业务组程序猿紧密合作,因此Facebook能够确保他们的插件API强大到足以构建各种各样的工具。事实上,Sonar中包含的所有工具本身都是插件;Sonar的核心只提供一组UI组件并管理设备之间的连接。这就意味着任何一只猿都可以构建强大的自定义插件。
一个开源的框架
Sonar由两部分构成:一个桌面客户端以及一个移动端SDK。Sonar的用户主要是与桌面客户端来交互。移动端SDK则是直接被安装在想要被调试的Android或者iOS应用程序内,并且SDK会将数据传输给桌面客户端。桌面客户端则是建立在Electro以及Facebook开源项目之上,包括React.js、Flow、 Metro、RSocket,以及 Yarn。移动端SDK还大量使用了Facebook的开源项目如Folly和RSocket。
为了通过插件来扩展Sonar,有个程序猿写了一个用来渲染UI的桌面客户端插件以及一个暴露数据的移动端SDK插件。对于桌面客户端插件,程序猿只需要创建一个扩展客户端的基本插件类的React组件。这个React组件负责与移动SDK插件通信并渲染它提供的任何数据。桌面端插件同样可以对移动端SDK插件发送命令。移动端SDK插件可以使用原生平台的开发语言如Swift/Objective-C、Java/Kotlin来进行开发。移动端SDK插件注册了一组Handler并为它们定义响应,类似于程序猿通常构建处理客户端请求的服务器应用程序。
作者:Meteorwizard
链接:https://www.jianshu.com/p/02c50fa00561
共同学习,写下你的评论
评论加载中...
作者其他优质文章