写点什么

滴滴正式发布开源客户端研发助手 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:023035

评论

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

汽车域控制器(上):动力域控制器、底盘域控制器、智能座舱域控制器

SOA开发者

在GitHub标星86k+霸榜的某宝Redis核心原理深度实践PDF限时开源!

Java 架构 面试 程序人生 编程语言

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

9. python 入门教程快速复习,序列,数值类型,字符串方法,列表、集合、字典方法,文件操作,解析式

梦想橡皮擦

10月月更

直播回顾 | 云和恩墨范计杰:Oracle DBA的SQL编写技能提升宝典(含SQL资源)

墨天轮

oracle sql 函数

系统召回太慢?上 Milvus × PaddleRec 双剑合璧大法!

Zilliz

数据库 推荐算法 召回 向量检索

Superior Scheduler:带你了解FusionInsight MRS的超级调度器

华为云开发者联盟

大数据 hadoop 开源 调度器 FusionInsight MRS

聊一聊物联网嵌入式芯片的内容结构

华为云开发者联盟

物联网 内存 存储 嵌入式 芯片

盘点后端领域的点点滴滴 | 引航计划|后端

xcbeyond

后端 引航计划 内容合集 技术专题合集

语音翻译器 Tech Support

凌天一击

上汽零束汽车智能应用创意大赛,初赛作品评选将启动!

SOA开发者平台

上汽零束汽车智能应用创意大赛,初赛作品评选将启动!

SOA开发者

第 13 章 -《Linux 一学就会》- Linux文件系统结构

学神来啦

Linux 运维 linux学习

什么是激光雷达的“发动机技术”?一文讲透行业技术壁垒 (一)

SOA开发者

腾讯面试聊到的几种存储虚拟化

hanaper

看一遍就理解:MVCC原理详解

Java MySQL 架构 面试 后端

架构实战营 毕业设计项目

蔸蔸

OBServer启动恢复解析

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 数据库大赛

模块八:设计消息队列存储消息数据的MYSQL表格

kk

架构训练营

华为云GaussDB(for openGauss) 同城双集群高可用方案正式发布

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库

细节理解!阿里内部Java高并发系统设计全彩手册曝光!霸榜GitHub

进击的王小二

Java 架构 高并发 Java性能调优

Vue进阶(幺贰捌):Vue插槽:slot、slot-scope与指令v-slot应用讲解

No Silver Bullet

Vue 插槽 10月月更

高并发中的 限流、熔断、降级、预热、背压!

进击的王小二

高并发 java

想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

华为云开发者联盟

MySQL 数据库 华为云 备份 XtraBackup

华为技术官珍藏版:SpringBoot全优笔记,面面俱到,实在太全面了

Java 架构 面试 微服务 后端

不可思议!阿里大佬熬夜9天整理出749的HotSpot VM源码笔记

Java 架构 面试 程序人生 编程语言

211本+985硕+计算机专业投面百度,坐等一周迎来三面,已拿offer

Java 程序员 架构 编程语言

什么是激光雷达的“发动机技术”?一文讲透行业技术壁垒(二)

SOA开发者

深度解读 | 《2021年中国企业级 SaaS 行业研究报告》趋势剖析

万事ONES

SaaS 研发管理工具 ONES

“云智一体”系列白皮书智能视频篇来了!

百度大脑

人工智能

汽车域控制器分类(下):自动驾驶域控制器、车身域控制器

SOA开发者

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