三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

HOScrcpy鸿蒙远程真机工具:不抢设备也能调试,电脑上流畅操控鸿蒙真机

HOScrcpy鸿蒙远程真机工具:不抢设备也能调试,电脑上流畅操控鸿蒙真机

HOScrcpy鸿蒙远程真机工具:不抢设备也能调试,电脑上流畅操控鸿蒙真机

【免费下载链接】鸿蒙远程真机工具该工具主要提供鸿蒙系统下基于视频流的投屏功能,帧率基本持平真机帧率,达到远程真机的效果。项目地址: https://gitcode.com/OpenHarmonyToolkitsPlaza/HOScrcpy

做过鸿蒙应用开发的人,多半经历过这样的场景:办公室里只有一两台测试真机,排队调试是家常便饭;设备没电要等,连根数据线也要等。而 HOScrcpy 这个开源的鸿蒙远程真机工具,用一条视频流把真机画面实时搬到电脑上,帧率基本持平真机,操作延迟控制在百毫秒以内,让你从"抢设备"变成"随时有真机用"。

每天在工位上"抢手机"的你,需要一条视频流

先说说我们最常见的尴尬:测试设备不够用,几个开发者共用一台真机,改完代码要站起来、走过去、插上线、等授权弹窗,一顿操作下来十分钟过去了。如果是远程协作,设备在机房里、人在工位上,更是只能干瞪眼。

HOScrcpy 的思路很直接——把"人过去用设备"变成"把设备送到屏幕前"。它不做模拟器式的假环境,而是直接采集鸿蒙设备的真实屏幕画面,通过视频流传给电脑,再把你在电脑上的操作实时反控回设备。你看到的、摸到的,都是真机的状态。

它的能力清单可以概括成三件事:

  • 投屏:实时显示鸿蒙设备屏幕,支持设备列表一键切换;
  • 反控:触摸、鼠标、滚轮、虚拟按键,全套操作随手可发;
  • 调试:查看当前页面的控件结构树,还能导入导出布局,配合自动化测试。

拆开看:视频流采集与实时反控,如何连起电脑和真机

HOScrcpy 的技术底座并不神秘,它像一条双向管道:一端从设备侧采集屏幕码流,另一端把你按下的每一个坐标注入回设备。采集侧保证了画面接近真机帧率,反控侧保证了操作的低延迟,两头配合,才让你有"手在电脑上、心在真机上"的体验。

HOScrcpy 远程真机技术示意:屏幕码流采集与 GUI 反控两个通道协同工作

对普通用户来说,你不需要理解背后的编码细节,只需记住一个结论:它能投得流畅,也能控得跟手。

十分钟上手:从克隆代码到投屏画面出现

拿到项目只需要一条命令:

git clone https://gitcode.com/OpenHarmonyToolkitsPlaza/HOScrcpy.git

环境上准备 Java 8 及以上版本,配置好 JAVA_HOME 环境变量即可。构建方式很灵活:Windows 用户可以直接使用 release 目录下的win_start.bat,macOS 用户对应mac_start.sh;想自己编译的话,用 IDE 或 Maven 打出 jar 后,在产物目录执行java -jar HOScrcpy.jar -cp Main就能启动。

打开主界面后,操作流程比想象中更简单:

  1. 点击"刷新设备",等待本机和远程设备出现在下拉列表;
  2. 选中你的鸿蒙设备,点击"进入投屏";
  3. 稍等片刻,真机画面就出现在窗口中央,此时窗口会自动缩放适配屏幕大小。

进入投屏后的主界面:左边是实时画面,右边是快捷控制区

看到画面只是第一步,你很快会发现,鼠标点哪里,真机就响应在哪里——单击、长按、滑动,和直接拿手机操作几乎没有差别。

投屏之外:布局树、控件搜索与导入导出的调试妙用

如果你以为它只是个"投屏器",那就小看它了。界面里的"控件查看"按钮,能抓取当前页面完整的控件结构树,并在右侧展示每一个控件的属性:text、type、点击位置、控件范围、xpath 路径等一应俱全。

这套能力对两类人特别有用:

  • 做 UI 自动化测试的人:直接从布局树里拿到控件坐标与属性,生成测试脚本时不用再靠肉眼猜位置;
  • 排查界面问题的人:点选树中任意节点,画面上会同步高亮对应控件区域,属性和位置一目了然,还能按关键字搜索、模糊匹配,快速定位目标控件。

菜单里的"导入 Layout / 导出 Layout"则让布局信息可以在不同设备、不同时间点之间流转,方便你对比同一页面在不同系统版本下的结构差异。另外,"管理远程 IP"功能可以把远端机房的设备加进来,实现跨地域的真机复用。

换个玩法:让鸿蒙投屏跑在浏览器里

HOScrcpy 并不只满足于桌面端。项目里的 web_demo 模块展示了一种进阶玩法:在本地启动一个 WebSocket 服务,把设备投屏"广播"到网页上,浏览器直接变成第二个控制台。

原理并不复杂:服务端拿到设备视频流后转发给网页,网页再把触摸事件发回服务端注入设备。整个 SDK 的调用浓缩起来只有几行:

HosRemoteDevice device = new HosRemoteDevice("设备SN号"); device.startCaptureScreen(new ScreenCapCallback() { @Override public void onData(ByteBuffer buffer) { // 这里拿到视频流数据,可以显示、录制或转发 } });

想体验的话,运行web_demo下的MyWebSocket.java,再把资源目录里h264.html中的设备序列号改成你自己的,浏览器打开就能看到网页版投屏。这个小 demo 是理解整个 SDK 设计的最佳入口,代码路径在web_demo/src/main/java/MyWebSocket.java,值得翻一翻。

手感由你定:分辨率、帧率与码率的调节指南

不同场景对画质和流畅度的要求不一样,HOScrcpy 把选择权交还给了你。通过HosRemoteConfig对象,可以精细调整投屏参数:

参数默认值作用
缩放倍率原分辨率设为 2 即获取 1/2 分辨率画面,最大支持 1/5
帧率120FPS画面流畅度的上限,越高越跟手
码率30Mbps画面清晰度的上限,网络差时可调低
I 帧间隔2000ms关键帧间隔,影响跳转画面时的恢复速度
端口5000设备侧视频流转发端口

几个实用建议:本地 USB 调试时,放心开高帧率、高码率,体验最接近真机;跨网络远程连接时,先降一档分辨率和码率,稳定优先;用来录制演示视频时,可以适当调低帧率,减小文件体积。所有的改动都是即时的,多试几次,你会找到最适合自己网络环境的组合。

下一步,把它变成你自己的工具

HOScrcpy 的价值不止于"拿来即用"——它同时是一个开放的 SDK,HosRemoteDevice提供的截图、布局获取、按键注入等接口,足以支撑远程真机平台、自动化测试框架、录屏分析工具等二次开发。如果你有想法,不妨从hoscrcpy API介绍.md这份文档读起,再对照src/main/java/forms下的桌面端源码,看看官方工具自己是怎么用这些接口的。

现在就去克隆一份,跑起你的第一帧投屏画面。遇到问题或有了改进思路,欢迎到仓库提交 Issue 或 Pull Request——这个工具会因为你的一行代码而变得更好用。

【免费下载链接】鸿蒙远程真机工具该工具主要提供鸿蒙系统下基于视频流的投屏功能,帧率基本持平真机帧率,达到远程真机的效果。项目地址: https://gitcode.com/OpenHarmonyToolkitsPlaza/HOScrcpy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表