拓冰建站拓冰建站
首页 / 资讯中心 / 正文

告别QtScrcpy?用TabQA在Chrome侧边栏实现免安装投屏与测试闭环

做客户端测试和真机调试的兄弟们应该没人不知道 QtScrcpy。它确实是目前最顺手的安卓投屏工具之一日常截屏、录屏、鼠标键盘操控手机都很稳。但用了两年多之后我发现自己越来越烦一件事不管换了哪台电脑都得重新下载安装包、配 ADB 环境给团队里新同事讲投屏方案的时候光是先装 QtScrcpy再装 ADB 驱动不对你是 Mac要先用 brew 装 platform-tools这套话就要重复 N 遍。直到最近我把投屏链路整个迁到了 Chrome 侧边栏用了一个叫 TabQA 的方案才算把这块硬骨头啃下来。今天就把这个东西的原理、实操和踩过的坑一次性聊清楚尤其适合测试同学、做真机联调的开发以及经常要给远程同事演示手机问题的人。1. 为什么放着好好的 QtScrcpy 不用偏要折腾个新方案1.1 用了两年 QtScrcpy我到底在烦什么QtScrcpy 说实话是一款完成度很高的开源工具基于 Scrcpy 二次开发把 ADB 链路封装成了图形界面支持 Windows、macOS、Linux。但这恰恰是我的第一个痛点办公电脑是受管环境日常装个软件都要提审批更别说在 Windows 上折腾 ADB 驱动。Windows 下面最常见的坑就是驱动不对手机插上去能充电但 adb devices 里空空如也要么是 USB 驱动没装好要么是手机厂商的私有驱动和通用 ADB 驱动打架。你去看网上搜qtscrcpy 投屏黑屏的人有多少就知道环境问题比工具本身的功能问题还普遍。第二个痛点是版本分发和团队协作。团队里七八个人有人用 2.17有人用老版本还有人在 Mac 上不知道还要装 Xcode Command Line Tools 才能跑 adb。每次我更新了新版本 QtScrcpy就意味着要挨个找同事让他们重新下载。可能有人觉得这不算事但真到项目赶进度、来新人的时候这些细碎的东西特别耗精力。当然QtScrcpy 本身的性能是没得挑的。投屏延迟低、支持多开、快捷键齐全。所以这篇不是要否定它而是想聊一个事实在投屏功能本身之外它确实没有解决团队协作和流程集成的问题。投屏只是手段测试和调试的效率提升才是目的。1.2 测试链路里最耗时间的其实不是看屏幕做过真机测试的人都有这种感受投屏只是第一步真正花时间的是后面那一堆收尾动作。我在真机上手测一个 App遇到疑似 Bug常规操作是这样先在投屏工具里截个图或者顺便录个屏把 adb logcat 拉出来找到崩溃日志记下手机型号、Android 版本、App 版本打开项目管理平台新建一个 Bug 单把这些材料一个个传上去。这一套流程做完快的话五六分钟遇到日志不好抓的情况十分钟打底。而且中间要在投屏工具、命令行窗口、浏览器项目管理页面之间来回切换特别容易乱。有一次我录完屏忘了保存目录直接甩了个截图上去结果开发说定位不了只能重新跑一遍复现流程。所以你会发现真正常态化的需求不是我要看手机屏幕而是我看完屏幕之后要快速把证据和现场信息打包成一张可追踪的工单。这一步QtScrcpy 帮不了忙。它本质上是一个终端工具不是一个流程工具。1.3 TabQA 想解决的是投屏之后的事TabQA 就是从这个角度切入的。它的名字很直白Tab QA把质量保障的工作直接塞进浏览器 Tab 的能力范围里。我第一次用的时候感觉是这玩意儿不像一个投屏器更像一个带有投屏能力的小型测试工作台。从我使用的版本看TabQA 的核心能力有三块。第一是免安装客户端它本身是一个 Chrome 扩展装在浏览器里就算部署完成不需要单独下载 exe 或 dmg也不需要单独配 ADB 环境第二是侧边栏交互通过 Chrome 的 Side Panel 机制在浏览器右侧或左侧常驻一个操作面板投屏界面就嵌在里面主窗口该写文档写文档该看代码看代码互不遮挡第三是投屏加提单闭环投屏、截图、录屏、抓日志、填 Bug 单这几件事在同一个面板里完成不用再切换工具。对测试团队、经常做真机联调的开发、以及要给远程同事演示手机问题的场景来说这个定位确实更贴合实际工作流。它解决的已经不单是怎么把手机画面投到电脑上而是投出来之后怎么顺手把活干完。2. 免安装客户端是怎么做到的浏览器连 Android 的底层逻辑2.1 没有客户端Chrome 用什么和手机通信很多人第一反应是不装客户端浏览器凭什么能连上 Android 手机其实底层链路本质上还是 ADB只是 ADB 这层通信不再依赖一个独立安装的桌面程序而是被浏览器直接接管了。具体到实现上主流方案有这么几种TabQA 这类扩展一般会视场景组合使用。第一种是 WebUSB。谷歌在 Chrome 里开放了 WebUSB API网页在用户授权后可以直接枚举并同 USB 设备通信。Android 手机开启开发者选项里的 USB 调试后会在 USB 上暴露一个 ADB 接口浏览器可以基于这个接口跑一套精简版 ADB 协议。好处是真的不用装任何驱动坏处是 WebUSB 只走 USB 线无线调试场景用不上。第二种是本地桥接。浏览器扩展通过 Chrome 的 Native Messaging 机制唤醒一个极小的本地服务进程由它来维护 adb 连接再通过 WebSocket 把画面和指令转发到页面里。这种做法的兼容性最好只不过严格来说还留了一个轻量级进程不能算 100% 免安装但对使用者来说已经感觉不到装客户端这一步了。第三种是 ADB over TCP也就是 Android 11 以上系统自带的无线调试。配好之后浏览器通过 WebSocket 代理把命令转发到设备的 5555 端口。从我这边实际使用 TabQA 的感受来看它优先走的是 USB 直连检测不到设备的时候会提示检查 USB 调试和数据线。这套交互和 QtScrcpy 的习惯基本一致所以上手成本很低。2.2 侧边栏投屏界面的实现思路Chrome 从 114 版本开始正式支持 Side Panel API开发者可以在浏览器边缘加一个常驻面板。这个 API 的关键点有三个一是可以通过扩展图标点击触发开合二是可以让面板在特定网站或所有网站都显示三是面板和主窗口共享同一个浏览器进程和数据存储所以登录态、插件数据都是通的。放到 TabQA 这个场景里侧边栏的好处显而易见你不用再开一个独立窗口去放手机画面主窗口里是产品文档、需求单或者开发工具侧边栏里是实时的手机屏幕。要复现 Bug 的时候左手操作手机画面里的按钮右手在主窗口点开 Console 看前端报错两边都不用切来切去。实现上也不复杂扩展里配置好 sidePanel 的默认路径然后通过 chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true }) 把点击扩展图标和打开侧边栏绑定起来。TabQA 把设备状态、投屏画布、功能按钮都塞进这个面板整个界面看起来更像一个小型控制台而不是单纯的投屏窗口。2.3 画面传输、触摸注入与录屏截图的原理免安装只是表面真正难的是在浏览器里把手机画面实时渲染出来还要保证延迟可接受。这里通常会根据 Android 版本选两条路。第一条路是 screencap 轮询。通过 adb exec-out screencap -p 不断抓取 PNG 截图然后传到浏览器显示。好处是兼容性极好Android 4.0 以上都能用坏处是帧率上不去一般只能跑到 5 到 10 帧做个简单点击还可以操作稍快一点就有拖影。第二条路是 screenrecord 推流。Android 5.0 以上都可以用 screenrecord 录制屏幕但它输出的是编码后的文件不是实时流。实用做法是通过 adb shell screenrecord --output-formath264 --size 720x1280 --bit-rate 4M /sdcard/screen.mp4 这类命令启动录制再配合 adb 把文件以流式方式传给前端前端用 WebCodecs 或者视频播放器解码。这样延迟可以压到 200ms 以内勉强能实时操作。TabQA 在这层做了自适应Android 10 及以上的设备默认走 H.264 推流老设备回退到截图轮询。实际用下来主流设备上投屏的流畅度已经接近 QtScrcpy 的默认档位了。触摸注入方面点击手机画面后扩展会把坐标转换成设备坐标然后通过 adb shell input tap x y 注入触摸事件滑动则是 input swipe按键则走 input keyevent。这里有个细节屏幕分辨率不同坐标换算一定要按真实分辨率做缩放不然点击位置会偏。截图和录屏更直接截图就是 adb exec-out screencap录屏就是 adb shell screenrecordTabQA 在提单面板里会把这两个动作封装成按钮一键执行并把文件保存到扩展本地等待上传附件。3. 上手实操从装扩展、连手机到第一次提单3.1 环境准备与扩展安装开始之前先确认几件事。Chrome 浏览器版本至少 114建议直接用最新版因为侧边栏 API 和 WebCodecs 在旧版本上行为不一致。如果你还在用 Win7 配老版本 Chrome那我建议先别折腾这个方案了Side Panel API 需要新版本内核才能撑起来还是老老实实用 QtScrcpy 更省心。Android 手机需要打开开发者选项设置 - 关于手机 - 连续点击版本号 7 次然后在开发者选项里打开 USB 调试。这个操作大部分做过安卓开发的同学已经很熟了但如果你是第一次配记得还要在USB 配置或默认 USB 配置里选文件传输。有些机型不选的话USB 抽象设备不会正常暴露给 ADB后面插上线就是死活识别不出来。安装 TabQA 有两种方式。第一种是从 Chrome 应用商店直接搜索 TabQA点安装等它出现在扩展列表里就行。企业内部如果网络受限装不了商店扩展那就用第二种让管理员把扩展的 crx 文件放到内网盘你在 chrome://extensions/ 页面打开右上角的开发者模式把解压后的文件夹拖进去完成加载。注意正式使用优先用商店版本开发者模式加载的扩展在 Chrome 重启后有概率被禁用需要重新手动启用。装完之后点一下 TabQA 的扩展图标侧边栏就从浏览器右边滑出来了。第一次打开它会检查 Chrome 版本和 ADB 链路是否可用一般会看到一个设备列表空空的初始界面。3.2 连接设备并完成首次投屏用数据线把手机插到电脑上。第一次连接时手机上会弹出允许 USB 调试吗的提示框记得勾选始终允许使用这台计算机进行调试然后点允许不然每次重插线都要再点一次。这一步经常有人忽略插上手机就直接开干结果 TabQA 那边一直显示无设备折腾半天才发现是授权弹窗没确认。回到 TabQA 侧边栏如果设备列表里还是空的点一下刷新按钮。正常情况下几秒钟后就能看到你的设备显示型号、Android 版本和序列号。点击设备卡片投屏画面就开始加载了。首次加载需要推流初始化视机型一般 2 到 5 秒出画面比 QtScrcpy 慢一点点但可以接受。画面上方会有几个参数选项分辨率、帧率、码率。在实际使用里我一般这么调分辨率优先保持设备默认预览区会等比缩放不需要手动降帧率日常功能测试 15 帧就够需要看动画过渡效果时再提到 30码率在 Wi-Fi 弱或者 USB 转接不稳定时降到 2M否则保持 4M 以上。投屏出来之后面板底部就是完整的功能条截图、开始录屏、抓取日志、打开设备信息、提单。整体布局和 QtScrcpy 右侧工具栏的职责差不多但所有产出物都直接挂在提单这个动作下面这一点才是它和普通投屏工具最不一样的地方。3.3 侧边栏里走通发现 Bug - 提单全流程这里我用一个实际场景讲一下完整流程。假设我在真机上手测某个电商 App 的支付页面点确认支付的时候页面闪了一下然后回到首页这明显是个跳转异常。我在 TabQA 侧边栏里的操作顺序是先点截图把当前页面截下来TabQA 自动命名并保存点开始录屏然后重新操作一遍支付流程把复现过程录下来再点停止点抓取日志TabQA 会执行 adb logcat -d 拉取当前缓冲区日志按关键字初步过滤崩溃栈点设备信息确认当前机型和系统版本自动带进工单点提单在弹出的表单里填标题、严重级别、复现步骤上面保存的截图、录屏、日志会作为附件自动带上提交这条缺陷记录就发到项目后台了。整个过程大概三四分钟不需要切窗口。而且如果你配置了公司内部的项目管理平台地址提单表单可以直接对接连复制粘贴的环节都省了。这种发现即记录、记录即提交的节奏用习惯了再回到以前那套流程是真的会觉得别扭。4. 实测避坑常见问题与排查心得4.1 设备列表里看不到手机问题出在哪按出现频率排序这类问题九成以上出在三个地方。第一USB 调试没开或者授权弹窗被忽略。插上手机后一定要看手机屏幕有的机型会静默不弹窗需要下拉通知栏主动点一下USB 调试通知。第二数据线问题。很多第三方充电线只支持充电不支持数据尤其 Type-C 口快充线外观一样但里面就没有差分数据线。判断方法很简单换一根确定能传文件的原装线试试。第三驱动冲突。这儿特别提一句纯 WebUSB 方案的 TabQA 对驱动的依赖很低但如果走的是本地桥接路线Windows 下还是有可能因为之前装过厂商手机助手导致 ADB Interface 被占用解决办法是在设备管理器里把旧的 ADB Interface 驱动卸载让系统重新识别。如果插了半天看不到还有一个快速定位的土办法打开命令行执行 adb kill-server adb start-server adb devices。如果这里能看到设备说明是扩展的问题如果这里也看不到那就是基础链路的问题别在扩展上浪费时间先把电脑和手机的 ADB 通道弄通再说。4.2 投屏黑屏、花屏、连接即闪退投屏黑屏这个词大家在 QtScrcpy 里问得多TabQA 一样会遇到。实测下来主要原因有三类。一是系统版本和编码路径不匹配。部分 Android 11 之前的机型走 H.264 推流时会黑屏这时候手动把画面模式切成兼容模式让它走截图轮询画面就会出来。二是分辨率设置过高。有的设备原生分辨率是 2K但 screenrecord 在高分辨率下编码压力很大前端解码又跟不上表现就是画面出来一帧就黑。把分辨率调到设备原生分辨率的 50% 左右比如 1080P 的设备开到 720P通常能解决。三是 WebCodecs 解码器兼容性。Chrome 版本过老或者硬件加速被禁用时H.264 解码会失效表现为画面一直转圈严重的时候整个浏览器打开扩展还会闪一下变空白。去 chrome://settings/system 里确认使用硬件加速模式是开启状态然后把 Chrome 升到最新基本都能救回来。4.3 延迟高、画面卡、操作不跟手如果你玩过 QtScrcpy 默认设置再用 TabQA 可能会觉得延迟稍微大一点。排查顺序我建议从网络和画质参数入手。USB 直连时优先检查是不是插在 USB 2.0 口或者用了扩展坞带宽不够会直接拉高延迟无线调试时先看手机和电脑是否在同一局域网公司 Wi-Fi 开了 AP 隔离的话设备之间是不通的这种情况你搜再多的优化教程也没用。还有一个小技巧把码率调低、帧率调到 20 左右延迟反而会更稳定。因为 30 帧高码率会让手机端编码器持续满载偶尔丢帧感官上反而更卡。我们日常跑功能用例15 帧加 4M 码率就足够丝滑了。如果你非要追求极致流畅那就回到 QtScrcpy这类浏览器方案目前的定位真不是给电竞级操作准备的。4.4 侧边栏、权限与浏览器策略问题有几个浏览器层面的坑值得说一下。第一个是 Chrome 默认会拦截本地网络。如果 TabQA 的无线调试功能要从扩展页面访问你局域网里的设备地址Chrome 有 Private Network Access 策略公共页面默认不允许请求本地网络扩展如果在商店版本里特殊声明权限还好开发者模式加载的版本就很容易被拦。遇到这种情况去 chrome://flags 里找 Private Network Access 相关项暂时放开或者干脆优先用 USB 线。第二个是侧边栏不听话。Chrome 的 Side Panel 默认只在你点扩展图标时打开如果你想让它跟随所有标签页、每次打开浏览器都在需要检查扩展设置里的在所有网站上显示开关。如果旁边还有其他侧边栏类扩展一起占用的话偶尔会把 TabQA 挤掉需要重新点图标唤出。第三个是企业环境容易遇到的Chrome 默认会拦截不安全的下载TabQA 导出的录屏文件如果被浏览器判定为来自不安全来源需要手动在下载列表里选保留。如果经常出现可以在扩展详情里允许该扩展访问文件网址把流程简化。5. 这类方案适合谁以及和 QtScrcpy 的共存之道5.1 哪些团队和场景能吃到红利从我个人的使用体验来划分TabQA 这类浏览器侧边栏 投屏 提单闭环的模式最能吃到红利的是三类人。第一类是测试团队的日常手测。App 测试本来就要配各种型号手机反复复现 Bug 然后提工单TabQA 把截图、录屏、日志、设备信息打包成一次提单动作节省的不只是几分钟而是整个流程的切换成本。就算一个 Bug 单只省三分钟一天提十个单就是半小时。第二类是远程协作场景。之前我需要帮同事看一个手机上的问题得把 QtScrcpy 的画面靠截图传给他或者让他自己装一套工具。现在同事只要在自己 Chrome 里装了 TabQA通过同一个设备池或者把设备临时授权共享出去他就能直接在侧边栏看到设备画面还能自己点一点复现。这对异地办公、外包团队尤其友好。第三类是纯前端和 Web 开发者。很多人用 Android Studio 自带模拟器但有些功能在真机上才复现。前端开发者的主战场在浏览器装一个 TabQA 之后主窗口调页面侧边栏看真机联调体验比来回切模拟器窗口要舒服得多。5.2 暂时还不适合干的事每样工具都有边界TabQA 也不例外。以下场景我建议你还是老老实实用 QtScrcpy 或者专业设备管理平台。一是游戏性能测试。需要高帧率画面和低延迟操作浏览器端目前的编码解码链路还做不到和桌面原生工具同等的性能表现。二是设备池挂机场景。如果你要管理几十台手机同时跑自动化用例浏览器扩展不是干这个的得用 STF 或者基于 adb 的设备集群平台。三是网络状况复杂的办公环境。公司内网如果对 USB 设备枚举权限管控很严或者 Chrome 策略禁止了 WebUSB那这个方案连第一步都走不通这时候 QtScrcpy 加本地桥接的老路反而更稳妥。5.3 我的实际选择两套工具并存最后说下我现在的真实状态。我把 TabQA 作为日常手测和提单的主力工具因为它把投屏这个动词做成了测试工作流的一部分方便是真的很方便。但我的电脑里依然留着 QtScrcpy。什么时候会用到它一个是连老设备的时候TabQA 的兼容模式帧率太低QtScrcpy 的编码优化在低端机上更顺手另一个是快速多开设备看全貌的时候QtScrcpy 的多窗口堆叠效率更高。两个工具各管一段不冲突。最后再分享一个我在实际使用中觉得特别值的小技巧TabQA 的提单表单字段是可以按公司规范自定义的。我们团队在字段里加了测试版本号和网络环境两个下拉项提单时自动带上当前包名和 Wi-Fi 状态。刚开始我觉得这功能没用真用上之后发现开发那边定位问题的速度明显快了因为少了很多来回确认版本和环境的对话。类似这种小配置建议你们拿到工具后第一时间花十分钟调一遍比多学任何技巧都管用。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门