写点什么

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

2019 年 9 月 17 日

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

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 首页效果演示



DoKit 首页效果演示


内置功能模块

一. 常用工具

1. App 信息查看

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


2. 沙盒浏览

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


3. MockGPS

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


4. H5 任意门

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


5. Crash 查看

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


6. 子线程 UI

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


7. 清除本地数据

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


8. NSLog

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


9. Lumberjack

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


二. 性能检测

1. 帧率

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


2. CPU

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


3. 内存

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


4. 流量

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


5. 卡顿

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


6. 自定义

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


7. 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 DEBUG2#import <DoraemonKit/DoraemonManager.h>3#endif45- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {6    #ifdef DEBUG7        [[DoraemonManager shareInstance] install];8    #endif9}
复制代码


通过以上步骤你就可以使用 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} 
复制代码


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/mav_5vbmR8rsqiBn5bVGEQ


2019 年 9 月 17 日 14:421827
用户头像

发布了 34 篇内容, 共 57821 次阅读, 收获喜欢 64 次。

关注

评论

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

程序员的晚餐 | 6 月 5 日 爆炒鱿鱼

清远

美食

架构师训练营-命题作业1

水边

极客大学架构师训练营

架构师训练营-每周学习总结1

水边

极客大学架构师训练营

架构师训练营第一周作业

芒夏

极客大学架构师训练营

【架构师训练营-作业-1】食堂就餐卡系统设计

小动物

系统设计 极客大学架构师训练营 作业

因为 MongoDB 没入门,我丢了一份实习工作

沉默王二

mongodb

Flink源码分析之-如何保存 offset

shengjk1

Element-UI实战系列:Tree组件的几种使用场景

brave heart

vue.js 前端 Elemen

架构师训练营第一周学习总结

王鑫龙

极客大学架构师训练营

架构师如何做架构总结

Karl

架构师训练营第一周作业

小树林

食堂就餐卡系统设计

饶军

【ARTS打卡】Week02

Rex

人人都是产品经理

二鱼先生

产品经理 个人品牌 职场成长 产品思维

极客时间-架构师培训-1期作业

Damon

每周学习总结-架构师培训一期

Damon

Java 25周年:波澜壮阔的25年

北风

「Java 25周年」

Flink源码分析之Flink 自定义source、sink 是如何起作用的

shengjk1

flink flink源码 flink源码分析 flink自定义source flink自定义sink

dnsmasq-域名访问及解析缓存

一周思进

ARTS-WEEK2

一周思进

ARTS 打卡计划

利其器

宋胖子

IDEA

食堂就餐卡系统架构设计

Karl

ARTS打卡 week 2

猫吃小怪兽

ARTS 打卡计划

SpringBatch系列之并发并行能力

稻草鸟人

Spring Boot SpringBatch 批量

程序员的晚餐 | 6 月 4 日 最好吃的土豆

清远

不可不知的 7 个 JDK 命令

武培轩

Java 程序员 jdk 后端 JVM

Flink源码分析之Flink是如何kafka读取数据的

shengjk1

flink flink 消费 kafka flink源码分析 flink消费kafka源码解析

Flink源码分析之FlinkConsumer是如何保证一个partition对应一个thread的

shengjk1

flink flink 消费 kafka 实时计算 flink源码分析

UML练习1 食堂就餐卡系统设计「架构师训练营」

Young

Flink源码分析之Flink startupMode是如何起作用的

shengjk1

flink flink 消费 kafak 实时计算 flink源码 flink源码分析

食堂就餐卡管理系统

孙志平

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

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