写点什么

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

评论

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

盘点 15 个好用的 API 接口管理神器

Java小咖秀

工具 工具分享

Golang 字符串分组

一代咩神

Go 语言

智慧平安社区建设,创建“三零平安社区”

13530558032

区块链农产品质量安全溯源,保证农产品品质

13530558032

模块一-学生管理系统架构设计

华仔架构训练营

模块一:课后作业

iHai

架构实战营

旋转木马案例

赫鲁小夫

4月日更

Prometheus2.25新特性讲解

远鹏

Prometheus cncf openmetrics

Spring IOC 特性有哪些,不会读不懂源码!

小傅哥

Java spring 小傅哥 控制反转IOC

善盾SD币是什么?

飞亚科技

架构实战营作业:模块一

心晴雨亦晴(~o~)

手把手教你写一个spring IOC容器

华为云开发者联盟

spring 容器 ioc spring框架

架构实战营 模块1 课后作业

༺NPE༻

模块一作业

chenmin

架构实战营模块一作业

Geek_vidmje

架构实战营

马特量化交易机器人,炒币24小时不停歇

飞亚科技

空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”

华为云开发者联盟

modelarts yolo 华为云ModelArts 模型开发 华为开发者大会2021

python 调用 cmd 而不显示黑框的方法

一代咩神

Python cmd

初识Nginx(一)

书旅

nginx

区块链电子合同--助推合同数字化管理

13530558032

Rust从0到1-结构体-一个例子

rust struct

Spark数据倾斜方案实战(二)

小舰

4月日更

手摸手教你阅读和调试大型开源项目 ZooKeeper

HelloGitHub

Java zookeeper 源码分析 ZooKeeper原理

架构实战营 模块1作业

唐江

架构实战营

使用 lxrunoffline 管理运行wsl

区块链农产品溯源平台,为农产品质量安全护航

13828808769

区块链 区块链+

花费一月时间吐血整理程序员必读书单,建议收藏

Silently9527

程序员

LeetCode题解:剑指 Offer 49. 丑数,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

区块链产业园区服务平台开发,搭建区块链园区运营平台

13828808769

区块链+ #区块链#

3w 字长文爆肝 Java 基础面试题!太顶了!!!

苹果看辽宁体育

Java 面试 后端

年薪百万是社会认同,更是自身价值体现

博文视点Broadview

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