HarmonyOS 鸿蒙Next中Graphic Profiler非root设备如何截帧

HarmonyOS 鸿蒙Next中Graphic Profiler非root设备如何截帧 Remote failure details:

Squid injection failed: Timed out waiting for opening a target control connection. This usually indicates the device requires root, otherwise the app requires a debug version.

Quick diagnostics & suggested actions:

  • The device requires root for injection. If not, ensure the app is debuggable.
  • The app must be one that calls graphics APIs.
  • If capture RS frames, consider rebooting the device to restart the render service.
  • Check the package/process name string chosen is correct.
  • If connection timeout occurs, retry several times.

使用Frame Profiler进行截帧出现该问题,Frame Profiler版本为7.2.7.203,软件也是debug版本,系统HarmonyOS版本为6.1.0


更多关于HarmonyOS 鸿蒙Next中Graphic Profiler非root设备如何截帧的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

尊敬的开发者,您好,
关于您反馈的问题,

当前Graphics Profiler版本7.2.7.203已支持,下载链接参考:GraphicsProfiler下载链接,如想抓取Trace也可看下SmartPerf

使用Graphics Profiler截帧失败,提示Squid injection failed,参考以下解决方案:

抓帧前需按照使用Graphics Profiler的前提条件打包hap,抓帧时需要将设备侧的Squid设置为小窗模式,具体可参考HarmonyOS NEXT设备抓帧回放

更多关于HarmonyOS 鸿蒙Next中Graphic Profiler非root设备如何截帧的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


非 root 设备不是完全不能做图形性能分析,但要分清“应用级性能采集”和“系统级任意进程截帧”。普通开发者主要走 DevEco Studio Profiler / Graphic Profiler 连接调试设备,对自己安装的 debug 包做帧率、渲染耗时、丢帧、CPU/GPU 等分析;如果想抓系统应用或其他应用的完整帧数据,通常会受权限和系统策略限制。

建议先检查三件事:1. 手机开启开发者选项、USB 调试,hdc 能正常识别;2. 应用使用 debug 构建并带调试签名,包名和进程已被 Profiler attach 到;3. DevEco Studio、SDK、设备系统版本匹配,Profiler 插件不是旧版本。

如果按钮置灰或只能看到部分指标,多半不是代码问题,而是当前设备/构建类型/权限范围不满足。可以先用一个空 ArkUI demo 验证 Profiler 链路,再回到业务工程。参考来源:DevEco Studio Profiler 使用说明、HarmonyOS 性能分析与图形渲染优化文档。

针对 HarmonyOS NEXT + Frame Profiler 7.2.7.203 + HarmonyOS 6.1.0 环境,这个问题实际上比较常见。

从报错来看:

Squid injection failed:
Timed out waiting for opening a target control connection

说明 Frame Profiler 在向目标进程注入采集组件(Squid)时失败了,并不是应用本身渲染异常。

先回答结论

对于非 Root 设备,Frame Profiler 是支持截帧的,但需要满足以下条件:

  1. 应用必须是 Debug 包
  2. 应用必须存在实际图形渲染(ArkUI、Canvas、Web、OpenGL ES、Vulkan等)
  3. Frame Profiler 选择的进程必须正确
  4. 当前设备型号和系统版本需要支持 Squid 注入
  5. Frame Profiler 版本需要与系统版本匹配

如果以上都满足仍然报错,那么大概率属于:

Frame Profiler 7.2.7.203 与 HarmonyOS 6.1(API23)兼容性问题

或者:

当前设备暂不支持非Root模式下的图形注入

排查步骤

1. 确认应用真的是 Debug 安装包

不要只看:

"buildMode": "debug"

建议执行:

hdc shell bm dump -n 包名

查看应用信息。

确认安装到设备上的确实是:

debuggable=true

如果之前安装过 Release 版本,建议:

hdc uninstall 包名

然后重新通过 DevEco Studio 运行安装。


2. 确认选择的是正确进程

很多应用实际运行时不止一个进程。

例如:

com.demo.app
com.demo.app:render

或者:

WebView进程
Render进程

可以查看:

hdc shell ps -ef

找到实际进行渲染的进程。

Frame Profiler 中选择错误进程时,经常出现:

Timed out waiting for opening a target control connection

3. 确认页面确实在进行图形渲染

Frame Profiler 并不是针对普通业务逻辑。

建议测试:

  • Canvas组件
  • Web组件
  • 动画页面
  • OpenGL ES页面
  • Vulkan页面

如果只是:

Column() {
  Text('Hello')
}

这种静态页面,有时无法产生有效采集数据。


4. 重启设备后重试

官方提示中有一句:

If capture RS frames, consider rebooting the device to restart the render service.

这是有实际意义的。

HarmonyOS 的:

RenderService
RS

长时间运行后可能导致注入异常。

建议:

重启设备
重新连接HDC
重新启动Frame Profiler

再测试。


5. 检查是否所有应用都无法截帧

建议新建一个最简单的 ArkUI 工程:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('Profiler Test')
        .fontSize(30)
    }
  }
}

安装后尝试截帧。

结果有两种:

情况1

所有工程都失败

说明:

工具环境问题

而不是项目问题。

情况2

只有当前项目失败

说明:

项目配置问题

例如:

  • 多进程
  • Web进程
  • 特殊渲染方式

关于 Root 提示

报错中提到:

This usually indicates the device requires root

很多人会误解。

实际上并不是说:

HarmonyOS NEXT 必须Root才能截帧

官方设计本身支持:

Debug应用 + 非Root设备

进行图形分析。

这里的提示更准确理解应该是:

当前注入失败
如果设备允许Root可以绕过部分限制
否则需要确保目标应用可调试

关于 Frame Profiler 7.2.7.203

这是我比较怀疑的点。

你当前环境:

Frame Profiler:7.2.7.203
HarmonyOS:6.1.0(API23)

而:

7.2.7.203

发布时间明显早于:

HarmonyOS NEXT API23

最近已经有开发者反馈:

HarmonyOS 6.1
设备识别正常
应用识别正常
注入失败
无法截帧

表现与当前问题高度一致。

建议优先验证:

  • 是否有更新版 Frame Profiler
  • 是否有对应 HarmonyOS 6.1 的兼容版本
  1. Frame Profiler 7.2.7.203是当前官网上最新的版本,是兼容目标设备HarmonyOS 6.1的;​

  2. 使用了你提供的简易ArkUI 工程,可以正常调试,但是仍然截不了帧,这是新建应用的信息

    hdc shell bm dump -n com.demo.test | findstr “debug”

    “appProvisionType”: “debug”,

    “debug”: true,

Squid injection failed: Timed out waiting for opening a target control connection。这个就是 squid 注入失败。

如果你确定是debug模式,首先确保应用使用调试签名(debug 签名)编译并安装到设备。在 DevEco Studio 中,运行应用时请选择“debug”编译模式,并检查安装包是否带有调试权限。

在应用的 module.json5配置文件中,确认 debug字段已设置为 true

然后检查设备开发者选项

进入设备的“设置 > 关于手机”,连续点击“版本号”开启开发者模式。

返回“设置 > 系统和更新 > 开发人员选项”,开启“USB 调试”和“仅充电模式下允许 ADB 调试”。

同时开启“GPU 调试”相关选项,例如“调试 GPU 过度绘制”和“GPU 渲染模式分析”,这些选项有助于图形调试工具注入。

最后我看你的这个当前 Frame Profiler 版本为 7.2.7.203,可以检查是否有更新版本(如 DevEco Studio 配套的最新 Profiler 插件),新版可能修复了兼容性问题。

确保 HarmonyOS SDK 和工具链已更新至与 HarmonyOS 6.1.0 匹配的版本。

没有权限应该不行吧

在HarmonyOS NEXT中,非root设备使用Graphic Profiler截帧,需开启开发者模式及USB调试,并确保已安装HDC工具。通过HDC连接设备后,执行hdc shell setprop persist.graphic.profiler.enable 1启用抓帧服务,重启设备。随后启动Graphic Profiler,选择目标应用,点击“截帧”即可捕获当前帧。无需root权限。

非 root 设备使用 Graphics Profiler 截帧,必须确保应用是 debuggable 版本。请在 module.json5 中设置 "debuggable": true,重新打包安装。连接超时通常与 HDC 授权或渲染服务状态相关:

  1. 执行 hdc shell 确认设备已授权且连接正常。
  2. 重启渲染服务:hdc shell "killall render_service",或直接重启设备。
  3. 在 Frame Profiler 中准确填写目标应用的包名和进程名,且应用需正在运行并调用图形 API。
    若仍超时,多次重试截帧操作,版本 7.2.7.203 在 HarmonyOS 6.1.0 上已支持非 root 调试,按上述排查即可。
回到顶部