滴滴开发调试工具(/didi/DoraemonKit)是滴滴开源的一款功能齐全的客户端( iOS 、Android )研发助手
是什么
用图说话,这个调试工具其实就是一个超级工具箱,适合研发、测试、视觉等团队使用的一个内测工具集,它不适合在线上环境使用,或者需要经过改造和精简后才能在线上使用。
我们目前在安卓的debug版本(主要针对研发)和Jenkins上的feature和release上的版本启用了这个工具(适合非研发),而发布版本不启用(也不包含这部分代码)。Jenkins上是通过一个构建参数来控制的,研发也可以在gradle.properties修改同名参数在非debug启用调试工具。
我们看到的APP需要悬浮框权限是这个调试工具使用的,正式的APP是不需要悬浮框权限的。
能做什么
常用工具
APP信息:简单的查看系统信息,包括系统版本、硬件环境、APP权限等,方便研发复现环境;沙盒浏览:简单的文件管理,研发可快速查看APP的缓存文件;MockGPS:在室内开发环境没有GPS信号的情况模拟定位进行初期调试,避免到室外晒太阳;H5任意门:需要研发扩展支持,输入url打开web页,用于调试h5页面,可实现类似我们的H5集成Demo APP的效果;Crash查看:记录上一次闪退日志,和我们RN有点不一样,是原生的闪退;清除本地数据:清除所有缓存,避免缓存影响,类似重装APP;日志查看:简单的Logcat日志查看,可以简单的日志级别和关键字过滤,适合在没有开发环境下看log;
性能检测
帧率、CPU、内存:数据都不是很准确,仅供参考,研发的开发环境这些数据更准确。帧率会比实际的低一些,因为这个调试工具本身也有性能开销。流量监控:内置的抓包工具,需要研发添加上支持,提供波形图展示、流量概要展示、流量列表展示、流量筛选、流量详情,对流量信息统一拦截;卡顿检测:锁定App出现卡顿的时刻,打印出对应的代码调用堆栈,主要是主线程卡顿,而RN是在独立线程中,这种卡顿这个工具检测不出来;耗时:主要是指原生Activity的跳转耗时,我们目前是单页面应用,不存在原生页面跳转;而首次启动耗时,因为启动的时候这个工具还没初始化;而我们RN APP耗时主要不在于Activity的启动,而在于RN环境的初始化,所以这个工具对我们目前APP没什么用。RN耗时我们已经通过log打印出来,作为参考,可以在日志查看里面筛选出来。
视觉工具
主要是给视觉验收用的。
取色器:类似于PC的截图工具可以查看像素颜色,研发有没有按视觉给的颜色开发,看一眼就知道。原理是截图并提取像素颜色。对齐工具:测量元素对齐的,图标按钮有没有对齐,标题栏高度有没有偏差,差了一丢丢都能测出来。控件检查:简版的DDMS和Appium里面的导出布局工具,这里通过手指滑动就能查看对应组件的宽高等信息。但因为我们是RN APP,这里提取不到View的id和背景颜色。布局边框:把View的轮廓高亮显示,查看View的边框线。但是它的实现不兼容RN APP,主要是画边框线的方式,会导致闪退,所以对我们目前的APP没用。
还能做什么
哆啦A梦的工具都是可以定制或者自定义扩展的。
比如上面的日志查看功能不好用,日志刷刷刷盖过去了,日志无效信息太长了,日志要点进去才能看等等,那么,理论上也可以改造成直接悬浮框显示的,可以更高级的过滤,可以暂停日志之类的。
除了以上通用的内置组件,我们也可以根据业务需要和实际场景设计一下自定义工具,比如下面这个滴滴APP使用的业务扩展,像环境切换之类的。
回到我们的APP,我们可以做什么?
比如性能埋点开关,打开后能开启性能埋点,本地收集打开模版的耗时信息,方便定位客户问题,又不影响正式的生产环境;比如插件调试管理,调试阶段本地可以安装和卸载APP插件,而不用到Jenkins打包插件再去服务器安装;比如原生化内测阶段,可以通过开关测试纯原生和纯RN的目录页。