HarmonyOS 5 高效使用命令:HDC 基本使用

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

上一期我们终于把那根该死的数据线接通了,终端里终于蹦出了设备的序列号。如果你还没连上,请出门左转看 [Vol.01 连接篇]。

连上设备后,下一件头秃的大事是什么?当然是把 App 装进去

你可能会说:"点一下 IDE 绿色的 Run 按钮不就行了吗?"

兄弟,。当你在做自动化测试时、当测试给你的手机里装了旧版本死活覆盖不上时、当你不想打开笨重的 IDE 只想快速验证一个 HAP 包时,HDC 才是你唯一的救命稻草。

本期文章,我们来聊聊如何掌握 App 的"生杀大权":安装、卸载、查户口、以及像黑客一样直接启动页面

一、安装:不仅是 install 这么简单

在 IDE 里,安装就是个进度条。但在命令行里,安装充满了"博弈"。

1. 标准姿势

最基础的命令,把电脑上的 HAP 包推到手机里并安装:

复制代码
hdc install 你的安装包路径.hap

如果你的路径里有空格(比如 C:\Program Files...),记得用英文双引号把路径包起来,否则 HDC 会以为你传了两个参数。

2. 覆盖安装:"-r" 的救赎

很多时候,你修改了代码重新打了个包,想装到手机上,结果报错:

Error: INSTALL_FAILED_VERSION_DOWNGRADE 或者 INSTALL_FAILED_ALREADY_EXISTS。

这时候,系统在傲娇地告诉你:"里面已经有一个同名的 App 了,且版本比你的高/一样,我不装!"

别急,加个 -r (replace),强制覆盖:

复制代码
hdc install -r 你的安装包路径.hap

这就好比对系统说:"少废话,听我的,覆盖它!"这是开发过程中最高频使用的参数,建议刻在 DNA 里。

二、查户口:手机里到底装了谁?

有时候你想卸载一个 App,手指悬在键盘上准备敲命令,突然愣住了:

"哎?我的包名(Bundle Name)是啥来着?"

是 com.example.demo?还是 com.test.final.v2?

别去翻 AppScope/app.json5 了,直接问手机。

1. 查看所有已安装的包

我们需要进入手机的 Shell 环境,问问包管理器(Bundle Manager, 简称 bm):

复制代码
hdc shell bm dump -a

这会列出手机里成百上千个包名,看得你密集恐惧症犯。

2. 精准打击:搜特定包名

如果你记得包名里包含 "demo",可以用 grep (Linux/Mac) 或 findstr (Windows) 过滤一下:

复制代码
# Windows
hdc shell bm dump -a | findstr demo

# Mac/Linux
hdc shell bm dump -a | grep demo

这样,你就能从茫茫包海中找到那个 com.chengwu.superdemo

三、卸载:让往事随风

找到了包名,卸载就只是一行代码的事。

注意:这里用的是包名 (Bundle Name),不是 HAP 文件名!

复制代码
hdc uninstall com.chengwu.superdemo

执行完这句,手机上那个图标就消失了,所有本地数据(数据库、缓存)也会被彻底清空。

如果我只想卸载 App,但想保留里面的数据库方便下次调试怎么办?

在 Android ADB 里有 -k (keep data) 参数,但在鸿蒙目前的 HDC 版本中,卸载通常就是"净身出户"。如果需要保留数据,建议直接用 -r 覆盖安装,而不是先卸载再安装。

四、黑科技:AA 启动 (Ability Assistant)

这是本期的压轴大招

很多时候,我们要测试 App 里的某一个特定页面(比如支付成功页、通知落地页)。

传统做法:打开 App -> 点登录 -> 点商品 -> 点购买 -> 终于到了支付页。

HDC 做法:直接空降!

鸿蒙系统里有一个 Ability Assistant (aa) 工具,专门用来调度 Ability。

1. 基础启动

直接拉起应用的主 Ability:

复制代码
hdc shell aa start -a EntryAbility -b com.chengwu.superdemo
  • -a: 这里的 EntryAbility 是你在代码里写的 UIAbility 类名。
  • -b: 包名。

2. 携带参数启动 (模拟路由跳转)

如果页面需要参数(比如 orderId=10086)怎么办?用 -s 传参:

复制代码
hdc shell aa start -a EntryAbility -b com.chengwu.superdemo -s orderId 10086

然后在你的 EntryAbility.tsonCreateonNewWant 生命周期里,就能通过 want.parameters 拿到这个参数。这对于测试通知栏点击跳转H5 唤起 App 等场景简直是神技。

五、小思考:hdc install 和 hdc shell bm install 有啥区别?

在深入使用后,你可能会发现网上有两种安装命令:

  1. hdc install xxx.hap
  2. hdc shell bm install -p /data/local/tmp/xxx.hap

这俩有啥区别?

其实,hdc install 是一个复合动作:它先把你电脑上的 hap 文件推送到手机的临时目录,然后再调用手机内部的 bm install 命令进行安装。

而 hdc shell bm install 是纯手机内部的命令,前提是你得先把文件推进去。

结论 :平时开发,用 hdc install 就够了,它帮咱们省了一步"推送文件"的麻烦。懒,才是第一生产力。

六、总结

今天我们掌握了 App 在鸿蒙设备上的生老病死:

  1. 生 (安装)hdc install -r,遇事不决加个 -r
  2. 老 (查找)hdc shell bm dump -a,查户口专用。
  3. 病 (调试)hdc shell aa start,精准空降指定页面。
  4. 死 (卸载)hdc uninstall,挥一挥衣袖不带走一片云彩。

下一期,我们将进入数据篇。App 崩溃了日志怎么抓?电脑里的文件怎么塞进模拟器里?

不想掉发的朋友们,请务必点赞支持一下下一期 [Vol.03 数据篇:文件传输与日志追踪]!

📚 充电时间

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

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

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

相关推荐
SummerKaze2 天前
为鸿蒙开发者写一个 nvm:hmvm 的设计与实现
harmonyos
在人间耕耘4 天前
HarmonyOS Vision Kit 视觉AI实战:把官方 Demo 改造成一套能长期复用的组件库
人工智能·深度学习·harmonyos
王码码20354 天前
Flutter for OpenHarmony:socket_io_client 实时通信的事实标准(Node.js 后端的最佳拍档) 深度解析与鸿蒙适配指南
android·flutter·ui·华为·node.js·harmonyos
HarmonyOS_SDK4 天前
【FAQ】HarmonyOS SDK 闭源开放能力 — Ads Kit
harmonyos
Swift社区4 天前
如何利用 ArkUI 框架优化鸿蒙应用的渲染性能
华为·harmonyos
特立独行的猫a4 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS影视票房榜组件完整实现过程
华为·uni-app·harmonyos·轮播图·uniapp-x
盐焗西兰花4 天前
鸿蒙学习实战之路-STG系列(5/11)-守护策略管理-添加与修改策略
服务器·学习·harmonyos
盐焗西兰花4 天前
鸿蒙学习实战之路-STG系列(4/11)-应用选择页功能详解
服务器·学习·harmonyos
lbb 小魔仙4 天前
鸿蒙跨平台项目实战篇03:React Native Bundle增量更新详解
react native·react.js·harmonyos
特立独行的猫a4 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS滚动卡片组件,scroll-view无法滚动踩坑全记录
华为·uni-app·harmonyos·uniapp-x