查看原文
其他

滴滴开源 ​DoraemonKit:一款像哆啦A梦般全能的App研发工具

滴滴技术 2021-03-01

桔妹导读:DoraemonKit /'dɔ:ra:'emɔn/,简称DoKit,中文名哆啦A梦,意味着能够像哆啦A梦一样提供给他的主人各种各样的工具。是一款功能齐全的客户端( iOS 、Android )研发助手。


—————




开发背景


每一个稍微有点规模的 App,总会自带一些线下的测试功能代码,比如环境切换功能、帧率查看功能等等,这些功能的切换入口往往放在各式各样的入口中,比如一些特殊的手势,双击 statusBar,双击某一个功能区块,或者新建一个 keyWindow 始终至于 App 最上方等等,而且每一个 App 里面的线下附带功能模块很多是相似的,比如帧率查看、内存和 CPU 监控等等,但是现在基本上都是每个 App 都是自己实现了一份。


我们内部以前在代驾司机端积累了一些工具,方便我们开发和测试使用,后来我们组承接了更多的 app 的开发,却发现这个工具却不能移植到别的 app 上来使用,当时的实现方案还是比较与业务紧密耦合在一起的,无法达到通用性。所以我就想,这些工具哪一些可以提取出来作为通用工具,哪一些作为业务工具。把通用性的组件工具作为一个SDK,让每一个 app 都能使用,而且可以提供一种的可扩展的方式支持业务工具也可以加进来。最终形成了 Doraemonkit 这个工具集合。


DoraemonKit 是一个功能集合面板,能够让每一个 App 快速接入一些常用的或者你没有实现的一些辅助开发工具、测试效率工具、视觉辅助工具,而且能够完美在 Doraemon 面板中接入你已经实现的与业务紧密耦合的一些非通有的辅助工具,功能强大,接入方便,便于扩展。


简单总结


1. DoraemonKit 能够快速让你的业务测试代码能够在这里统一管理,统一收口;


2. DoraemonKit 内置很多常用的工具,避免重复实现,一次接入,你将会拥有强大的工具集合。



效果演示



△ DoKit 首页效果演示



内置功能模块


一. 常用工具


1. App 信息查看

快速查看手机信息,App 信息,权限信息的渠道,避免去手机设置查找或者查看项目源代码的麻烦;


2. 沙盒浏览

App 内部文件浏览的功能,支持删除和预览, 并且能通过 AirDrop 或者其他分享方式上传到 PC 中,进行更加细致的操作;


3. MockGPS

App 能定位到全国各地,支持地图地位和手动输入经纬度;


3. H5任意门

开发测试同学可以快速输入 H5 页面地址,查看该页面效果;


4. Crash查看

方便本地打印出出现 Crash 的堆栈;


5. 子线程UI

快速定位哪一些 UI 操作在非主线程中进行渲染,避免不必要的问题;


6. 清除本地数据

一键删除沙盒中所有数据;


7. NSLog

把所有 NSLog 信息打印到 UI 界面,避免没有开发证书无法调式的尴尬;


8. Lumberjack

每一条 CocoaLumberjack 的日志信息,都在在 App 的界面中显示出来,再也不需要导出日志这么麻烦。


二. 性能检测


1. 帧率

App 帧率信息提供波形图查看功能,让帧率监控的趋势更加明显;


2. CPU

App CPU 使用率信息提供波形图查看功能,让 CPU 监控的趋势更加形象;


3. 内存

App 内存使用量信息提供波形图查看功能,让内存监控的趋势更加鲜明;


3. 流量

拦截 App 内部流量信息,提供波形图展示、流量概要展示、流量列表展示、流量筛选、流量详情,对流量信息统一拦截,成为我们 App 中自带的 “Charles”;


4. 卡顿

锁定 App 出现卡顿的时刻,打印出对应的代码调用堆栈;


5. 自定义

可以选择你要监控的选项,包括 FPS、CPU、内存、流量。监控完毕之后,把数据保存到本地,也可以导出来做更加细致的分析;


6. Load 耗时 

Load 函数耗时是 iOS 启动性能优化中重要的一项,该功能可以打印出所有 Load 函数的耗时,给开发者以参考。



三、视觉工具


1. 颜色吸管

方便设计师 UI 捉虫的时候,查看每一个组件的颜色值是否设置正确;


2. 组件检查
可以抓取任意一个 UI 控件,查看它们的详细信息,包括控件名称、控件位置、背景色、字体颜色、字体大小;


3. 对齐标尺

参考 Android 系统自带测试工具,能够实时捕获屏幕坐标,并且可以查看组件是否对齐;


4. 元素边框线

绘制出每一个 UI 组件的边框,对于组件布局有一定的参考意义。



怎样使用


一. iOS端接入指南


1.1. cocoapods依赖


1    pod 'DoraemonKit/Core', '~> 1.1.7', :configurations => ['Debug']
2    pod 'DoraemonKit/WithLogger', '~> 1.1.7', :configurations => ['Debug']
3    pod 'DoraemonKit/WithGPS', '~> 1.1.7', :configurations => ['Debug']
4    pod 'DoraemonKit/WithLoad', '~> 1.1.7', :configurations => ['Debug']


Core subspec作为核心,必须引入。


如果你的日志是基于 CocoaLumberjack,那你也可以引入 WithLogger subspec。


MockGPS 存在一些兼容性问题(绝大部分情况是好的,问题详情请点击此处了解), 如果你的 app 接入 MockGPS 存在问题的话,可以不用引入 WithGPS subspec。


Tip:只在 Debug 环境中进行集成,不要带到线上。有一些 hook 操作会污染线上代码。


1.2. 使用DoraemonKit内置工具集的接入方式


在App启动的时候添加一下代码


1#ifdef DEBUG
2#import <DoraemonKit/DoraemonManager.h>
3#endif
4
5- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
6    #ifdef DEBUG
7        [[DoraemonManager shareInstance] install];
8    #endif
9}


通过以上步骤你就可以使用DorameonKit所有的内置工具集合。如果你想把自己与业务相关的一些工具代码加入到DoraemonKit中做统一管理的话,你可以按照3的步骤来做。


1.3. 添加自定义测试模块到Doraemon面板中(非必要)


详情点击此处了解



二. Android端接入指南


2.1、Gradle依赖


1dependencies {
2    ...
3    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.1.3'
4    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.1.3'
5    ...
6}


2.2、初始化


在App启动的时候进行初始化。


1@Override
2public void onCreate() {
3    ...
4    DoraemonKit.install(application)
5
6    // H5任意门功能需要,非必须
7    DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {
8    @Override
9    public void overrideUrlLoading(Context context, String s) {
10        // 使用自己的H5容器打开这个链接
11    }
12    ...
13} 


其他更多自定义的操作详见: 

点击此处了解


源码地址

Github项目页



项目活动



目前 Doraemonkit 正在举办“提PR,赢大奖”,

欢迎大家参与一起共建DoraemonKit,

有机会得限量版徽章、开源卫衣、电影票、笔记本等。

具体活动地址如下:

点击此处参与活动


END




对 DoraemonKit 开源
有着怎样的评价与期待

欢迎留言与我们分享



滴滴宋世君:DS(数据分析师),究竟是做什么的?

曹春晖:谈一谈 Go 和 Syscall

饶全成:汇编角度看 Slice,一个新的世界


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存