开源组件DoraemonKit之Android版本技术实现(一)

本文介绍了滴滴开源组件DoraemonKit在Android平台的技术实现,包括取色器的方案对比、权限请求、ImageReader创建及像素点获取,控件检查的Activity监听和ViewTree遍历,以及对齐标尺和布局边界的实现细节。DoraemonKit旨在提供研发辅助工具,支持多种调试功能。
摘要由CSDN通过智能技术生成

一、引言

​ DoraemonKit是滴滴开源的研发助手组件,目前支持iOS和Android两个平台。通过接入DoraemonKit组件,可以方便支持如下所示的多种调试工具:

​ 本文是DoraemonKit之Android版本技术实现系列文章的第一篇,主要介绍各个视觉工具的技术实现细节。

二、技术实现

2.1 取色器

方案对比

​ 取色器工具可以通过颜色吸管获取屏幕任意位置的像素值,所以实现的关键就是如何获取像素点。获取像素点的第一步是获取屏幕截图,获取屏幕截图在Android平台主要有以下几种方式:

  • 通过View的getDrawingCache方法
  • 通过读取系统FrameBuffer
  • 通过MediaProjectionManager类

​ 对比三种实现方式,方式一只能获取当前Window内DocorView的内容,不能获取状态栏或者脱离应用本身,且开启DrawingCache会增加应用内存占用;方式二中FrameBuffer不能直接读取,需要获得系统Root权限,且兼容性差;方式三可脱离应用本身获取应用外截屏,截图取自系统Binder不占用应用内存,只需请求录屏权限。

getDrawingCache函数 读取系统FrameBuffer MediaProjectionManager类
实现复杂度 简单 复杂 较简单
需要权限 Root权限 录屏权限
适用性 只能截取应用内 应用内外都支持 应用内外都支持
性能影响

​ 通过对比,DoraemonKit选择方式三作为取色器的实现方案。

请求录屏权限
private boolean requestCaptureScreen() {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
        return false;
    }
    MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getContext().getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    if (mediaProjectionManager == null) {
        return false;
    }
    startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), RequestCode.CAPTURE_SCREEN);
    return true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RequestCode.CAPTURE_SCREEN && resultCode == Activity.RESULT_OK) {
        showColorPicker(data);
        ...
    } else {
        ...
    }
}
复制代码

​ 通过createScreenCaptureIntent()方法可以获取请求系统录屏权限的Intent,然后调用startActivityForResult,系统会自动弹出权限授予弹窗。如果授予权限则在onActivityResult中得到系统回调成功,且返回录屏的resultData。

创建ImageReader
public void init(Context context, Bundle bundle) {
    mMediaProjectionManager = (MediaProjectionManager) context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    if (mMediaProjectionManager != null) {
        Intent intent = new Intent();
        intent.putExtras(bundle);
        mMediaProjection = mMediaProjectionManager.g
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近代码和Demo请到https://github.com/didi/DoraemonKit 下载。如果感觉还可以,给颗star吧。 一款适用于iOS App的线下测试工具集合。 【App信息查看】快速查看手机信息,App信息,权限信息的渠道,避免去手机设置查找或者查看项目源代码的麻烦。 【沙盒浏览】App内部文件浏览的功能,并且能通过airDrop或者其他分享方式上传到PC中,进行更加细致的操作。 【MockGPS】App能定位到全国各地,支持地图地位和手动输入经纬度。 【H5任意门】开发测试同学可以快速输入H5页面地址,查看该页面效果。 【日志显示】每一条日志信息,都在在App的界面中显示出来,再也不需要导出日志这么麻烦。 【帧率监控】App 帧率信息提供波形图查看功能,让帧率监控的趋势更加明显。 【CPU监控】App CPU使用率信息提供波形图查看功能,让CPU监控的趋势更加形象。 【内存监控】App 内存使用量信息提供波形图查看功能,让内存监控的趋势更加鲜明。 【流量监控】拦截App内部流量信息,提供波形图展示、流量概要展示、流量列表展示、流量筛选、流量详情,对流量信息统一拦截,成为我们app中自带的“Charles”。 【自定义监控】可以选择你要监控的选项,包括FPS、CPU、内存、流量。监控完毕之后,把数据保存到本地,也可以导出来做更加细致的分析。 【颜色吸管】方便设计师UI捉虫的时候,查看每一个组件的颜色值是否设置正确。 【组件检查】可以抓取任意一个UI控件,查看它们的详细信息,包括控件名称、控件位置、背景色、字体颜色、字体大小。 【对齐标尺】参考Android系统自带测试工具,能够实时捕获屏幕坐标,并且可以查看组件是否对齐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值