【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

滴滴正式发布开源客户端研发助手 DoKit 3.0,新特性解读

  • 2020-03-25
  • 本文字数:4889 字

    阅读完需:约 16 分钟

滴滴正式发布开源客户端研发助手DoKit 3.0,新特性解读

DoraemonKit,简称 DoKit,中文名哆啦 A 梦,是滴滴开源的一款功能齐全的客户端( iOS 、Android )研发助手。今天,Dokit 3.0 版本正式发布,开发者朋友可以选择更新、试用,本文是 DoKit 团队对本次更新的技术解读。

一、DoKit3.0 - 不只是工具

首先我要代表团队对于大家一直以来对 DoKit 的支持表示感谢,DoKit 的今天离不开大家共同的努力和贡献。所以为了更好的回馈社区,我们近期一直在努力的升级内部架构,同时我们还结合实际业务场景新增了两个重磅的功能:接口 mock健康体检,配合平台端 dokit.cn 一起使用,让 DoKit 的能力得到延伸。当前,DoKit3.0 版本已经发布,在这里非常欢迎大家的升级使用。同时也很希望大家能将使用过程中遇到的各种问题通过各种渠道 (github issues、QQ 群等等) 反馈给我们,让我们大家一起努力把 DoKit 的生态建立的更加完善。


在这之前我想问一个问题:大家想起 DoKit 第一印象是什么?好像只是一个端上的工具,包括 Android、iOS、小程序。功能丰富、好用,提高了大家的研发效率,同时也获得了社区包括我们滴滴内部业务的广泛好评。但是我们团队在讨论 DoKit 的定位以及未来规划的时候在想:那在我们自己的心目中 DoKit 应该是什么样的?


简单的工具集合肯定不是我们想要的,我们希望将 DoKit 打造成一个平台,一个能够满足泛前端开发、测试、设计等等需求的功能丰富的通用型平台。这样当以后大家再想起或者向别人介绍 DoKit 的时候会说,DoKit 是一个通用的研发平台,而不仅仅只是一个工具。为此我们推出了 DoKit3.0,这也是我们实现目标的第一步。


二、3.0 新特性

2.1 优化点

1)DoKit 3.0 相比于上一个版本一共解决了 github 上的 issues 70 多个,合并 PR 30 多个;


2)内部架构升级,其中性能和代码的健壮性都得到了显著的提升;


3)工具优化用户体验优化。


Android


Android 端主要优化了网络拦截、悬浮窗、位置模拟、Aop 解决方案等等:


1)网络拦截统一了 okhttp、urlconnection;


2)悬浮窗新增了普通模式,不再需要系统悬浮窗权限;


3)位置模拟现已支持百度、腾讯、高德、系统原生;


4)AOP 的代码插装方案也由一开始的 Aspectj 改成了 ASM 方案,兼容性和性能也都有了明显的提升。


iOS


iOS 端主要优化了多个工具的用户体验、加速代码安装速度、减少对于业务方的影响等等:


1)NSLog 监控、子线程 UI、CocoaLumberjack 日志日志监控等功能不需要重新启动 App 即可进行开关;


2)pod 仓库多地备份(github、gitee、gitlab),解决 pod install 缓慢的问题;


3)解决 DoKit 的 window 影响 UIMenuController 的吗,导致业务方在某些机型弹不出来的问题;


4)减少代码 hook 对于全局的影响;


5)全局支持中英文切换。

2.2 新增工具

以下新增的大部分 Kit 在 Android 和 iOS 两端是对齐的,有些平台特有的功能我会进行标注。

(1)数据 Mock

提供一套基于 App 网络拦截的接口 Mock 方案,无需修改代码即可完成对于接口数据的 Mock。详细介绍:


https://www.dokit.cn/#/index/productCenter


(2)健康体检

一键式操作,整合 DoKit 多项工具,数据可视化,快速准确定位问题,让你对 app 的性能了如指掌。详细介绍:


https://www.dokit.cn/#/index/HealthTest


(3)DBView

主要能帮我们将 db 等本地数据在浏览器中进行操作,十分方便。DBView 和本地沙盒的主要区别在于本地数据库在端上的体验效果并不是很好,因为受限于屏幕的大小,所以我们引入这 DBView,可以将我们的本地数据库和浏览器打通,在浏览器上进行增删改查等等操作,提升我们的效率。详细介绍:


http://xingyun.xiaojukeji.com/docs/dokit/#/DBView



  • android 直接接入的 Android-Debug-Database 方案;

  • iOS 是由社区同学 y500 提供的 iOSDebugDatabase, 感谢该同学的贡献。

(4)函数耗时

Android:函数耗时主要通过 ASM 代码插装的方式,会在指定的包名下进行代码插装,统计每个函数的耗时,默认情况下会在控制台中将执行时间大于 200 微妙的函数调用栈打印出来。后续我们计划将函数耗时和平台端打通,记录下每一个函数耗时操作。


iOS:iOS 采用的额是 Hook objc_msgSend, 会以树形结构打印出某一段操作中具体的函数耗时,比 Xcode 的 TimeProfiler 更加直观。详细介绍:


http://xingyun.xiaojukeji.com/docs/dokit/#/TimeProfiler



Android 端效果图

(5)其他工具

  • 快速跳转到应用设置 :避免手动去设置里面寻找 App 的麻烦;

  • NSUserDefalult(iOS) :对于 NSUserDefalult 的数据方便进行增删改查;

  • UI 层级检查 :检查每一个 UI 界面的成绩,成绩太深的话,会影响一定的性能;

  • 启动耗时 :检查每一次启动消耗的时间;

  • UI 结构(IOS) :可以动态改变每一个 UI 元素的属性,感谢社区 HDB-Li 提供;


用户可以自行更新体验。

三、dokit.cn 平台介绍

为了让 Dokit 的端上能力得延伸和扩展,同时也是为了更好的服务好我们的每一个业务方,让 DoKit 成为一个能够满足泛前端开发、测试、设计等等各方都需要的功能丰富的通用型平台。我们组内经过讨论决定推出 dokit.cn。平台端主要包含以下几项内容:


1)用户登录


2)使用中心


3)产品中心: 包含 接口 Mock 和 健康体检 的功能详细介绍


4)控制台: 主要提供产品管理、用户管理、数据 Mock、健康体检等功能。必须登录以后才能访问,你可以创建的每一个产品。然后需要将你的 ProductId 集成到 Android 和 iOS 中去。详细介绍:


http://xingyun.xiaojukeji.com/docs/dokit/#/WebInstruction

四、接口 mock 和健康体检技术原理

4.1、接口 Mock

整体流程图


第一步: 前往 dokit.cn 平台进行账号注册并登录, 然后在控制台中进行产品创建,并将产品 Id 集成到安卓和 iOS 中。具体参考上文安卓和 iOS 集成。


第二步: 在平台端的数据 Mock 模块中进行相应的接口 Mock 创建。


第三步: 每次进入 SDK 的数据 Mock 页面,会加载在 DoKit 平台添加的 Mock 接口列表并和本地数据进行合并。


第四步: 打开拦截接口开关并选中相应的场景或者打开接口模板开关 (拦截模块和模板模块相互独立),等待真实的网络请求命中我们的拦截规则。


拦截规则: 假如命中拦截规则我们会将 http 重定向到我们的 DoKit 后台并返回 Mock 数据。


模板规则: 假如命中模板规则,我们会将真实的接口数据保存,用户可以进入模板页面, 找到指定的模板项并将模板数据上传到我们的 DoKit 后台并用于创建场景。

效果演示

接口拦截效果图





接口模板效果图





想象以下几种情形:


  1. 以前我们要在移动端要进行接口 Mock 的常规操作,基本上都是先拿到一个定义好的 mock 接口然后在代码中修改 url,然后等待编译、完成以后运行一下好像没什么问题然后又改回去编译。重复这样的操作。

  2. 一般来说我们泛前端都是需要依赖后端的接口进行开发的,这个操作无法同时进行,所以当多条业务需求同时开发的时候就容易由于资源不足和安排不当造成进度阻塞。

  3. 关于测试用例。一般来说我们在需求评审完成以后我们的测试人员就开始编写测试用例了,但是这样的用例往往都是文档化的,我们研发要进行用例测试边界情况的时候往往是通过修改代码来完成的。测试用例大部分用例也是依赖接口的。


当然不止以上几种情况, 我们都知道接口联调和测试在我们研发中占的比重是很大的,同时也是需要我们反复的修改代码来进行测试和适配,这往往消耗着我们绝大部分的精力。


那我们 dokit 的操作是怎么解决这个问题的呢?


我们 dokit 区别于其他接口 Mock 方案,因为我们具有端上的优势, 我们依赖端上的本地抓包功能,通过拦截所有的网络请求,根据 path 和 query 字段 (跟域名无关) 去匹配我们在平台端创建的 mock 接口。然后上传真实接口模板并支持各种场景切换。因为同一个接口往往具有不同的场景,比如验证码验证成功或者失败等等。测试也可以在我们平台端提前编写好测试用例接口以及各种边界情况。开发在研发阶段就能参与到测试用例的验证。也可以预想整理好整个链路的 mock 接口,让我们在测试过程中按照自己制定各种 case 往下走。


所以我们 DoKit 解决方案的最大优势就是:无需进行任何业务代码的修改的情况下去完成绝大部分的接口 Mock 需求。

4.2、健康体检


健康体检部分主要我们整合了 DoKit 端上的的各项工具,比如网络、cpu、fps、内存等 9 个性能指标。于此同时为了让整个流程更加的符合测试人员的操作习惯,我们化繁为简,将整个流程分为以下三步:


1)启动


2)正常的操作页面然后在每个页面根据倒计时提醒停留 10s 左右,完成每个页面的性能数据采集工作。


3)点击上传,填写用例的名称和测试人员名称,等待数据上传完成。


我们的每一次性能测试结果都将在我们的后台中进行记录。我们平台端记录的数据十分全面,基本上涵盖了我们的大部分需求,并且我们在后端会针对性能数据进行精准的分析并给出分析结果。还有就是我们针对性能数据进行了图表化的展示,使得每一次的性能测试更加直观。这样我们在整理的时候也不需要自己再根据数据去导出各种报表了,直接截图就可以用了。在这一块还是比较贴心的。


以下为健康体检的数据展现示例:


五、接入方式

5.1、iOS 接入方式

Cocoapods 依赖

pod 'DoraemonKit/Core', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 必选    pod 'DoraemonKit/WithLogger', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选    pod 'DoraemonKit/WithGPS', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选    pod 'DoraemonKit/WithLoad', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选    pod 'DoraemonKit/WithDatabase', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选    pod 'DoraemonKit/WithMLeaksFinder', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选    pod 'DoraemonKit/WithWeex', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']// 可选
复制代码

初始化 SDK

#ifdef DEBUG#import <DoraemonKit/DoraemonManager.h>#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef DEBUG [[DoraemonManager shareInstance] installWithPid:@"productId"];//productId 为在"平台端操作指南"中申请的产品 id #endif}
复制代码

5.2、Android 接入方式

gradle 依赖

# 添加仓库buildscript {    apply from: "config.gradle"    repositories {        google()        jcenter()        maven { url 'https://www.jitpack.io' }
} dependencies { classpath 'com.android.tools.build:gradle:3.6.1' classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.0.0' }}
allprojects { repositories { google() jcenter() }}
复制代码

插件引入

# 项目 app module 的 build.gradle 中apply plugin: 'com.didi.dokit'
复制代码

SDK 引入

debugImplementation "com.didichuxing.doraemonkit:doraemonkit:3.0.0"releaseImplementation "com.didichuxing.doraemonkit:doraemonkit-no-op:3.0.0"
复制代码

SDK 初始化

public class App extends Application {    private static final String TAG = "App";    public static Activity leakActivity;
@Override public void onCreate() { super.onCreate(); //productId 为在"平台端操作指南"中申请的产品 id DoraemonKit.install(this, null, "productId"); }}
复制代码

5.3、使用中心

其他更多细节的介绍和用户指南,请移至使用中心:


http://www.dokit.cn/

六、总结

最后还是要感谢一下社区一直以来的支持,是你们的积极响应和反馈让 DoKit 变得更好,DoKit 所取得的所有成绩都来至于大家共同的努力。未来,DoKit 还有很长的路要走,我希望接下来走的每一步都有你的陪伴。


附上 GitHub 地址,留下你的小星星:


https://github.com/didi/DoraemonKit


2020-03-25 18:022840

评论

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

模块六作业

panxiaochun

架构实战营

【入门教程直播第三期】如何完成一次高质量的 OceanBase 数据迁移

OceanBase 数据库

数据库 学习 开源 课程 oceanbase

2022北京-AI人工智能-主题展

InfoQ_caf7dbb9aa8a

在自己的服务器上部署hexo博客

为自己带盐

Hexo 28天写作 12月日更

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析

洛神灬殇

RocketMQ 消息队列 Apache RocketMQ 12月日更 System Busy/Broker busy

netty系列之:一个价值上亿的网站速度优化方案

程序那些事

Java Netty nio 程序那些事 12月日更

30个类手写Spring核心原理之Ioc顶层架构设计(2)

Tom弹架构

Java spring 源码

2022北京展会专题

InfoQ_caf7dbb9aa8a

智慧园区系统建设助力智慧城市信息化建设

a13823115807

智慧城市 智慧园区 智慧园区系统平台建设

大数据开发之传输组件Sqoop的功能介绍

@零度

大数据 sqoop

架构实战营-模块六作业

无名

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

Spark和Hadoop以及区别

编程江湖

大数据

OceanBase 源码解读(七):一文读懂数据库索引实现原理

OceanBase 数据库

开源 oceanbase 技术解析

2022世界物联网AIOTE博览会-北京开幕

InfoQ_caf7dbb9aa8a

Zilliz 上榜甲子光年「2021 中国最具商业潜力的20 家数据智能 Cool Vendor」

Zilliz

浅析流媒体CDN与WEB CDN的业务差异

郑州埃文科技

CDN加速 IP网络 在线并发

数据库大赛50强之「中国人民大学」:培养工程性精英人才,共筑数据库美好未来

OceanBase 数据库

开源 新闻动态 oceanbase OceanBase 数据库大赛

注册了一个新域名(10/28)

赵新龙

28天写作

万吨黄金做后盾!央行数字货币正式拉开序幕

CECBC

央行数字货币完成闭环测试 亮剑在即

CECBC

模块6作业

Asha

MySql优化:一条SQL语句的执行过程是怎样的?

秋水

MySQL性能优化 内容合集 签约计划第二季

2022第十五届北京国际物联网展览会

InfoQ_caf7dbb9aa8a

北京行动计划

练手练到阅文集团作家中心了,python crawlspider 二维抓取学习

梦想橡皮擦

12月日更

区块链技术何以成为中国数字化转型最新驱动力?

CECBC

2022年企业采购多云管理软件就选行云管家!

行云管家

云计算 公有云 混合云 多云 云管理

Linux一学就会之文件系统结构-硬链接和软链接

学神来啦

Linux 运维 链接 linux云计算 硬盘

2022北京-大数据-博览会

InfoQ_caf7dbb9aa8a

青岛等保测评机构有几家?咨询电话多少?在哪里?

行云管家

网络安全 等保 等级保护 等保测评 等保2.0

站在你领导的角度考虑问题

张老蔫

28天写作

Camtasia有哪些基本功能

淋雨

Camtasia 录屏软件

滴滴正式发布开源客户端研发助手DoKit 3.0,新特性解读_大前端_DoKit 开源团队_InfoQ精选文章