写点什么

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

评论

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

国内大厂在移动端跨平台的框架接入分析,2021年一起努力应对互联网寒冬吧

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(四),flutter开源项目商业化

android 程序员 移动开发

因为不了解Android事件分发机制,居然被实习生嘲笑了,天呐

android 程序员 移动开发

图巨多,手把手教学Android-Studio超详细安装过程,kotlin菜鸟教程

android 程序员 移动开发

双非本,3年时间从外包到阿里P6(Android岗,移动终端软件开发颜色演示

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三),4面字节跳动拿到Offer

android 程序员 移动开发

图文DEMO并茂讲解RecyclerView滑动时回收和复用触发的时机

android 程序员 移动开发

又来新需求了,急,Android怎么实现时间线效果,成体系化的神级Android进阶笔记

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(一),一线互联网公司面经总结

android 程序员 移动开发

回眸重探锁机制,跨平台移动开发的特点

android 程序员 移动开发

可怕!RxHttp2,安卓开发基础

android 程序员 移动开发

四面阿里,因为最后一个问题与offer失之交臂,android驱动开发

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!,移动应用开发课程设计报告

android 程序员 移动开发

反向面试提问,安卓framework层

android 程序员 移动开发

只需四点,让你的面试百试百过!,android移动应用基础教程

android 程序员 移动开发

听我慢慢道来Android-面试中的细节,三年老Android经验面经

android 程序员 移动开发

只有这些东西?不,学习Android开发只要这些东西,想转行当程序员的必看

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三)(1),面试Android岗

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 05 ] 服务注册(2)

baiyutang

golang 微服务 11月日更

启动速度与执行效率优化项目实战(四),android开发入门与实战网盘

android 程序员 移动开发

四月字节客户端面经,七月内推请找我,一文带你搞懂Android多线程Handler

android 程序员 移动开发

反思一次羞愧的阿里面试经历,致Android开发者

android 程序员 移动开发

另一种绕过-Android-P以上非公开API限制的办法,安卓多线程面试题

android 程序员 移动开发

反思|Android 事件拦截机制的设计与实现,android串口工具apk

android 程序员 移动开发

在线二进制转文本工具

入门小站

工具

可能一眼看不懂的几行Kotlin代码,程序员面试防坑宝典

android 程序员 移动开发

史上最全Android性能优化总结,经典收藏,一口气拿了9家公司的offer

android 程序员 移动开发

哭了!失业半年-2020没有风口我也要跳槽,凭本事吃饭有技术到哪都是人才

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!(1),android音频面试题

android 程序员 移动开发

双非大三,无实习经历,如何以 hard 模式逆袭字节跳动,androidframework开发书籍

android 程序员 移动开发

linux之我常用的系统重要文件备份命令

入门小站

Linux

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