开发背景

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

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

简单总结

1、DoraemonKit 能够快速让你的业务测试代码能够在这里统一管理,统一收口;
2、DoraemonKit 内置很多常用的工具,避免重复实现,一次接入,你将会拥有强大的工具集合。

效果演示

功能模块

一、常用工具

  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 组件的边框,对于组件布局有一定的参考意义。

接入方式

1. Gradle依赖

dependencies {...debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.1.2'releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.1.2'...
}

最新版本参见这里。

2. 初始化

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

@Override
public void onCreate() {...DoraemonKit.install(application)// H5任意门功能需要,非必须DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {@Overridepublic void overrideUrlLoading(Context context, String s) {// 使用自己的H5容器打开这个链接}...
}

3. 流量监控功能(可选)

在项目的build.gradle中添加classpath。

// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {dependencies {...classpath 'com.didichuxing.doraemonkit:compiler:1.0.1'...// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}

在app的build.gradle中添加plugin。

...
apply plugin: 'com.doraemon.compiler.plugin'

4. 自定义功能组件(可选)

自定义组件需要实现IKit接口,该接口对应哆啦A梦功能面板中的组件。

以黑马乘客端为例,实现环境切换组件如下。

public class EnvSwitchKit implements IKit {@Overridepublic int getCategory() {return Category.BIZ;}@Overridepublic int getName() {return R.string.bh_env_switch;}@Overridepublic int getIcon() {return R.drawable.bh_roadbit;}@Overridepublic void onClick(Context context) {DebugService service = ServiceManager.getInstance().getService(context, DebugService.class);PageManager.getInstance().startFragment(service.getContainer(), EnvSwitchFragment.class);}@Overridepublic void onAppInit(Context context) {}
}

在初始化的时候注册自定义组件。

@Override
public void onCreate() {kits.add(new EnvSwitchKit());DoraemonKit.install(application, kits);...
}

5. FAQ

1. 为什么接入后看不到悬浮窗入口?

先看下是否打开了app的悬浮窗权限,另外看看是否错误引用了no-op版本

2. com.didichuxing.doraemonkit:kit和com.didichuxing.doraemonkit:kit-no-op有什么区别?

no-op版本仅提供了DoraemonKit类的空实现,因为DoraemonKit是不推荐集成到线上版本使用的,可通过gradle配置动态切换正常版本和no-op版本。

3. 没有H5任意门入口

H5任意门需要在调用DoraemonKit.setWebDoorCallback实现回调,打开自己App内的Webview,这是因为一般app都有自己的JsBridge逻辑,使用通用的Webview打开Url并没什么意义。如果接入时未设置回调,则在菜单页不会显示H5任意门

4. 流量监控无数据

目前流量监测功能只支持OkHttp3和HttpUrlConnection的自动注入,其他网络库暂不支持。 其他网络库可以使用NetworkPrinterHelper类进行请求数据的手动添加,使用方式参照demo。

5. 性能监控中,CPU、RAM无数据

旧版本的CPU监控是通过读取/proc实现的,在8.0系统上这个方法读取不到数据。新版本已修改了实现方式,可以正常读取。

6. 帧率、CPU、RAM数据不准确

由于读取cpu、内存数据本身需要消耗cpu和内存,加上心跳图的绘制也是耗性能的,所以开启这几项功能后,数据比app实际使用值有一定提升。

7. com.doraemon.compiler.plugin是必须的吗

这个插件目前的用处是在编译阶段在okhttp和httpurlconnection的调用处进行插桩,用以收集网络请求数据从而实现流量监控功能,如果不需要流量监控功能或者使用的是非okhttp和httpurlconnection网络库,则可以不引用这个插件。另外,这个插件会在用户自定义的Application内插入DoraemonKit.install方法,实现sdk的自动注册,引用了这个插件就不需要手动注册sdk了。 因为这个插件会涉及到字节码的修改,同时会插入一些代码到网络请求中,对性能和稳定性有轻微影响,所以极度不推荐线上版本中使用。在线上版本中,务必去除该插件的引用。

8. 沙盒游览功能能否打开数据库、sp文件

目前沙盒功能是以文本形式打开数据库文件和sp文件,sp文件是xml格式,可以正常浏览,但是数据库文件打开会有乱码,后续会提供类似Root Explorer的数据库查看功能。

DoraemonKit一款功能齐全的Android研发助手相关推荐

  1. 一款功能强大的客户端研发助手,适用于 iOS 、Android、微信小程序 !移动端开发必备...

    热文推荐: 尘埃落定!清华才子王垠加入华为职级22,前阿里P10赵海平加入字节跳动,职级或为4+ 百度网盘"破解版",Pandownload开发者被抓 DoraemonKit 简称 ...

  2. DoraemonKit,一款功能齐全的客户端 (iOS、Android) 研发助手,你值得拥有。

    介绍 DoraemonKit(哆啦A梦)是一款提供给开发.测试.设计同学的提高工作效率的研发助手类开源产品.每一项功能都解决了我们在研发测试过程中的一个痛点.使用DoraemonKit,您无需使用电脑 ...

  3. android滴滴开源,DoKit - 滴滴开源的一款功能齐全的客户端( iOS 、Android )研发助手...

    技术编辑:鸣飞 发自北京 SegmentFault 思否报道 | 公众号:SegmentFault SegmentFault 思否消息:滴滴技术团队今天宣布,Dokit 3.0 版本正式发布,Dora ...

  4. 一款功能齐全的网管软件:Ip-tools

    获取安装包:微信公众号(厦门微思网络)后台回复'IPTools' 摘要 /Abstract/ Ip-tools是一款功能齐全的网管软件,可以随时随地的向网管员报告网络的运行情况ip-tools自身集成 ...

  5. 一款功能齐全的开源网盘系统

      大家好,我是小编南风吹,每天推荐一个小工具/源码,装满你的收藏夹,让你轻松节省开发效率,实现不加班不熬夜不掉头发!   今天小编推荐一款基于Spring Boot + VUE CLI@3 框架开发 ...

  6. 小程序影藏溢出的gif_分享几个优质开源项目 | 电商类app,趣享 gif,研发助手DoraemonKit,github小程序...

    本来想一个个分享,这样标题比较好起,不过感觉有点少,那就不定期攒一些分享吧.其中部分来源投稿,有些是我自己无意发现的. 1非常方便的 github 小程序员 经常想在手机上看一些最新的github项目 ...

  7. 功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计

    相关设计资料下载 ESP32 智能手表带心率.指南针设计资料(包含Arduino源码+原理图+Gerber+3D文件).zip 介绍 我们调查了智能手表项目的不同方面,并学会了集成和测试每个单独的部分 ...

  8. Flex实战-制作功能齐全的FLV播放器(1)

    写在前面的话: FLV(Flash Video)流媒体格式是随着Flash MX的推出而发展而来的一种新兴的视频格式.FLV文件体积小巧,清晰的FLV视频1分钟在1MB左右,一部电影在100MB左右, ...

  9. lg android tv画面调试,细看系统设置 功能齐全设置简单_LG 60GB7800-CC_液晶电视评测-中关村在线...

    ■ 细看系统设置 功能齐全设置简单 传统的电视连接在有线电视信号后即可观看,一般情况下则无需再进行设置,像对比度.亮度等参数,一般采用电视的预设值即可.而智能电视则显得不同,需要对有线或者无线网络等内 ...

  10. android生成车票动效,Android项目源码功能齐全的12306火车票订票系统项目

    [实例简介] 本项目是一个基于安卓的12306火车票客户端项目源码,实现了早期的登录注册购票改签等功能.但是因为12306网站改版比换鞋垫还频繁,所以功能早就不能用了,不过项目提供了大部分功能的原来实 ...

最新文章

  1. Linux下安装Java8
  2. kafka channle的应用案例
  3. 叉叉框架_叉/连接框架
  4. 【WebRTC---序篇】(一)为什么要使用WebRTC
  5. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?
  6. python是一种面向过程的编程语言_python协成与面向过程编程
  7. 突发!迈克菲掌门人 John McAfee 在西班牙监狱自缢身亡
  8. plsql为字段添加自增主键
  9. 字符串数组排序的快速排序实现
  10. java 线程 数量_Java线程数量随时间增长的原因
  11. 渗透之——使用Metasploit实现基于SEH的缓冲区溢出攻击
  12. Open Drain vs Push Pull
  13. Eclipse - 取消英文拼写检查
  14. 云有约 | 首攻RSA,天空卫士“秀肌肉”怎么样了?
  15. 【IPC】关于码流类型的理解
  16. 斯坦福大学啥课最火?读了这些书你就知道了!
  17. WebApi编程(一)-DOM
  18. 九月新版【自动赚钱广告机广告阅读收入】新版金多多广告机源代码看广告看新闻赚钱自动钱广告机源代码自动广告阅读收入
  19. 更改分类算法的阙值的资料
  20. 【C语言】定义一个函数,求长方体的体积

热门文章

  1. java中switch、while、do...while、for
  2. 赶个项目,博客稍后更新
  3. STL学习笔记1--vector
  4. Magento的基本架构解析
  5. 使用 background:url(#) 解决 IE67 bug
  6. Rsyslog Queue调优
  7. 在FreeBSD 用户空间与内核空间使用内存共享
  8. 献给自己技术成长的第二年
  9. Qt保存日志调试信息输出文件
  10. C++字符串输入输出操作