大家好,我是不想掉发的鸿蒙开发工程师城中的雾。

前两期我们搞定了设备连接和应用安装。现在,App 已经在手机里跑起来了。但是,程序的世界哪有那么顺利?App 闪退了、数据不对了、界面卡死了……这时候,光盯着屏幕看是没用的。我们可以使用命令,查看设备内部的文件和日志,找出 Bug ,本期,我们将学习 HDC 的 文件传输日志调试 技能,这是从“初级码农”进阶到“调试大师”的必经之路。

1. 文件传输

开发过程中,我们经常需要把测试数据塞进手机,或者把手机里的数据库导出来分析。虽然 IDE 的 Device File Explorer 也能做,但它经常卡顿,而且在批量操作时显得笨拙。

HDC 的 file 命令非常简单粗暴,就是快。

发送文件 (Send)

将电脑上的文件推送到手机里。

场景:推送测试图片、配置文件、SSL 证书等。

# 格式:hdc file send [本地路径] [设备路径]
hdc file send ./test_image.jpg /data/local/tmp/

经验之谈:

为什么是 /data/local/tmp/?

因为在非 Root 的真机上,大多数目录我们是没有写入权限的。而 /data/local/tmp/ 是个神奇的公共区域,谁都能写,非常适合作为中转站。

接收文件 (Recv)

将手机里的文件拉取到电脑上。

场景:导出应用的 SQLite 数据库、崩溃日志文件、截图等。

# 格式:hdc file recv [设备路径] [本地路径]
hdc file recv /data/local/tmp/crash_log.txt ./logs/

高阶技巧:文件夹传输

HDC 支持直接传输整个文件夹,不需要压缩包!

# 把整个 dist 文件夹推送到手机
hdc file send ./dist/ /data/local/tmp/

2. 日志调试: 命令调用HiLog

如果你问我,除了 IDE 的 Debug 模式,什么工具最重要?那绝对是 HiLog。它是鸿蒙系统的日志系统,记录了系统和应用发生的一切。

在命令行看日志,比 IDE 的 Logcat 更硬核,但也更灵活(尤其是在服务器环境或自动化脚本中)。

基础抓取

直接打印所有日志(慎用,屏幕会疯狂滚动):

hdc hilog

🛑 如何停止输出?

日志一旦开始就会像瀑布一样刷屏。想要停下来,请在终端窗口中按下键盘组合键:

Ctrl + C

这会发送中断信号,立即停止日志抓取。

过滤日志:找到你关心的那一行

海量日志中 99% 都是废话。我们需要参数来过滤。

按标签 (Tag) 过滤 (-T)

这是最常用的。假设你的代码里定义了 Tag 为 MyPage

# 仅显示 Tag 为 MyPage 的日志
hdc hilog -T MyPage
按等级 (Level) 过滤 (-L)

日志等级从低到高:D(Debug) < I(Info) < W(Warn) < E(Error) < F(Fatal)。

# 仅仅想看报错?
hdc hilog -L E
常用

查看 MyPage 标签下 Info 及以上级别的日志:

hdc hilog -T MyPage -L I

格式化与存储

有时候日志太长,终端看不过来,或者你想把日志发给同事甩锅。

保存到文件:

利用系统管道符 >。

hdc hilog > ./bug_report.log

简单文本搜索:

配合 grep (Linux/Mac) 或 findstr (Windows) 使用,比 HDC 自带的过滤器更强大。

# Linux / MacOS
hdc hilog | grep "NullPointerException"

# Windows (CMD)
hdc hilog | findstr "NullPointerException"

清空缓冲区

开始新一轮测试前,最好把之前的旧日志清掉,避免干扰。

hdc shell hilog -r

3. 进阶诊断:Shell 下的秘密武器

HDC 的 shell 命令让我们能直接进入设备的 Linux 环境。这里有几个命令,是排查疑难杂症的利器。

截图 (Snapshot)

不需要手机截屏再导出来,一行命令搞定。

基础用法:

# 1. 截图并保存到手机临时目录
hdc shell snapshot_display -f /data/local/tmp/snap.jpeg

# 2. 拉取到电脑
hdc file recv /data/local/tmp/snap.jpeg ./

懒人脚本:一键截图到桌面 (Windows)

每次敲两行命令太麻烦?创建一个 snap.bat 文件,双击即可将截图自动保存到桌面的 Snapshot 文件夹,并以时间戳命名。

@echo off
setlocal

echo ==========================================
echo        HarmonyOS One-Click Snapshot
echo ==========================================

:: 1. 设置保存路径为桌面 Snapshot 文件夹
set "SAVE_DIR=%USERPROFILE%\Desktop\Snapshot"
if not exist "%SAVE_DIR%" mkdir "%SAVE_DIR%"

:: 2. 生成时间戳文件名 (格式:snap_YYYYMMDD_HHMMSS.jpeg)
set "FILENAME=snap_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.jpeg"
set "FILENAME=%FILENAME: =0%"

:: 3. 执行截图 -> 拉取 -> 清理
echo [1/3] Taking snapshot on device...
hdc shell snapshot_display -f /data/local/tmp/%FILENAME%

echo [2/3] Pulling to PC...
hdc file recv /data/local/tmp/%FILENAME% "%SAVE_DIR%\"

echo [3/3] Cleaning up temp file...
hdc shell rm /data/local/tmp/%FILENAME%

echo.
echo [Success] Saved to: %SAVE_DIR%\%FILENAME%
timeout /t 3 >nul

4. 端口转发:连接本地服务 (fport)

这个功能主要用于 Web 调试Socket 通信

比如,你在 Chrome 浏览器中调试手机 WebView 内容(chrome://inspect),或者手机 App 需要连接电脑上的本地服务器。

# 格式:hdc fport [PC端口] [设备端口]
hdc fport tcp:8080 tcp:8080
  • 查看转发列表hdc fport ls
  • 移除转发hdc fport rm tcp:8080 tcp:8080

总结:调试命令速查表

场景 命令 备注
传文件进手机 hdc file send [本地] [远端] 推荐传到 /data/local/tmp
传文件回电脑 hdc file recv [远端] [本地] 支持文件夹
看日志 hdc hilog 配合 grep 更好用
停止日志 Ctrl + C 终止刷屏
过滤日志 hdc hilog -T [Tag] -L [Level] 常用组合
清日志 hdc shell hilog -r 测试前必做
查当前页面 `hdc shell "dumpsys … grep …"`
截图 hdc shell snapshot_display ... 快速取证

经过这三期的洗礼,你已经掌握了 连接 -> 安装 -> 调试 的全套连招。大部分的日常开发工作,你现在都可以完全脱离鼠标,用键盘噼里啪啦地完成了。

下一期(最终章):使用hdc搭建应用部署脚本

📚 充电时间

如果有想加入鸿蒙生态的大佬们,快来加入鸿蒙认证吧!初高级证书还没获取的,点这里:

🔗 HarmonyOS第一课:官方认证培训

如果您有任何疑问、对文章写的不满意、发现错误或者有更好的方法,欢迎在评论、私信中提出,非常感谢您的支持。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐