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

日记详情

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

一台鸿蒙真机如何全团队共用?HOScrcpy远程真机工具快速上手实录

一台鸿蒙真机如何全团队共用?HOScrcpy远程真机工具快速上手实录

一台鸿蒙真机如何全团队共用?HOScrcpy远程真机工具快速上手实录

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

HOScrcpy是一款基于视频流方案的鸿蒙远程真机工具,它能把电脑变成鸿蒙设备的"第二块屏幕",画面帧率接近真机、操作延迟压在百毫秒级。这篇文章不堆参数、不讲空话,只记录一次从零到一的完整上手过程,以及我在这条路上踩过的所有坑,读完你就能自己搭起一套远程真机环境。

先说个扎心场景:设备不够用,怎么办?

做鸿蒙开发的都知道,真机永远是稀缺资源。团队十几号人,测试机就那么一两台,日常状态是这样的:

  • 设备插着USB线,谁要用谁去拔,排队全靠"拼手速";
  • 人在工位才能调试,出差、居家直接抓瞎;
  • 想远程帮客户排查问题,人家根本不懂怎么连调试工具。

这些问题归根到底是一句话:真机被"物理位置"锁死了。而HOScrcpy做的事情,就是把这把锁撬开——设备只需要在机房里待着,你坐在任何一台电脑前,都能像握着真机一样看画面、点屏幕、按按键。帧率基本持平真机帧率,达到远程真机的效果,这正是一套可部署在开发者机房的远程真机服务。

它的原理并不玄乎:视频流 + 实时反控

拆开看,HOScrcpy其实就是两个环节在转:

  1. 屏幕码流采集:设备侧把屏幕画面实时编码成视频流,通过网络送到电脑端解码显示;
  2. 实时GUI反控:你在电脑上的触摸、按键、滚轮操作,反过来注入到设备里。

这两个环节闭环,就构成了完整的远程真机体验。下面这张图是它的技术方案总览,左侧是核心能力,右侧就是一个跑在网页里的远程控制实例:

项目是纯Java实现,SDK对外提供的核心类都集中在com.huawei.hosscrcpy.api包下,日常打交道的主要就三个:HosRemoteDevice(设备操作)、ScreenCapCallback(视频流回调)、HosRemoteConfig(参数配置)。

性能如何?一张速查表看清楚

指标表现说明
帧率最高120fps,默认120fps可自定义下调
延迟反控响应 <100ms端到端全链路
分辨率支持1/2、1/3、1/4、1/5缩放通过scale参数控制
码率默认30Mbps网络紧张时可调低
I帧间隔默认2000ms影响花屏恢复速度

这几个参数后面都能在代码里手动调,属于"起步就够用、想细调也有得玩"的类型。

第一次上手:从空白环境到屏幕亮起

这一节记录我完整跑通一遍的真实过程,跟着做就行。

第一步:先确认三样东西就位

  • JDK:版本8及以上,且JAVA_HOME环境变量已配置(注意路径里不要带bin目录);
  • Maven:用于拉依赖、打包;
  • hdc 工具:设备调试桥,hdc list targets能列出设备才行。

第二步:拉取源码,把可执行包构建出来

git clone https://gitcode.com/OpenHarmonyToolkitsPlaza/HOScrcpy cd HOScrcpy mvn clean package

如果习惯用 IDEA,也可以用图形化的"工件"方式构建,流程是:新建工件 → 配置工件 → 构建工件,产物会落在项目的out/artifacts/HOScrcpy_jar目录下:

构建完成后,HOScrcpy_jar文件夹里除了主程序HOScrcpy.jar,还带着一整套依赖库(ffmpeg、javacv 等)。这些jar一个都不能少,启动时要保证它们都在同一目录下,这就是为什么 README 里提醒"HOScrcpy_jar文件夹下的所有jar在使用时将会用到":

第三步:启动主程序,投出第一帧画面

在jar包所在的目录执行:

java -jar HOScrcpy.jar -cp Main

一个简洁的控制台窗口会弹出来,界面分成设备区和控制区。操作只有三步:刷新设备 → 选中设备 → 进入投屏,稍等片刻,真机画面就出现在窗口里了:

到这里,远程真机就算跑起来了。你可以直接在电脑上点屏幕、按电源键、调音量,体验一下和握着真机几乎无差别的操控手感。

进阶玩法一:把投屏调成"最顺手"的状态

默认参数跑通没问题,但不同场景对画质和流畅度的要求完全不同。HOScrcpy 允许通过HosRemoteConfig做精细化配置,核心代码就几行:

HosRemoteConfig config = new HosRemoteConfig("设备的SN号"); config.setScale(2); // 分辨率取原图的 1/2,省带宽 config.setFrameRate(60); // 帧率调到 60fps config.setBitRate(20); // 码率 20Mbps HosRemoteDevice device = new HosRemoteDevice(config);

我个人的调参经验,可以参考这张表:

使用场景建议帧率建议分辨率一句话理由
开发调试60~120fps高分辨率看细节、找问题,流畅优先
远程演示30fps中分辨率讲清楚操作即可,省资源
网络受限15~30fps低分辨率优先保证不卡顿、不花屏

除此之外,HosRemoteConfig还能设置设备侧视频流转发端口(默认5000)、hdc可执行文件的完整路径、以及I帧间隔,属于按需使用的"隐藏旋钮"。

进阶玩法二:布局分析 + Web端投屏,两个"彩蛋"能力

投屏只是基础,HOScrcpy还有两个值得单独拎出来说的能力。

第一个是控件树分析。调用getLayout()接口,可以拿到当前页面的UI结构JSON,工具界面里也内置了布局查看面板,能直接以树形结构浏览控件层级、查看属性,甚至导出导入。做UI自动化测试或者排查布局问题时,这个功能能省掉大量肉眼定位的时间。

第二个是Web端集成。项目根目录的web_demo是一个独立的Maven工程,它的玩法很有意思:本地起一个WebSocket服务端,把视频流广播出去,浏览器打开一个HTML页面就能看画面、还能点按控制。核心代码在web_demo/src/main/java/MyWebSocket.java

// 启动WebSocket服务,浏览器端接入后即可投屏 int port = 8899; new MyWebSocket(port).start();

使用流程三步走:先跑MyWebSocket的 main 方法启动服务,再修改resources/html/h264.html第31行填上自己设备的SN号,最后用浏览器打开该HTML。基于这套方案,你可以做出自己的远程真机网页平台。

避坑清单:这些坑我替你踩过了

坑1:画面静止不动?

这是最容易困惑的一个。SDK的机制是"画面变动才推流",如果设备亮屏且画面完全静止,视频流不会自动刷新。这时候随便在手机上滑动一下,画面就来了。另外,回调里有个onReady()方法,含义是"投屏已就绪",你可以在里面主动触发一个画面变动动作(比如按下电源键),避免卡在无画面状态。

坑2:老系统版本连不上?

投屏能力依赖设备系统版本。早期固件(如3.0.0.25之前的版本)需要hosscrcpy-1.0.0-beta,新版本系统则要用hosscrcpy-1.0.1-beta及以后的jar包,用错版本会出现无法投屏的问题。选jar时先确认设备系统版本。

坑3:Mac上构建报错?

工程默认的ffmpeg依赖带了windows-x86_64分类器,Mac平台需要把pom里这个依赖的classifier改成macosx-x86_64(Intel芯片)或macosx-arm64(Apple芯片),其余步骤和Windows一致。

坑4:依赖包丢失导致启动失败?

如果你用的是IDEA工件方式构建,HOScrcpy_jar目录下的所有jar都是运行时的依赖,别只拷走主程序。换个目录部署时,把整个文件夹一起带走。

坑5:操作无响应?

多数情况是设备端弹了授权确认框没点"允许"。反控操作走的是另一条通道,投屏正常不等于反控权限已授予,先在设备上看一眼有没有待确认的弹窗。

真实使用故事:这四类人正在用它

开发调试(效率提升最明显)。不用再为了看一行日志反复插拔USB线,调试接口、验证交互、查看控件树都在电脑上完成,省下的时间相当可观。

远程技术支持。用户设备出问题,你可以直接看到他的屏幕画面,指引他一步步操作,或者远程代操作。上门服务的成本省了,解决问题的速度反而更快了。

自动化测试。通过SDK的API(触摸注入、按键、shell命令执行)控制设备跑用例,多设备也能批量调度,适合搭在测试机房里做持续验证。

教学培训。讲师把真机画面投到大屏上,学员能看到每一步真实操作细节,比PPT截图直观得多。

下一步,你可以怎么玩

如果决定入坑,给你一份行动清单:

  1. 跑通基础投屏:clone 项目、构建、连接设备,先让画面亮起来;
  2. 玩透参数:对照前面的调参表,试试帧率、分辨率、码率的组合效果;
  3. 研究API:项目里的hoscrcpy API介绍.md把每个方法都讲清楚了,触摸、鼠标、滚轮、横竖屏切换一应俱全;
  4. 尝试Web方案:把web_demo跑起来,体验浏览器投屏的乐趣;
  5. 读源码src/main/java/forms下的界面实现、utils下的工具类,都值得翻一翻。

最后总结一下HOScrcpy的核心价值:低延迟高帧率的视频流投屏、完整的远程反控能力、支持Windows和macOS、还附带Web端集成方案。对于鸿蒙开发者、测试工程师,乃至需要远程协助的技术支持人员来说,它都是一件值得放进工具箱的趁手工具。现在就去clone一份,让那台闲置的鸿蒙真机,变成全团队共享的"远程真机"吧。

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

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

← 返回列表