1. 简介

在开发过程中,经常会遇到各种各样的窗口问题,比如动画异常、窗口异常、闪屏、黑屏、错位显示…

以前对于这些问题,我们可以通过添加日志,调试分析代码等手段去解决,但这些 UI 问题往往出现在一瞬间,很难把握出现的时机,录制下来的日志往往也是巨大的,从海量的日志中提取有效的信息是一个枯燥且繁琐的事情。

Android 也意识到了这个问题,WinScope 的出现有效的帮助我们跟踪窗口和显示问题。它向开发者提供一个可视化的工具,让开发者能使用工具跟踪整个界面的变化过程,让我们可以观察到细微的变化。迭代了几个版本后,Android 12 上 WinScope 变得更好用了,下面来看看大概的效果:

2. 工具获取

Android 12 平台的 WinScope 工具可以通过源码编译获得,具体也可以查阅 development/tools/winscope 目录下的 README.md 文档,这里提供一个 Ubuntu 平台的编译步骤:

1. cd development/tools/winscope
2. sudo apt install nodejs npm
3. npm install -g yarn
4. yarn install
5. yarn build

编译过程中遇到一个问题,看上去是在执行 kotlin 优化的时候,报了个内存不足的问题:

Caused by: java.lang.OutOfMemoryError: GC overhead limit exceededat com.google.gwt.dev.js.ScopeContext.referenceFor(ScopeContext.kt:68)at com.google.gwt.dev.js.JsAstMapper.mapAsPropertyNameRef(JsAstMapper.java:247)at com.google.gwt.dev.js.JsAstMapper.mapGetProp(JsAstMapper.java:608)at com.google.gwt.dev.js.JsAstMapper.mapWithoutLocation(JsAstMapper.java:138)at com.google.gwt.dev.js.JsAstMapper.map(JsAstMapper.java:47)at com.google.gwt.dev.js.JsAstMapper.mapExpression(JsAstMapper.java:466)at com.google.gwt.dev.js.JsAstMapper.mapBinaryOperation(JsAstMapper.java:304)at com.google.gwt.dev.js.JsAstMapper.mapAssignmentVariant(JsAstMapper.java:258)at com.google.gwt.dev.js.JsAstMapper.mapWithoutLocation(JsAstMapper.java:102)at com.google.gwt.dev.js.JsAstMapper.map(JsAstMapper.java:47)

可以在执行 yarn build 前通过 export JAVA_OPTS="-XX:-UseGCOverheadLimit" 禁用掉 GC overhead limit exceeded 检测

编译完之后,在当前目录下会一个 dist 目录,再把 adb_proxy/winscope_proxy.py(一个帮我们开启 trace 抓取命令的脚本,这样我们就可以告别繁琐的命令啦),文件也拷贝进 dist 目录方便我们后面使用

3. 使用

使用比较简单了,连接手机后:

  • 双击打开 dist 目录下的 index.html 文件
  • 在终端执行 python3 winscope_proxy.py

PS: 这里建议大家可以设置个 alias 一键使用,比如:

alias winscope_s="xdg-open ~/tools/winscope_s/index.html && python3 ~/tools/winscope_s/winscope_proxy.py"

输入 python 命令后,终端可能会生成一个 token ,把它复制到浏览器即可

接下来就会出现下面这个界面:

在选择 START TRACE 之后,就可以在手机端进行录制操作,操作完后结束录制即可

4. 功能改进

相比与 Android 11,新的 WinScope 工具在界面上更友好了,重要的改进如下:

  • 时间线控制更加方便了,可以选择不同类型的时间线用于控制,否则像以前录制了 ProtoLog 后,通过箭头控制时间推移简直是太难用了
  • 新的 TransactionLog 浏览界面
  • 支持 Diff 功能,不得不说每一帧的参数太多了,如果没有 diff 功能,实在很难一眼看出那些参数发生了变化
  • 新增了 IME 的录制,可以录制 InputMethodServiceInputMethodManagerServiceClient 的事件
  • 录屏界面可以以 PIP 形式显示在浏览器界面上

不得不说确实比以前好用一些,赶紧尝尝鲜吧~

Android 12 - 跟踪利器 WinScope相关推荐

  1. 韩国成功研发变色龙软体机器人;曝新iPhone将推出摄影版“人像模式”;Android 12 Beta 4发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 孙胜 出品 | CSDN(ID:CSDNnews) ...

  2. Android跟踪进度条,android快递跟踪进度条

    android 快递跟踪进度条 activity.class import java.util.ArrayList; import java.util.HashMap; import java.uti ...

  3. 谷歌 Android 12 Go 正式发布!

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 技术编辑:61丨发自 思否编辑部 公众号:SegmentFault 12 月 15 日,谷歌发布了适用于小型或廉价智 ...

  4. Android 12 首个开发者预览版到来

    作者 / Dave Burke,工程副总裁 从手机和笔记本电脑,再到平板电脑.电视甚至汽车,Android 应用每天都在各种设备上支持着数十亿人的工作.娱乐.交流和创造.当越来越多的人开始依赖您所构建 ...

  5. 关于Android 12 适配,看这篇就够了

    一:功能和 API 概览 Android 12 面向开发者引入了一些出色的新功能和 API.以下几部分内容可帮助您了解适用于您的应用的功能并开始使用相关 API. 有关新增.修改和移除的 API 的详 ...

  6. Android 12 变更与新特性

    Date:2021.7 文章目录 Android 12新特性总结 一.设置 二.通知 1. 媒体控制界面 2. 媒体控制 3. 休眠功能 4. 通知界面更新 5. trampoline 三.消息框To ...

  7. Android 12的行为变更和版本兼容思路

    一年一度的产品线兼容活动又开始了.Android系统每更新一次系统,对开发者而言都是持续而漫长的挑战. 自15年6.0的兼容以来,每年给公司产品线app做版本兼容,成了我每年的保留节目-- 结束完产品 ...

  8. Android 12开发者预览版现已发布,包含众多亮点,Android码农是如何进入腾讯的

    Android 12 将支持空间音频与MPEG-H,并为高达24个音频通道进行了优化(之前仅有8个).它还将使开发者更容易将「隆隆声」效果与音频联系起来. 谷歌似乎正在将注意力放在AV1图像文件格式( ...

  9. Android 12 adb 串口指令设置耳机音量适配

    1.突然接到测试部一个需求 耳机录音在Android 12 直接运行崩溃,后面抓取日志一看是执行shell指令出现问题,看着日志我也没有特别清晰的思路 2.跳坑 于是我拿了之前另外一台Android ...

最新文章

  1. 微信公众平台对所有公众号开放自定义菜单
  2. java 8大happen-before原则超全面详解
  3. Python字典dict的增删查改及常用操作
  4. 保25ms争10ms——Zenlayer如何保持出海业务的超低延时
  5. 如何解决eclipse里面tomcat 8080端口被占用
  6. redis学习基本命令
  7. 中公事业单位计算机模拟试题,事业单位考试计算机基础知识模拟试题汇总—单选题(2)...
  8. PAT(Basic Level)--个位数统计
  9. php 网站克隆,如何快速克隆一个网站
  10. 程序员是否要考PMP认证?看这篇就够了
  11. SPSS——方差分析
  12. while循环结构的用法
  13. 十三种Java开发工具
  14. mysql bak文件怎么打开_如何打开数据库备份文件(.bak)
  15. mysql怎么给root设密码_mysql给root设置密码
  16. 第一章 C语言与内存
  17. CATIA V5 R19 WIN7 64位系统的安装方法
  18. android怎么调textview间距,Android如何设置TextView的行间距、行高。
  19. 如何在AutoCAD中实现鼠标双击事件
  20. 团队管理之—— 技术债务:如何带领团队从困境中突围而出?

热门文章

  1. Linux下无法正常安装和删除Nodejs的解决方法
  2. 打篮球,听摇滚,敲键盘也能是人生赢家。程序员访谈(三)
  3. 为好看的皮囊注入有趣的灵魂,然后呢?
  4. 字符编码ASCII、ANSI、DBCS、MBCS、GB2312、GBK、GB18030、UTF-8、UTF-16、Unicode、emoji
  5. python使用函数求特殊a串数列和_习题6-2 使用函数求特殊a串数列和
  6. COBOL非常见知识点一
  7. 【AD19】生成Gerber文件和钻孔文件
  8. 浅谈Spherical Message Passing for 3D Graph Networks
  9. System.getProperty参数详解
  10. iOS逆向之深入解析函数本质·函数调用栈与相关指令