工欲善其事,必先利其器。 --《论语·魏灵公》前端
DoraemonKit,简称 DoKit,中文名哆啦 A 梦,是滴滴开源的一款功能齐全的客户端( iOS 、Android )研发助手。今天,Dokit 3.0 版本正式发布,开发者朋友能够选择更新、试用,本文是 DoKit 团队对本次更新的技术解读。android
首先我要表明团队对于你们一直以来对DoKit的支持表示感谢,DoKit的今天离不开你们共同的努力和贡献。因此为了更好的回馈社区,咱们近期一直在努力的升级内部架构,同时咱们还结合实际业务场景新增了两个重磅的功能:接口mock 和 健康体检,配合平台端dokit.cn一块儿使用,让DoKit的能力获得延伸。当前,dokit 3.0.0版本已经发布,在这里很是欢迎你们的升级使用。同时也很但愿你们能将使用过程当中遇到的各类问题经过各类渠道(github issues、QQ群等等)反馈给咱们,让咱们你们一块儿努力把DoKit的生态创建的更加完善。git
在这以前你们想起DoKit第一印象是什么?好像只是一个端上的工具,包括Android、iOS、小程序。功能丰富、好用,确实也大大得提升了你们的研发效率,同时也得到了社区包括咱们滴滴内部业务的一致好评。可是咱们团队在讨论DoKit的定位以及将来规划的时候在想:那在咱们本身的心目中DoKit应该是什么样的? 简单的工具集合确定不是咱们想要的,咱们但愿将DoKit打形成一个平台,一个可以知足泛前端开发、测试、设计等等需求的功能丰富的通用型平台。这样当之后你们再想起或者向别人介绍DoKit的时候会说,DoKit是一个通用的研发平台,而不只仅只是一个工具。为此咱们推出了DoKit3.0,这也是咱们实现目标的第一步。github
1)DoKit 3.0相比于上一个版本一共解决了github上的issues 70多个,合并PR 30多个。数据库
2)内部架构升级,其中性能和代码的健壮性都获得了显著的提高小程序
3)工具优化用户体验优化后端
Android浏览器
Android端主要优化了网络拦截、悬浮窗、位置模拟、Aop解决方案等等bash
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)全局支持中英文切换
如下新增的大部分Kit在Android和iOS两端是对齐的,有些平台特有的功能我会进行标注
提供一套基于App网络拦截的接口Mock方案,无需修改代码便可完成对于接口数据的Mock。
一键式操做,整合DoKit多项工具,数据可视化,快速准肯定位问题,让你对app的性能了如指掌。
主要能帮咱们将db等本地数据在浏览器中进行操做,十分方便。 DBView和本地沙盒的主要区别在于本地数据库在端上的体验效果并非很好,由于受限于屏幕的大小,因此咱们引入这DBView,能够将咱们的本地数据库和浏览器打通,在浏览器上进行增删改查等等操做,提高咱们的效率。
android直接接入的Android-Debug-Database方案;
iOS是由社区同窗y500提供的iOSDebugDatabase, 感谢该同窗的贡献。
Android:函数耗时主要经过ASM代码插装的方式,会在指定的包名下进行代码插装,统计每一个函数的耗时,默认状况下会在控制台中将执行时间大于200微妙的函数调用栈打印出来。后续咱们计划将函数耗时和平台端打通,记录下每个函数耗时操做。
iOS:iOS采用的额是Hook objc_msgSend, 会以树形结构打印出某一段操做中具体的函数耗时,比Xcode的TimeProfiler更加直观。
Android端效果图
快速跳转到应用设置 : 避免手动去设置里面寻找App的麻烦;
NSUserDefalult(iOS) : 对于NSUserDefalult的数据方便进行增删改查;
UI层级检查 : 检查每个UI界面的层级,层级太深的话,会影响必定的性能;
启动耗时 : 检查每一次启动消耗的时间;
UI结构(IOS) :能够动态改变每个UI元素的属性,感谢社区HDB-Li提供;
用户能够自行更新体验。
为了让Dokit的端上能力得延伸和扩展,同时也是为了更好的服务好咱们的每个业务方,让DoKit成为一个可以知足泛前端开发、测试、设计等等各方都须要的功能丰富的通用型平台。咱们组内通过讨论决定推出dokit.cn。 平台端主要包含如下几项内容:
1)用户登陆
2)使用中心
4)控制台: 主要提供产品管理、用户管理、数据Mock、健康体检等功能。必须登陆之后才能访问,你能够建立的每个产品。而后须要将你的ProductId集成到Android和iOS中去。详细介绍
第一步: 前往dokit.cn平台进行帐号注册并登陆,而后在控制台中进行产品建立,并将产品Id集成到安卓和iOS中。具体参考上文安卓和iOS集成。
第二步: 在平台端的数据Mock模块中进行相应的接口Mock建立。
第三步: 每次进入SDK的数据Mock页面,会加载在DoKit平台添加的Mock接口列表并和本地数据进行合并。
第四步: 打开拦截接口开关并选中相应的场景或者打开接口模板开关(拦截模块和模板模块相互独立),等待真实的网络请求命中咱们的拦截规则。
拦截规则: 假如命中拦截规则咱们会将http重定向到咱们的DoKit后台并返回Mock数据。
模板规则: 假如命中模板规则,咱们会将真实的接口数据保存,用户能够进入模板页面,找到指定的模板项并将模板数据上传到咱们的DoKit后台并用于建立场景。
接口拦截效果图
接口模板效果图
想象如下如下几种情形:
一: 之前咱们要在移动端要进行接口Mock的常规操做,基本上都是先拿到一个定义好的mock接口而后在代码中修改url,而后等待编译、完成之后运行一下好像没什么问题而后又改回去编译。重复这样的操做。
二: 通常来讲咱们泛前端都是须要依赖后端的接口进行开发的,这个操做没法同时进行,因此当多条业务需求同时开发的时候就容易因为资源不足和安排不当形成进度阻塞。
三: 关于测试用例。通常来讲咱们在需求评审完成之后咱们的测试人员就开始编写测试用例了,可是这样的用例每每都是文档化的,咱们研发要进行用例测试边界状况的时候每每是经过修改代码来完成的。测试用例大部分用例也是依赖接口的。
固然不止以上几种状况,咱们都知道接口联调和测试在咱们研发中占的比重是很大的,同时也是须要咱们反复的修改代码来进行测试和适配,这每每消耗着咱们绝大部分的精力。
那咱们dokit的操做是怎么解决这个问题的呢?
咱们dokit区别于其余接口Mock方案,由于咱们具备端上的优点,咱们依赖端上的本地抓包功能,经过拦截全部的网络请求,根据path和query字段(跟域名无关)去匹配咱们在平台端建立的mock接口。而后上传真实接口模板并支持各类场景切换。由于同一个接口每每具备不一样的场景,好比验证码验证成功或者失败等等。 测试也能够在咱们平台端提早编写好测试用例接口以及各类边界状况。开发在研发阶段就能参与到测试用例的验证。也能够预想整理好整个链路的mock接口,让咱们在测试过程当中按照本身制定各类case往下走。
因此咱们DoKit解决方案的最大优点就是:无需进行任何业务代码的修改的状况下去完成绝大部分的接口Mock需求。
健康体检部分主要咱们整合了DoKit端上的的各项工具,好比网络、cpu、fps、内存等9个性能指标。于此同时为了让整个流程更加的符合测试人员的操做习惯,咱们化繁为简,将整个流程分为如下三步:
1)启动
2)正常的操做页面而后在每一个页面根据倒计时提醒停留10s左右,完成每一个页面的性能数据采集工做。
3)点击上传,填写用例的名称和测试人员名称,等待数据上传完成。
咱们的每一次性能测试结果都将在咱们的后台中进行记录。咱们平台端记录的数据十分全面,基本上涵盖了咱们的大部分需求,而且咱们在后端会针对性能数据进行精准的分析并给出分析结果。还有就是咱们针对性能数据进行了图表化的展现,使得每一次的性能测试更加直观。这样咱们在整理的时候也不须要本身再根据数据去导出各类报表了,直接截图就能够用了。在这一块仍是比较贴心的。
如下为健康体检的数据展示示例:
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']//可选
复制代码
#ifdef DEBUG
#import <DoraemonKit/DoraemonManager.h>
#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef DEBUG
[[DoraemonManager shareInstance] installWithPid:@"productId"];//productId为在"平台端操做指南"中申请的产品id
#endif
}
复制代码
# 添加仓库
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'
复制代码
debugImplementation "com.didichuxing.doraemonkit:doraemonkit:3.0.0"
releaseImplementation "com.didichuxing.doraemonkit:doraemonkit-no-op:3.0.0"
复制代码
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");
}
}
复制代码
其余更多细节的介绍和用户指南,请移至www.dokit.cn/的使用中心
为了DoKit可以更好的服务开发者,同时也是为了完善社区生态让你们第一时间了解DoKit平台的最新信息,咱们推出了DoKit开源社区官方公众号:
DoKit开源社区公众号将会第一时间发布有关DoKit的最新消息,包括一些隐藏福利和重磅功能提早体验。
DoKit社区活动:提PR、赢记念T恤(2020)
各位社区的朋友您们好:
为了鼓励更多的开发者参与到Dokit开源项目的共建中来,咱们准备发起一个长期有效的激励活动,只要给咱们提交PR,并被咱们采纳的话,就有机会得到相应的奖品。
活动规则:每个月为一次获奖周期,咱们会统一评审本月全部被咱们采纳的PR,挑选出前3名的贡献者,便可得到咱们提供的奖品;
活动时间:2020-04-01 ~ 2020-12-31;
活动奖品:每月前5的贡献者将会得到DoKit记念T恤一件,而且能够加入到咱们首页的外部贡献者名单中
提交的PR能够包含:
(1)如今一些未解决的issues的处理
(2)对于现有功能的一些优化
(3)提供单独的工具集成到DoKit中
(4)其余有利于DoKit发展的任何事项
获奖名单每月都在这个issues和咱们“DoKit开源社区”的公众号里面同步,获奖同窗联系QQ用户群 @didi_iOS_易翔 或者 @didi_Android_金台 领奖。
活动详情参考
最后仍是要感谢一下社区一直以来的支持,是大家的积极响应和反馈让DoKit变得更好,DoKit所取得的全部成绩都来至于你们共同的努力。将来,DoKit还有很长的路要走,我但愿接下来走的每一步都有你的陪伴。
附上github地址:
github.com/didi/Doraem… 留下你的小星星。