大家好,我是不想掉发的鸿蒙开发工程师城中的雾。
上一期我们终于把那根该死的数据线接通了,终端里终于蹦出了设备的序列号。如果你还没连上,请出门左转看 [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.ts的onCreate或onNewWant生命周期里,就能通过want.parameters拿到这个参数。这对于测试通知栏点击跳转、H5 唤起 App等场景简直是神技。
五、小思考:hdc install 和 hdc shell bm install 有啥区别?
在深入使用后,你可能会发现网上有两种安装命令:
hdc install xxx.haphdc shell bm install -p /data/local/tmp/xxx.hap
这俩有啥区别?
其实,hdc install 是一个复合动作:它先把你电脑上的 hap 文件推送到手机的临时目录,然后再调用手机内部的 bm install 命令进行安装。
而 hdc shell bm install 是纯手机内部的命令,前提是你得先把文件推进去。
结论:平时开发,用hdc install就够了,它帮咱们省了一步“推送文件”的麻烦。懒,才是第一生产力。
六、总结
今天我们掌握了 App 在鸿蒙设备上的生老病死:
- 生 (安装):
hdc install -r,遇事不决加个-r。 - 老 (查找):
hdc shell bm dump -a,查户口专用。 - 病 (调试):
hdc shell aa start,精准空降指定页面。 - 死 (卸载):
hdc uninstall,挥一挥衣袖不带走一片云彩。
下一期,我们将进入数据篇。App 崩溃了日志怎么抓?电脑里的文件怎么塞进模拟器里?
不想掉发的朋友们,请务必点赞支持一下下一期 [Vol.03 数据篇:文件传输与日志追踪]!
📚 充电时间
如果有想加入鸿蒙生态的大佬们,快来加入鸿蒙认证吧!初高级证书还没获取的,点这里:
🔗 HarmonyOS第一课:官方认证培训
如果您有任何疑问、对文章写的不满意、发现错误或者有更好的方法,欢迎在评论、私信中提出,非常感谢您的支持。